好了,继续我最近关于操作SDE海量数据库的心得。我开发的一个功能是将MDB中的要素写入SDE要素类中,这个功能并不复杂,我早就写过一个非常完备的LoadFeatureClass函数,但在加载要素之前,我还需要在SDE库中进行一些操作,也就是对每遍历一个MDB中的要素类时,必须对 SDE库中对应的两个要素类进行一些处理,结果,就非常“幸运”地频繁遇到了Network I/O Error[xxx(某个要素类)]。
根据异常的提示,似乎SDE与Oracle之间发生了“不愉快”的事情,即链接断了,但这个可能性马上被我否定了,要知道我在初步测试用的是本机,不可能发生这种情况。那第二个原因就是gsrvr.exe这个进程爆掉了,导致出现了这种异常假象,果然不出我的预测,在每次出现这个异常后,Oracle的会话中只有一个SDE会话(如果连接上SDE,标准应该有两个SDE会话,一个是SDE监听会话,另一个是链接会话)。
gsrvr.exe这个链接进程为什么会爆掉?我在网上看了一些相关的文档,列举了七七八八的解决之道:
1. 将Oracle9升级到9.2.0.3.0之后的版本【我升级到了9.2.0.7.0,没解决】
2. 将Oracle9升级到Oracle10g【问题依旧】
3. 给SDE91打上SP2补丁,sde91-genpatch3-ora9i-win补丁等【无效】
4. 将Oracle的SPA/GPA调大【无效】
5. dbinit.sde添加:“set DISABLE_SPATIAL_CACHE=TRUE”【依然无效】
会不会是我的代码问题呢?经过反复检查,这个因素被排除了,因为有几个相对数据量较小的MDB导入一切顺利,没有发生任何问题。
删除MDB中几个要素类看看?果然,在删除了4个要素类后,频繁出现的Network I/O Error问题居然消失了。
综合前面发生的许多异常和这个问题,我最后得出了一个推论:一个SDE进程gsrvr.exe一次只能在SDE库中产生有限个数的要素游标,并且在每个游标上能够传输的数据是有限的,否则gsrvr.exe就会爆掉。这两个因素是同时存在的,因为一个gsrvr.exe遍历SDE多个要素类不会产生问题,只产生一个要素游标却传输上百万条数据也不会产生问题。
有鉴于此,最后的解决方法仍然是遍历了14-18个要素类后就强制关闭SDE链接,然后再产生SDE链接继续操作。虽然牺牲了时间,但却取得了可靠性。
分享到:
相关推荐
I../3rdparty -I/opt/arm-qt/include -I/opt/arm-qt/include/QtWidgets -I/opt/arm-qt/include/QtGui -I/opt/arm-qt/include/QtNetwork -I/opt/arm-qt/include/QtConcurrent -I/opt/arm-qt/include/QtCore -I.moc/...
- **错误代码**:使用 `std::error_code` 对象来表示具体的错误信息。 - **日志记录**:记录错误和其他重要信息,便于后续分析。 ### 8. 高级特性介绍 除了基础功能外,Boost.Asio 还包含了一些高级特性,如: - **...
Network IO Error通常指的是网络输入输出错误,这可能由多种因素引起,例如网络不稳定、客户端异常断开等。在这种情况下,由于客户端异常断开,导致gsrvr进程未能正常释放资源,从而引发后续的问题。 ##### 3. ...
文章目录异常说明具体做法: 异常说明 情景还原: 用docker拉取jenkins最新版本 docker pull jenkins/jenkins:lts报了这个错误: Error response from daemon:...vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /et
- **CRC错误检测(CRC Error Detection)**:仅在具有VCCINT 1.2V的Intel Cyclone10LP设备中支持CRC错误检测。 - **未使用时钟输入(Unused Clock Inputs)**:设计项目编译后生成的Intel Quartus Prime*.pin文件会列出...
- **描述**:与I/O相关的错误。 - **解决方法**:检查文件权限、磁盘空间和文件系统状态。确保没有其他进程占用相关资源。 **5. 0x0025(37) - ResourceorLimitError** - **描述**:资源或限制错误。 - **解决方法**...
在JavaScript编程中,异步流程控制是至关重要的一个部分,特别是在处理I/O密集型任务时,如网络请求、文件读写等。`async/await`是ES2017引入的一种新的异步处理方式,它使得异步代码更加接近同步代码的写法,提高了...
6. **多路径I/O(MPIO)设置**:如果你的服务器具有多个网络接口,MPIO设置可能导致识别问题。在安装时,选择单个网络接口进行配置,安装后可以再添加其他接口。 7. **固件更新**:服务器或网卡的固件可能需要更新...
输入输出系统函数(Input/Output System, I/O System)I/O系统函数处理与设备之间的数据传输,包括文件I/O、网络I/O、串行和并行端口通信等。 本地过程调用函数(Local Procedure Call, LPC)LPC是进程间通信(IPC...
将dnsmasq.tar.bz2解压并替换package/network/services下的dnsmasq文件夹。 3、配置内核: rootroot@cm-System-Product-Name:/home/wwt/softap_ap6212a0_tinav2.1$ make kernel_menuconfig [*] ...
make: *** [out/target/product/tulip-d1/obj_arm/SHARED_LIBRARIES/libbt-vendor_intermediates/src/userial_vendor.o] 错误 1 Host Clang TableGen: llvm-rs-cc (gen-clang-diags-defs -clang-component=Common) ...
- 使用`onstat -i`命令查看I/O最频繁的表。 **示例输出:** - `onstat -i` - 显示I/O最频繁的表。 **8.7 Read Ahead** **检查点:** - **Read Ahead** - 监控预读操作。 **方法:** - 使用`onstat -b`命令查看...
- **错误处理(Error Handling)**:强调了错误处理的重要性,介绍了如何捕获和处理异常。 - **模块化(Module Pattern)**:推荐使用模块化的编程方式来组织代码,便于维护和重用。 - **测试(Test Driven ...
Volley是Google在2013年I/O大会上推出的一款网络请求库,它专为Android平台设计,旨在提供高效、快速的网络通信解决方案。Volley以其简洁的API、高效的缓存策略和良好的性能赢得了开发者们的青睐。在这个最新的2014...
8. **错误率(Error Rate)**:错误率是指在一定时间内,系统出现错误的次数占总操作次数的比例。监控错误率有助于发现系统故障和不稳定因素。 9. **资源利用率(Resource Utilization)**:这包括CPU、内存、网络...
- **检查目的**:高I/O负载可能导致延迟增加,影响数据库性能。 - **检查方法**: - 使用`iostat`命令监测磁盘I/O负载。 - 通过`onstat -g io`分析数据库级别的I/O情况。 - **优化建议**: - 增加磁盘数量或使用...
7. **错误处理和调试(Error Handling and Debugging)**:良好的错误处理是编写健壮程序的关键。源码可能展示如何使用`errno`、`perror()`和`strerror()`来报告错误,以及如何利用`gdb`进行程序调试。 8. **权限和...
5. **错误处理(Error Handling)**: WinSock编程中,错误处理是必不可少的部分。通过检查返回值、调用`WSAGetLastError()`获取错误代码等方式,可以对可能出现的网络错误进行处理。 6. **多线程(Multithreading)...
`Network`接口处理实际的网络I/O,Volley提供了一个基于HttpURLConnection的实现——`HurlStack`。你可以自定义`Network`来实现其他协议或网络库。 ### 3. 使用Volley进行网络请求 1. 初始化RequestQueue: ```java...
2. **网络层**:`src/network.c`负责网络连接和I/O操作,包括TCP连接管理、套接字读写等。librdkafka使用了异步I/O模型,通过事件驱动(例如`select()`或`epoll()`)来提高性能。 3. **内存管理**:`src/mem.c`和`...