1、情况解释
1.1、英文报错截图
1.2、配置环境变量,然后可以看到中文的提示
TNS_ADMIN:oracle根目录\product\11.2.0\dbhome_1\NETWORK\ADMIN
NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
1.3、问题原因解释
场景描述:
通过navicat连接了oracle数据库,然后通过navicat导出了xx.sql的文件。但是更换了不同的服务器的oracle数据库之后,使用navicat导入的时候报错。报错如上图。
导致问题原因:
数据库的字符编码不同,oracle默认的是英文的编码。换成中文之后,字节数就不一样了。
2、解决过程
1、打开控制台,用sys账号连接上
C:\Users\Administrator>sqlplus sys/pass as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 7月 13 19:09:15 2020
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
2、关闭数据库
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
3、mount
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1.3629E+10 bytes
Fixed Size 2188688 bytes
Variable Size 7113542256 bytes
Database Buffers 6476005376 bytes
Redo Buffers 37343232 bytes
数据库装载完毕。
解释: startup nomount:启动实例,读取参数文件,分配内存空间,启动后台进程,打开跟踪文件和报警文件。startup mount:装载数据库,打开控制文件。nomount方式下还没有读取控制文件,该选项用于在数据库的控制文件全部损坏,需要重新创建数据库控制文件或创建一个新的数据库时使用。mount 选项下并没有打开数据文件,该选项可以用来修改数据库的运行模式或进行数据库恢复。
4、设置session
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
系统已更改。
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
系统已更改。
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
系统已更改。
5、启动数据库
SQL> alter database open;
数据库已更改。
6、修改字符集
会报错,提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集
加了TERNAL_USE,就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部操作时完全相同的。
SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
数据库已更改。
7、关闭,重新启动
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 1.3629E+10 bytes
Fixed Size 2188688 bytes
Variable Size 7113542256 bytes
Database Buffers 6476005376 bytes
Redo Buffers 37343232 bytes
数据库装载完毕。
数据库已经打开。
SQL>
3、导入和导出命令
导入和导出命令,默认路径都是D:\app\Administrator\admin\orcl\dpdump。导出默认路径这个,如果改了就报错。导入命令默认路径也是这个,如果加路径就会报错。
impdp 账号/密码@127.0.0.1/orcl dumpfile= backupfile.dmp full=y
expdp 账号/密码@127.0.0.1/orcl dumpfile=backupfile.dmp logfile=logfile.log