欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PL/SQL迁移Oracle数据库方法与报错详解

程序员文章站 2022-05-18 18:36:45
...

起因

数据库迁移时(宿主机 >> 本机),导入表发生报错,启动项目时也报错。

1:开始不明白数据库迁移时.sql与.dmp的区别,以为都差不多。开始用的是'导出表'方式,导出.dmp文件,从宿主机导出后,直接导入本机,一切正常。
2:启动项目时,报错: ORA-00942: 表或视图不存在
3:分析后想到直接导.dmp方式是否不能导出相关视图
4:用另一种方法,'导出用户对象'方法,导出.sql文件。导入本机时,一直有两类报错
	A: ORA-01918: 用户 'DRISUAT' 不存在
	B: ORA-00933: SQL 命令未正确结束
	C: ORA-00942: 表或视图不存在

PL/SQL迁移Oracle数据库方法与报错详解

分析

去查看了宿主机上导出的.sql文件后发现文件乱码:
PL/SQL迁移Oracle数据库方法与报错详解
那就明白一大部分了,导出的注释汉字乱码引发缺失单引号以及其他问题
去CSDN与博客园上查找相关资料。

结论

数据库迁移,可以大体分为两类:

第一类:'导出表’
PL/SQL迁移Oracle数据库方法与报错详解
此时导出的是.dmp文件,里面包含了表结构表中的用户数据等等。
注意,这种导出是不包含视图的。第一次项目报错 表或视图不存在 原因就在此。

第二类: '导出用户对象’
PL/SQL迁移Oracle数据库方法与报错详解
此时导出的是.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文件,生成对应的实际数据。

相关标签: 数据库相关