迁移数据时Oracle字符集的转换

2014-11-24 18:35:44 · 作者: · 浏览: 4

commit;


update sys.props$ set value$='US7ASCII' where name='NLS_NCHAR_CHARACTERSET';
commit;


---2---修改强制同步数据库里的字符集
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;


---给CHARSET变量赋值
COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';


COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';


--INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
--ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;


-- 再次启动数据库一遍
SHUTDOWN IMMEDIATE;
STARTUP;


set nls_lang=AMERICAN_AMERICA.US7ASCII;


---英文字符集转中文字符集


update sys.props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';


commit;


update sys.props$ set value$='ZHS16GBK' where name='NLS_NCHAR_CHARACTERSET';


commit;


---2---修改强制同步数据库里的字符集
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;


---给CHARSET变量赋值
COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';


COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';


--INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
--ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;


-- 再次启动数据库一遍
SHUTDOWN IMMEDIATE;
STARTUP;



set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;
1,修改dmp的时候,注意数据库版本
9i以以下的数据库,需要修改dmp文件第1行的第2和第3个字节
10g以上的数据库,需要修改dmp文件第3行的第3和第4个字节



这个方法比较局限,比如,你的数据库10T,这个方法显然就不行。。。。


2,强制修改是数据库字符集
从10以后,oracle推荐使用csscan


3,补充一个,对于数据量大的数据库整体迁移,这个方法显然不行,仅仅是用于少量数据库或者某些含多字节(如中文)少的表
dblink+utl_raw


这是Lunar_Zhang给我的提供的另外的方法在这附上,谢谢他的方法