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: 表或视图不存在

PL/SQL迁移Oracle数据库方法与报错详解_第1张图片

分析

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

结论

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

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

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

你可能感兴趣的:(数据库相关)