PL/SQL迁移Oracle数据库方法与报错详解
起因
数据库迁移时(宿主机 >> 本机),导入表发生报错,启动项目时也报错。
1:开始不明白数据库迁移时.sql与.dmp的区别,以为都差不多。开始用的是'导出表'方式,导出.dmp文件,从宿主机导出后,直接导入本机,一切正常。
2:启动项目时,报错: ORA-00942: 表或视图不存在
3:分析后想到直接导.dmp方式是否不能导出相关视图
4:用另一种方法,'导出用户对象'方法,导出.sql文件。导入本机时,一直有两类报错
A: ORA-01918: 用户 'DRISUAT' 不存在
B: ORA-00933: SQL 命令未正确结束
C: ORA-00942: 表或视图不存在
分析
去查看了宿主机上导出的.sql文件后发现文件乱码:
那就明白一大部分了,导出的注释汉字乱码引发缺失单引号以及其他问题
去CSDN与博客园上查找相关资料。
结论
数据库迁移,可以大体分为两类:
第一类:'导出表’
此时导出的是.dmp文件,里面包含了表结构,表中的用户数据等等。
注意,这种导出是不包含视图的。第一次项目报错表或视图不存在原因就在此。
第二类: '导出用户对象’
此时导出的是.sql文件,里面包含了表结构,注释,视图,存储过程,函数等等。
注意:这种导出是没有实际的用户数据的。
自己分析后如下:用户不存在 :是因为从宿主机上导出的表开头是宿主机数据库对应的用户名,而本机没有对应的用户。
解决方法:在本机数据库也新建对应用户并赋予相关权限。
表或视图不存在与命令未正确结束 :原因是导出的sql中文注释乱码,部分单引号没有正常结束,引发’命令未正确结束’报错,从而影响到后面创建表与视图的语句。
解决方法:在宿主机上更改环境变量NLS_LANG,值为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 或 AMERICAN_AMERICA.UTF8。(一个是GBK一个是UTF-8,自己看着来吧)。
如果还不行就在宿主机PLSQL的tools->preferences->files->Format 修改Encoding,在Always UTF8或者其他的几个里面更改试一下。
这样保证导出来的不会有乱码情况。
记得改完环境变量或者preferences的编码需要重启OLSQL。
SO,通过查资料,明白了迁移大体分为两步:
导出时:导出当前用户对象,导出表。
导入时:先导入.sql文件,把数据库的骨架搭好,再导入.dmp文件,生成对应的实际数据。
上一篇: mysql 行转列和合并列
下一篇: in关键字中参数超过最大值的解决方法
推荐阅读
-
使用PL/SQL Developer连接Oracle数据库的方法图解
-
详解PL/SQL Developer连接本地Oracle 11g 64位数据库
-
登录PL/SQL Developer登录本地数据库报没有监听程序,查看服务发现Oracle监听服务没有启动,右击启动监听程序后报错如何解决?
-
PL/SQL登录Oracle数据库报错ORA-12154:TNS:无法解析指定的连接标识符已解决(本地未安装Oracle需要连接服务器上的)
-
【PL/SQL】 ROLLBACK WHEN EXECUTE A PROCEDURE Analysis & Output | oracle数据库: 回滚案例的输出与分析
-
Oracle数据库PL/SQL快捷键设置详解
-
详解oracle数据库迁移到MySQL的方法总结(图文)
-
PL/SQL迁移Oracle数据库方法与报错详解
-
使用PL/SQL Developer连接Oracle数据库的方法图解
-
PL/SQL Developer 连接Oracle数据库详细配置方法