在oracle中,可以利用“ALTER DATABASE”字符集語句來轉(zhuǎn)換字符集,語法格式為“ALTER DATABASE [db_name] CHARACTER SET new_character_set;”。
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
Oracle-字符集轉(zhuǎn)換
字符集是按照一定的字符編碼方案,對一組特定的符號,分別賦予不同數(shù)值編碼的集合。
日常使用時,服務(wù)端與客戶端字符集需一致。
--服務(wù)端 select * from nls_database_parameters; --客戶端 SELECT USERENV('LANGUAGE') FROM DUAL;
數(shù)據(jù)庫字符集調(diào)整最常用的是ALTER命令和完全的導(dǎo)出和導(dǎo)入兩種。
第一種,ALTER DATABASE字符集語句是遷移字符集的最快方法,但只能在特殊情況下使用。
ALTER DATABASE字符集語句不執(zhí)行任何數(shù)據(jù)轉(zhuǎn)換,因此,當(dāng)且僅當(dāng)新字符集是當(dāng)前字符集的嚴(yán)格超集時,才可以使用它。
--ALTER DATABASE字符集語句的語法如下,db_name為可選項: ALTER DATABASE [db_name] CHARACTER SET new_character_set;
第二種
數(shù)據(jù)泵(EXPDP/IMPDP)方式代價較高,耗時且占用資源多,并且需要在遷移時對數(shù)據(jù)進行掃描,確認(rèn)在遷移時是否會發(fā)生數(shù)據(jù)截斷和字符集轉(zhuǎn)換錯誤。
數(shù)據(jù)庫字符集遷移有兩個階段:數(shù)據(jù)掃描和數(shù)據(jù)轉(zhuǎn)換。
在更改數(shù)據(jù)庫字符集之前,使用字符集掃描工具確定在更改數(shù)據(jù)庫字符集之前所需的工作量。
使用數(shù)據(jù)泵導(dǎo)入導(dǎo)出腳本示例,腳本需在數(shù)據(jù)庫服務(wù)器執(zhí)行:
--查看管理員目錄 確認(rèn)導(dǎo)出文件位置路徑 SELECT * FROM dba_directories; --expdp導(dǎo)出 帶有條件 expdp 用戶/密碼@服務(wù)名 directory=DATA_PUMP_DIR dumpfile=數(shù)據(jù)文件文件名.dmp logfile=日志文件文件名.log tables=導(dǎo)出表名 query='" where lsh in (select lsh from table_1 where code !='1' and flag='1')"' CONTENT選項可選導(dǎo)出結(jié)構(gòu)或數(shù)據(jù) 導(dǎo)出格式默認(rèn)為.dmp--impdp導(dǎo)入 導(dǎo)入時重命名 存在表則增加數(shù)據(jù) 主鍵重復(fù)數(shù)據(jù)忽略 導(dǎo)入時也可以限定導(dǎo)入時所屬表空間 impdp 用戶/密碼@服務(wù)名 directory=DATA_PUMP_DIR dumpfile=數(shù)據(jù)文件文件名.dmp REMAP_TABLE =導(dǎo)出用戶名.導(dǎo)出表名:導(dǎo)入表名 TABLE_EXISTS_ACTION=append data_options=skip_constraint_errors
推薦教程:《Oracle教程》