ArcGIS Engine断开其他ArcSDE用户连接的解决方案
来源:互联网 发布:淘宝客服招聘在家兼职 编辑:程序博客网 时间:2024/05/21 15:43
最近有很多用户咨询在ArcGIS Engine中希望能够实现断开其他客户端连接ArcSDE的用户,其实个人认为ArcGIS Engine实现的是业务功能,断开其他客户端用户连接是一个管理型功能,这些操作不应该在一块,但是用户的需求可能就是有一定的合理性。特别是ArcGIS10.1也的确将ArcSDE管理的功能集成到ArcGIS for Desktop,说明这种功能实现可能是可行的。
ArcGIS 10.1之前的版本是不能使用ArcGIS Engine实现该功能,因为ArcGIS Engine根本就没有提供相关的接口。
ArcGIS10.1包括之后的版本是可以使用ArcGIS Engine实现该功能,这样同步了ArcGIS 10.1 for Desktop同步该功能一样。
测试环境:
用户1:aaa,包括connect和resouces的角色
用户2:bbb,包括dba权限
用户3:sde,包括sde的权限
这三个用户都是一个实例下,有时候也统称为sde的用户。
如果使用过ArcSDE命令用户应该可以了解提供了sdemon -o kill命令来断开相关的sde用户连接,主要是获得连接用户的sessionID,然后调用命令kill即可
C:\Users\Li>sdemon -o killESRI ArcSDE System Monitor Utility Fri Aug 29 14:50:02 2014-------------------------------------------------------------------------sdemon -o kill -t {all | <pid>} [-u <DB_User_name>] [-p <DB_Admin_password>] {[-i <service>] [-s <server_name>] | [-H <sde_directory>]} [-D <database>] [-N]sdemon -hsdemon -?
那么ArcGIS Engine也是使用该命令,该Kill功能集成在了IDatabaseConnectionInfo4的DisconnectUser,传入相关参数的sessionID即可。
------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
建议看到转载,请直接访问正版链接获得最新的ArcGIS技术文章
Blog: http://blog.csdn.net/linghe301
------------------------------------------------------------------
具体代码如下:
该代码并没有考虑对Lock的逻辑判断。
public static void test() { try { IWorkspace pWS = GetSDEWorkspace("localhost", "localhost/orcl", "sde", "sde", "sde.DEFAULT"); IDatabaseConnectionInfo4 pDCInfo = pWS as IDatabaseConnectionInfo4; IEnumUserInfo pEnumUsers = pDCInfo.ConnectedUsers; IUserInfo pUser = pEnumUsers.Next(); int pSessionID;//获得连接用户的sessionID string sUserName = "";//连接用户名称 string sClientName = "";//连接用户的机器名 string sConnetionTime = "";//连接用户的开始连接时间 while (pUser != null) { if (!pUser.IsOwnConnection) { pSessionID = pUser.SessionID; sUserName = pUser.Name; sClientName = pUser.ClientName; sConnetionTime = pUser.ConnectionTime.ToString(); //通过用户的sessionID断开用户连接 pDCInfo.DisconnectUser(pSessionID); } pUser = pEnumUsers.Next(); } } catch (Exception e) { } } public static IWorkspace GetSDEWorkspace(string sServerName, string sInstancePort, string sUserName, string sPassword, string sVersionName) { IPropertySet2 set = new PropertySetClass(); set.SetProperty("Server", ""); set.SetProperty("DBCLIENT", "Oracle"); set.SetProperty("Instance", "sde:oracle11g:" + sInstancePort); set.SetProperty("User", sUserName); set.SetProperty("password", sPassword); set.SetProperty("version", sVersionName); IWorkspaceFactory2 class2 = new SdeWorkspaceFactoryClass(); try { return class2.Open(set, 0); } catch (Exception ex) { return null; } }
注意:虽然这是一个ArcGIS Engine的例子,我们需要了解一些ArcSDE的基础知识,也就是我们只能通过sde管理员用户才能断开其他用户的连接,即使你当前连接的用户有dba权限也不行,我个人推断Esri在代码层次上将用户名写死成sde了,所以其他用户连接根本不行,直接报错。
那么如果ArcGIS10.1版本之前的用户该怎么实现这个操作呢?
1:将ArcSDE命令编辑为一个bat文件,利用C#或者JAVA语言直接调用该文件。
2:如果你熟悉Oracle数据库,当然再好不过了,因为ArcSDE作为一个数据库中间件,它核心的东西就是调用Oracle的相关功能,所以我们可以绕开ArcSDE层次,直接在Oracle上操作。
注意:当然不建议普通用户这样操作了,比较有一定的风险。
我们可以将sde用户下的process_information与v$session进行关联查询,根据sde命令获得的sde_id,应用程序名称,终端名称、用户名等信息获得最终断开的连接信息。
SQL> select a.sde_id,a.server_id,b.sid,b.SERIAL#,b.PROGRAM,b.USERNAME,b.TERMINAL from sde.process_information a ,v$session b where a.start_time=b.LOGON_TIME;SDE_ID SERVER_ID SID SERIAL# PROGRAM USERNAME TERMINAL------ --------------------------------------- ---------- ---------- ------------------------------22 5692 140 386 sde.vshost.exe SDE WIN-HV4HFT8KPSS20 4756 137 4713 ArcMap.exe BBB WIN-HV4HFT8KPSS
欢迎添加微信公众号:ArcGIS技术分享(arcgis_share),直接回复1就可以在移动端获取最新技术文章。
- ArcGIS Engine断开其他ArcSDE用户连接的解决方案
- NAO连接经常断开连接的解决方案
- ArcSDE与SQL sevrver的连接、ArcSDE导入数据、ArcGIS Server发布地图服务
- 强制断开oracle数据库的用户连接
- 断开某个用户的终端连接
- oracle 断开用户连接的方法
- linux 断开某个用户的终端连接
- Oracle断开正在连接的用户
- ArcGIS 9.3下载,包含ArcGIS Desktop、ArcGIS Engine、ArcGIS Server、ArcSDE、workstation
- ArcGIS介绍:ArcObjects、 ArcGIS Desktop、ArcGIS Engine 和 ArcSDE、ArcIMS、ArcGIS Server
- ArcGIS 9.3下载,包含ArcGIS Desktop、ArcGIS Engine、ArcGIS Server、ArcSDE、workstation
- ORACLE删除用户时断开当前连接的用户
- Oracle强行断开用户连接
- PostgreSQL 断开所有连接用户
- 关于IBM无线网络连接后会不定时自动断开的解决方案
- secure crt使用一段时间后断开连接的解决方案
- win10 系统 无线网络自动断开连接的解决方案
- Oracle中强行断开用户连接的方法
- cJSON
- 堆栈初始化,POP,PUSH()
- swing生成图片之图片生成及显示
- MFC 多线程总结 .
- 理解 Linux 配置文件
- ArcGIS Engine断开其他ArcSDE用户连接的解决方案
- Delphi ControlBar Coolbar的使用
- iOS_25_彩票_控制器的view的适配
- Linux那些事儿之我是Block层(2)注册一个块设备驱动
- Viewpager:实现android初次登陆浏览应用界面效果
- 打开iptable端口
- GPIO的上拉下拉功能说明
- andriod 4.0以上版本不调用onConfigrationChange方法的解决办法
- DLL目录查找顺序