回覆列表
  • 1 # 錢布斯

    Oracle資料庫檢視和修改伺服器端的字符集的方法是本文主要要介紹的內容,接下來救讓我們一起來了解一下這部分內容。

    A、oracle server 端字符集查詢

    select userenv("language") from dual

    其中NLS_CHARACTERSET 為server端字符集

    NLS_LANGUAGE 為 server端字元顯示形式

    B、查詢oracle client端的字符集

    $echo $NLS_LANG

    如果發現你select 出來的資料是亂碼,請把client端的字符集配置成與linux作業系統相同的字符集。如果還是有亂碼,則有可能是資料庫中的資料存在問題,或者是oracle服務端的配置存在問題。

    C、server端字符集修改

    將資料庫啟動到RESTRICTED模式下做字符集更改:

    SQL> conn /as sysdba Connected.

    SQL> shutdown immediate;

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    SQL> startup mount ORACLE instance started.

    Total System Global Area 236000356 bytes

    Fixed Size 451684 bytes

    Variable Size 201326592 bytes

    Database Buffers 33554432 bytes

    Redo Buffers 667648 bytes

    Database mounted.

    SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

    System altered.

    SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

    System altered.

    SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

    System altered.

    SQL> alter database open;

    Database altered.

    SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;

    ALTER DATABASE CHARACTER SET ZHS16GBK ERROR at line 1:

    ORA-12712: new character set must be a superset of old character set

    提示我們的字符集:新字符集必須為舊字符集的超集,這時我們可以跳過超集的檢查做更改:

    SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

    Database altered.

    SQL> select * from v$nls_parameters;

    19 rows selected.

    重啟檢查是否更改完成:

    SQL> shutdown immediate;

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    SQL> startup ORACLE instance started.

    Total System Global Area 236000356 bytes

    Fixed Size 451684 bytes

    Variable Size 201326592 bytes

    Database Buffers 33554432 bytes

    Redo Buffers 667648 bytes

    Database mounted.

    Database opened.

    SQL> select * from v$nls_parameters;

    19 rows selected.

    我們看到這個過程和之前ALTER DATABASE CHARACTER SET操作的內部過程是完全相同的,也就是說INTERNAL_USE提供的幫助就是使Oracle資料庫繞過了子集與超集的校驗。

    這一方法在某些方面是有用處的,比如測試;應用於產品環境大家應該格外小心,除了你以外,沒有人會為此帶來的後果負責。

    結語(我們不妨再說一次):

    對於DBA來說,有一個很重要的原則就是:不要把你的資料庫置於危險的境地!

    這就要求我們,在進行任何可能對資料庫結構發生改變的操作之前,先做有效的備份,很多DBA沒有備份的操作中得到了慘痛的教訓。

    D、client端字符集修改

    在 /home/oracle與 /root使用者目錄下的。bash_profile中

    新增或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 語句

  • 中秋節和大豐收的關聯?
  • 應激指的是什麼呢?