今天从sqlserver2005数据库导入到oracle 10g数据库中,开始报 jvm堆内存不够,修改最大内存后还是报错。
报的是网络连接中断,每次只能导4000多条数据,20多2万的数据得手动执行多少次才行啊?手动执行也就罢了,可气的是
每次执行中断后还得等一会才能继续导数据,纠结了一个多小时后偶尔发现oracle报错为 ora-12542: tns地址被占用,有个正
常的报错提示还算可以,上网找了找原因,重要找到原因。
这主要是由于 操作系统的 临时端口 不够用而引起的。 一般系统的 临时端口为 1024-5000,这在多用户的环境下,3000多
个oracle链接就用光了。由于每个链接断开以后,还要有一个等待时间,例如在 windows 系统中,这个时间是 120秒。
这就导致了一个现象: 一会可以联通,一会又出现 ora-12542 address in used 。如果有临时端口可以使用,可以联通
oracle;如果暂时端口没有了,就连不通了。
一下是在 windows 系统下的解决办法。
1 进入注册表编辑器(regedit),在
HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Tcpip\Parameters 里,编译-> 添加->
MaxUserPort (类型 REG_DWORD ), 值中填写 65534,(可以的范围是5000-65534).
2 退出 注册表编辑器,重新启动机器.
这样设置, 临时端口的范围从 1024-5000,增大到 1024-65534, 足够一般用户的使用,不会再出现ora-12542.
其他系统也可以做类似的设置.
注意:win7系统默认的临时端口比xp默认的临时端口要多,亲自试过,所以大家都用win7旗舰版吧!!!