参与一个公路局数据中心项目的建设时,同事发来消息希望能创建一个测试环境,项目组想升级oracle的数据库版本。
作为一个菜菜的程序员,按照一惯的套路,expdp/impdp数据库,复制粘贴程序重新补一套,立马搞定。
结果自然是想当然了,发现数据库所在服务器oracle账号登录补上,使用root修改密码不好使。
没有深究,使用Navicat工具进行数据传输。传输过程中出现字段内容大于字段类型长度,主要是RAW类型引起的,第一个用户这种情况少,手动修改。第二个用户有1085个字段是上述情况,导致10W+的错误数据没有传输成功。使用存储过程批量修改字段。数据库同步完成后,重启服务失败,服务启动不起来。各种测试后,怀疑数据传输方式不靠谱,再看看原来的方法吧。
root用户切换oracle用户后,expdp not commond, sqlplus也不好使,有问题。上网查询后发现可以使用 source~/.bash_profile加载环境变量后使用。sqlplus超级管理员,突然报错了ORA-09817: Write to audit file failed no space left on device 这个是没有空间了啊,df -h 查询一下,果然100%了,腾出空间,果然都好使了。
impdp时又出现了问题,提示数据库版本不一致,可是我记得impdp支持高版本导入低版本的dmp文件。查找问题发现dmp文件没有上传到目录里面。导入后启动服务,服务依然启动不起来。看到报错ORA-12505,TNS:listener does not currently know of SID given in connect descriptor,好嘛,把service_name对应到sid上去了,按照以前的方法加了service_name后面加了1,重新启动还是不好用[懵逼]。。
问了同事,修改了下配置文件中的数据库连接,:service_name1改成了/service_name,解决。
总结:
1.oracle账号切换不过去或者修改密码不成功应该是没有空间了,expdp not command也应该是没有空间了。
2.通过工具传输后服务没启动,应该也是数据库连接没有配置正确的原因。
3.导入导出数据还是得注意directory的相关信息 查询目录 select directory_path from all_directories