数据库迁移windows->linux ORACLE 10G

1、首先从windows中将数据库以dmp文件的形式倒出来。

2、以书写参数文件的形式将倒出的数据库导入linux下的oracle 10g。

3、注意字符集否则导入数据库之后会发现数据库中的中文都是乱码。

4、过程如下:

1)确认字符集

到处数据库使用字符集内容:NLS_CHARACTERSET:ZHS16GBK

             NLS_NCHAR_CHARACTERSET:AL16UTF16

LINUX环境变量:NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 如果使用此编码则会出现乱码所以改为NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 命令如下

[root@rhel ~]#vi /home/oracle/.bash_profile
[root@rhel ~]#source /home/oracle/.bash_profile

如果linux下数据库字符集不是ZHS16GBK 可以按一下步骤来修改数据库字符集

connect system as sysdba ;
shutdown immediate ;
startup mount ;
alter system enable restricted session ; 
alter system set JOB_QUEUE_PROCESSES=0
alter system set AQ_TM_PROCESSES=0
alter database open ; 
alter database character set internal_use ZHS16GBK ; 
shutdown immediate ;
startup ;

2)参数文件形式导入数据库

[oracle@rhel Scripts]$imp parfile=imp.txt

imp.txt文件内容:

userid=system/oracle
buffer=100000
log=/home/oracle/dmp/emp_mc.log
file=/home/oracle/dmp/mc.DMP
feedback=10000
fromuser=mc
touser=mc

OK.完成中文显示正常

3、参考内容:

1、环境变量 NLS_LANG 的缺省值为 AMERICAN_AMERICA.US7ASCII, 不能支持中文
linux 设置 NLS_LANG = AMERICAN_AMERICA.ZHS16GBK 正确显示中文,如果自己的程序因此引发 ora-12705 错误(在AS5.3下用oracle10g遇到的错误),
检查一下 $ORACLE_HOME/nls 目录是否有读的权限(这里纠下一下,有读权限还不够,可能还需要写或执行权限,所以最好加上全部权限 2011-11-11),
ll $ORACLE_HOME/nls
如果没有,加上全部权限 chmod -R 777 $ORACLE_HOME/nls 

2、环境变量 NLS_LANG 的作用
NLS_LANG 字符集反映的是客户端操作系统的字符集设置。例如数据库的字符集是 AL32UTF8 并且客户端是 windows 系统,那么在 windows 里你不应该设置 NLS_LANG=AL32UTF8, 因为没有 UTF-8 字符集的 WIN32 客户端。取而代之的是,你的 NLS_LANG 应该反映客户端的字码页
(code page),例如在一个英文的 windows 客户端,字码页是1252,那么合适的设置为 NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252 。所以,正确设置 NLS_LANG 可以允许从客户端操作系统字符集到数据库字符集的正确转换。当两端使用同样的字符集设置时, Oracle 会认为数据的发送或接收使用相同的字符集,从而不会发生字符集校验或转换。如果客户端字符集与数据库字符集不一致将会导致乱码,此时转换是有必要的。

 

posted @ 2012-09-09 17:58  totozlj  阅读(2178)  评论(0编辑  收藏  举报