Oracle-字符集轉換


    字符集是按照一定的字符編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。

    日常使用時,服務端與客戶端字符集需一致。

--服務端
select * from nls_database_parameters;
--客戶端
SELECT USERENV('LANGUAGE') FROM DUAL;

    數據庫字符集調整最常用的是ALTER命令和完全的導出和導入兩種。

    第一種,ALTER DATABASE字符集語句是遷移字符集的最快方法,但只能在特殊情況下使用。ALTER DATABASE字符集語句不執行任何數據轉換,因此,當且僅當新字符集是當前字符集的嚴格超集時,才可以使用它。

--ALTER DATABASE字符集語句的語法如下,db_name為可選項:
ALTER DATABASE [db_name] CHARACTER SET new_character_set;

    第二種,數據泵(EXPDP/IMPDP)方式代價較高,耗時且占用資源多,並且需要在遷移時對數據進行掃描,確認在遷移時是否會發生數據截斷和字符集轉換錯誤。

    數據庫字符集遷移有兩個階段:數據掃描和數據轉換。

    在更改數據庫字符集之前,使用字符集掃描工具確定在更改數據庫字符集之前所需的工作量。

    使用數據泵導入導出腳本示例,腳本需在數據庫服務器執行:

--查看管理員目錄 確認導出文件位置路徑 
SELECT * FROM dba_directories;
--expdp導出 帶有條件
expdp 用戶/密碼@服務名  directory=DATA_PUMP_DIR dumpfile=數據文件文件名.dmp logfile=日志文件文件名.log tables=導出表名 query='" where lsh in (select lsh from table_1 where code !='1' and flag='1')"'
CONTENT選項可選導出結構或數據 導出格式默認為.dmp
--impdp導入 導入時重命名 存在表則增加數據 主鍵重復數據忽略 導入時也可以限定導入時所屬表空間 impdp 用戶/密碼@服務名 directory=DATA_PUMP_DIR dumpfile=數據文件文件名.dmp REMAP_TABLE =導出用戶名.導出表名:導入表名 TABLE_EXISTS_ACTION=append data_options=skip_constraint_errors

    字符集掃描工具 Character Set Scanner

      適用於 Oracle Database 10g 和 Oracle Database 11g 的字符集掃描程序作為數據庫軟件的一個組件提供。

      Oracle Database 12c 不再支持或捆綁字符集掃描程序。

      Database Migration Assistant for Unicode (DMU) 是替代字符集掃描程序的工具。

    具體字符集掃描工具的介紹和使用請參考:https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch12scanner.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM