Oracleサーバーとクライアントの文字セットを表示および変更
HTTPS:// www.cnblogs.com/lcword/p/5854186.html
文字セットオラクルが何であるかをまず、
Oracleキャラクタ・セットは、シンボル解釈バイトのデータ、ポイントの大きさ、相互の寛容の関係のセットです。ORACLEサポート国語アーキテクチャは、あなたが店にローカライズされた言語を使用することができ、プロセス、データを取り出します。これは、データベースツール、エラーメッセージ、ソート順、日付、時刻、通貨、数字、カレンダーは自動的に言語およびプラットフォームのローカライズに適応することができます。
Oracleデータベースの文字セットに影響を与える最も重要なパラメータは、NLS_LANGパラメータです。
以下のように形式は:NLS_LANG = language_territory.charset
これは3つの成分(言語、地理と文字セット)、NLSのサブセットがあります各コンポーネントのコントロールを有しています。
そのうち:
言語は、サーバーメッセージの言語を指定し、領土は、サーバーの日付と番号の形式を指定し、文字セットは、文字セットを指定します。など:. AMERICAN _ AMERICA ZHS16GBK
我々は、データベース・キャラクタ・セットの実際の影響は第三部で、NLS_LANGの組成物から見ることができます。
長い第三部として、我々は中国や英語の前に情報の先端のみに影響を与え、相互にデータをインポートおよびエクスポートすることができますように2つのデータベース間での文字セットはそう。
第二に、データベース・キャラクタ・セットをチェック
キャラクタセットの三つの側面を含み、
一つはoracelサーバー側の文字セットである。
第二のOracleクライアント側の文字セットであり、
第三は、DMPファイルの文字セットです。
データのインポートを行うことで、同じ3つの文字セットが正しくインポートすることができますが必要です。
1、クエリOracleサーバー側の文字セット
のOracleサーバー側の文字セットを見つけるために多くの方法がお問い合わせのより直感的な方法がありますが、次のされたこと。
SQL>を選択しUSERENV(「言語」 デュアルから);
結果は以下の:. AMERICAN _ AMERICA ZHS16GBKに類似している
クエリDMPの文書文字集合にどのように2、
OracleのEXPツールDMPファイルも文字セット情報が含まれていることで、DMPファイルを導出2と3バイトは、DMPの文書文字集合を記録しました。このようなMまたはMのわずか数十としてのDMPではないファイルが、オープンウルトラ(16進数)に使用することができる場合には、例えば0354のように、コンテンツの第二及び第三のバイトを見て、それから文字は、次のSQLそれに対応セット:
SQL> NLS_CHARSET_NAME SELECT(TO_NUMBER(「0354」、「XXXX」))デュアルから;
ZHS16GBK
DMPファイルは、2G以上(これは最も一般的なケースである)、非常にゆっくりまたは完全に開くためにテキストエディタを使用すると、大きい場合オープン、(UNIXホスト上で)以下のコマンドを使用することができます:
CATのexp.dmp | -X-OD |ヘッド-1 | awkの{} 3印刷$ 2 $。 '|カット-C 3-6
その後、上記のSQLによって得ることができますそれは、文字セットに対応しています。
3、クエリのOracleクライアント側の文字セット
これは比較的簡単です。
NLS_LANGのするOracleHomeを対応するレジストリであるWindowsプラットフォームでは、。あなたはまたのような、DOSウィンドウの内部で独自に設定することができます。set NLS_LANG = AMERICAN_AMERICA.ZHS16GBK
これは、ウィンドウ内のみの環境変数に影響を与えます。
UNIXプラットフォームでは、環境変数NLS_LANGです。
$エコー$ NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
検査の結果は、そのサーバ側とクライアント側の文字セットが矛盾して見つかった場合、統一することは、サーバー側の文字セットと同じように変更してください。
追加:
。(1)データベースサーバーのキャラクタ・セット
NLS_DATABASE_PARAMETERSからSELECT *
$小道具からは、データベースの文字セットがあります。
(2)クライアントの文字セット環境が
NLS_INSTANCE_PARAMETERSから選択*
それは、V $パラメータから来て、クライアントの文字セットは、パラメータ・ファイル、環境変数またはレジストリかもしれの集合を表す
(3)。セッションの文字セット環境が
SELECT * FROM NLS_SESSION_PARAMETERS
五$ NLS_PARAMETERSからは、セッション固有の設定は、環境変数は、セッションまたはALTER SESSIONは、セッションがNLS_INSTANCE_PARAMETERSと一致特別な設定は、しない場合は、終了した可能性があることを示します。
(4)が正しくデータベースに非ASCII文字を表示するために、クライアント・サーバの文字セットの要件と一致。以上の時間が設定されている場合は、ALTER SESSION>環境変数>レジストリ>パラメータファイルの
文字セット一貫性の要件が、彼らは異なる言語、英語の言語設定が推奨されますを設定することができます。文字セットは、NLS_LANG American_America.zhs16gbkすることができ、ZHS16GBKです。
第三に、変更Oracleキャラクタ・セット
上述したように、Oracleキャラクタ・セットは、相互に包含関係を持っています。US7ASCIIがZHS16GBKの息子であるとして、US7ASCIIからZHS16GBKへのデータの解釈上の問題がない、データの損失はありません。それはユニコード、保存された(したがって、ストレージ上のより多くのスペースを取る)ダブルバイト文字に基づいているため、キャラクタ・セットUTF8の全てにおいて、最大でなければなりません。
データベースが作成されると、データベース・キャラクタ・セット理論を変更することはできません。そのため、非常に重要である文字セットを使用することを検討する設計と設置に始まります。Oracleの公式説明によると、文字セット変換があるスーパーセットのサブセットからその逆の、サポートされていません。2つの文字セット間のサブセットとスーパーセットの間に関係がない場合は、文字セット変換は、Oracleサポートではありません。データベースサーバは、間違った文字セットの変更はとてもサブセットと、2つの文字セットのスーパーセットが存在するとの間の関係を変更する前に必ずご確認、真剣にデータベースの正常な動作に影響を与える可能性があり、多くの予測不可能な結果になります。一般的に言って、最後のない限り、我々は、Oracleデータベースサーバー側の文字セットを修正することを提案しません。私たちの最も一般的な二つの文字がZHS16GBKとZHS16CGB231280を設定し、したがって、これらの2つの文字間の理論変換でサポートされていない間の特別なノート、サブセットとスーパーセットの関係は存在しません。
1、サーバー側の修正文字セット(推奨されません)
Oracle 8の前には、直接データディクショナリテーブルは、データベースの文字セットを変更するには$小道具変更することができます。しかし、Oracle8の後、少なくとも3つのシステムテーブルは、情報のデータベース・キャラクタ・セットを記録のみ変更に$表の小道具完全ではありません、重大な結果につながる可能性があります。:として、以下の変更する権利
$ sqlplusを/ nologを
:;今回は、データベース・サーバが起動した場合、最初の実装のSHUTDOWN IMMEDIATEコマンドは、データベース・サーバを閉じてから、次のコマンドを実行するSQL> CONN / SYSDBAとして
SQL> STARTUP MOUNTを。
SQL> ALTER RESTRICTED SESSION ENABLE SYSTEM;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0;
SQL>のALTER DATABASE OPEN;
SQL>のALTER DATABASE CHARACTER SET ZHS16GBK;
SQL> ALTERデータベース国立CHARACTER SET ZHS16GBK;
SQL > SHUTDOWN IMMEDIATE;
SQL> STARTUPの
注意:なしラージオブジェクトは、使用時に何の言語翻訳への影響がない場合は、することができ、上記の方法により(文字セットはORACLEのサポートを設定しなければならない、または起動することはできません覚えている)かもしれないが、 「ORA-12717:変更することはできませんが存在します NCLOBデータが存在するデータベースの各国語キャラクタ・セット」 このメッセージ
二つの方法がある。この問題を解決するために
1キーワードINTERNAL_USEは、地域の設定を変更使用しているが、
再作成の使用があり、しかし、複雑な少しを再作成し、その使用INTERNAL_USEを喜ばせる、
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT EXCLUSIVE;
SQL> ALTER SYSTEM RESTRICTED SESSIONをENABLE;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0;
SQL> ALTERデータベースOPEN;
SQL> ALTERデータベースNATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL> SHUTDOWN IMMEDIATE;
SQL>スタートアップ;
上記のアプローチによって行われている場合、国家の文字セット領域が問題はない設け
DMPファイルは、文字セット変更、2は
上記の第2および第3バイトDMPファイルは、文字セット情報を記録し、このように直接DMP上のファイルの内容の第二及び第三のバイトを変更しますあなたはチェックOracleのカンニング"することができます。この理論は、US7ASCII、WE8ISO8859P1、ZHS16CGB231280、ZHS16GBKとして、我々は文字セットの一部を使用し、またサブセットのみからスーパーセットに変更することができているが、多くの場合においても、サブセットとスーパーセット関係なしに変更することができます基本的に変更することができます。変更はDMPファイルなので、ほとんど効果ですので。
より具体的な修正方法は、最も簡単にはウルトラ2と3バイトDMPファイルで修飾されています。
ZHS16GBK DMPファイルの文字セットを変更するたとえば、次のSQLコードによって単離することができるこのタイプに対応する16進文字セットです:SQL>を選択to_char関数(NLS_CHARSET_ID( 「ZHS16GBK」)、「XXXX」)デュアルから。
0354
その後、2,3 DMPファイルのバイトが0354に変更することができます。
DMPファイルは、UEが開くことができないと、大きい場合、我々はプログラムのメソッドを使用する必要があります
文字セットオラクルが何であるかをまず、
Oracleキャラクタ・セットは、シンボル解釈バイトのデータ、ポイントの大きさ、相互の寛容の関係のセットです。ORACLEサポート国語アーキテクチャは、あなたが店にローカライズされた言語を使用することができ、プロセス、データを取り出します。これは、データベースツール、エラーメッセージ、ソート順、日付、時刻、通貨、数字、カレンダーは自動的に言語およびプラットフォームのローカライズに適応することができます。
Oracleデータベースの文字セットに影響を与える最も重要なパラメータは、NLS_LANGパラメータです。
以下のように形式は:NLS_LANG = language_territory.charset
これは3つの成分(言語、地理と文字セット)、NLSのサブセットがあります各コンポーネントのコントロールを有しています。
そのうち:
言語は、サーバーメッセージの言語を指定し、領土は、サーバーの日付と番号の形式を指定し、文字セットは、文字セットを指定します。など:. AMERICAN _ AMERICA ZHS16GBK
我々は、データベース・キャラクタ・セットの実際の影響は第三部で、NLS_LANGの組成物から見ることができます。
長い第三部として、我々は中国や英語の前に情報の先端のみに影響を与え、相互にデータをインポートおよびエクスポートすることができますように2つのデータベース間での文字セットはそう。
第二に、データベース・キャラクタ・セットをチェック
キャラクタセットの三つの側面を含み、
一つはoracelサーバー側の文字セットである。
第二のOracleクライアント側の文字セットであり、
第三は、DMPファイルの文字セットです。
データのインポートを行うことで、同じ3つの文字セットが正しくインポートすることができますが必要です。
1、クエリOracleサーバー側の文字セット
のOracleサーバー側の文字セットを見つけるために多くの方法がお問い合わせのより直感的な方法がありますが、次のされたこと。
SQL>を選択しUSERENV(「言語」 デュアルから);
結果は以下の:. AMERICAN _ AMERICA ZHS16GBKに類似している
クエリDMPの文書文字集合にどのように2、
OracleのEXPツールDMPファイルも文字セット情報が含まれていることで、DMPファイルを導出2と3バイトは、DMPの文書文字集合を記録しました。このようなMまたはMのわずか数十としてのDMPではないファイルが、オープンウルトラ(16進数)に使用することができる場合には、例えば0354のように、コンテンツの第二及び第三のバイトを見て、それから文字は、次のSQLそれに対応セット:
SQL> NLS_CHARSET_NAME SELECT(TO_NUMBER(「0354」、「XXXX」))デュアルから;
ZHS16GBK
DMPファイルは、2G以上(これは最も一般的なケースである)、非常にゆっくりまたは完全に開くためにテキストエディタを使用すると、大きい場合オープン、(UNIXホスト上で)以下のコマンドを使用することができます:
CATのexp.dmp | -X-OD |ヘッド-1 | awkの{} 3印刷$ 2 $。 '|カット-C 3-6
その後、上記のSQLによって得ることができますそれは、文字セットに対応しています。
3、クエリのOracleクライアント側の文字セット
これは比較的簡単です。
NLS_LANGのするOracleHomeを対応するレジストリであるWindowsプラットフォームでは、。あなたはまたのような、DOSウィンドウの内部で独自に設定することができます。set NLS_LANG = AMERICAN_AMERICA.ZHS16GBK
これは、ウィンドウ内のみの環境変数に影響を与えます。
UNIXプラットフォームでは、環境変数NLS_LANGです。
$エコー$ NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
検査の結果は、そのサーバ側とクライアント側の文字セットが矛盾して見つかった場合、統一することは、サーバー側の文字セットと同じように変更してください。
追加:
。(1)データベースサーバーのキャラクタ・セット
NLS_DATABASE_PARAMETERSからSELECT *
$小道具からは、データベースの文字セットがあります。
(2)クライアントの文字セット環境が
NLS_INSTANCE_PARAMETERSから選択*
それは、V $パラメータから来て、クライアントの文字セットは、パラメータ・ファイル、環境変数またはレジストリかもしれの集合を表す
(3)。セッションの文字セット環境が
SELECT * FROM NLS_SESSION_PARAMETERS
五$ NLS_PARAMETERSからは、セッション固有の設定は、環境変数は、セッションまたはALTER SESSIONは、セッションがNLS_INSTANCE_PARAMETERSと一致特別な設定は、しない場合は、終了した可能性があることを示します。
(4)が正しくデータベースに非ASCII文字を表示するために、クライアント・サーバの文字セットの要件と一致。以上の時間が設定されている場合は、ALTER SESSION>環境変数>レジストリ>パラメータファイルの
文字セット一貫性の要件が、彼らは異なる言語、英語の言語設定が推奨されますを設定することができます。文字セットは、NLS_LANG American_America.zhs16gbkすることができ、ZHS16GBKです。
第三に、変更Oracleキャラクタ・セット
上述したように、Oracleキャラクタ・セットは、相互に包含関係を持っています。US7ASCIIがZHS16GBKの息子であるとして、US7ASCIIからZHS16GBKへのデータの解釈上の問題がない、データの損失はありません。それはユニコード、保存された(したがって、ストレージ上のより多くのスペースを取る)ダブルバイト文字に基づいているため、キャラクタ・セットUTF8の全てにおいて、最大でなければなりません。
データベースが作成されると、データベース・キャラクタ・セット理論を変更することはできません。そのため、非常に重要である文字セットを使用することを検討する設計と設置に始まります。Oracleの公式説明によると、文字セット変換があるスーパーセットのサブセットからその逆の、サポートされていません。2つの文字セット間のサブセットとスーパーセットの間に関係がない場合は、文字セット変換は、Oracleサポートではありません。データベースサーバは、間違った文字セットの変更はとてもサブセットと、2つの文字セットのスーパーセットが存在するとの間の関係を変更する前に必ずご確認、真剣にデータベースの正常な動作に影響を与える可能性があり、多くの予測不可能な結果になります。一般的に言って、最後のない限り、我々は、Oracleデータベースサーバー側の文字セットを修正することを提案しません。私たちの最も一般的な二つの文字がZHS16GBKとZHS16CGB231280を設定し、したがって、これらの2つの文字間の理論変換でサポートされていない間の特別なノート、サブセットとスーパーセットの関係は存在しません。
1、サーバー側の修正文字セット(推奨されません)
Oracle 8の前には、直接データディクショナリテーブルは、データベースの文字セットを変更するには$小道具変更することができます。しかし、Oracle8の後、少なくとも3つのシステムテーブルは、情報のデータベース・キャラクタ・セットを記録のみ変更に$表の小道具完全ではありません、重大な結果につながる可能性があります。:として、以下の変更する権利
$ sqlplusを/ nologを
:;今回は、データベース・サーバが起動した場合、最初の実装のSHUTDOWN IMMEDIATEコマンドは、データベース・サーバを閉じてから、次のコマンドを実行するSQL> CONN / SYSDBAとして
SQL> STARTUP MOUNTを。
SQL> ALTER RESTRICTED SESSION ENABLE SYSTEM;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0;
SQL>のALTER DATABASE OPEN;
SQL>のALTER DATABASE CHARACTER SET ZHS16GBK;
SQL> ALTERデータベース国立CHARACTER SET ZHS16GBK;
SQL > SHUTDOWN IMMEDIATE;
SQL> STARTUPの
注意:なしラージオブジェクトは、使用時に何の言語翻訳への影響がない場合は、することができ、上記の方法により(文字セットはORACLEのサポートを設定しなければならない、または起動することはできません覚えている)かもしれないが、 「ORA-12717:変更することはできませんが存在します NCLOBデータが存在するデータベースの各国語キャラクタ・セット」 このメッセージ
二つの方法がある。この問題を解決するために
1キーワードINTERNAL_USEは、地域の設定を変更使用しているが、
再作成の使用があり、しかし、複雑な少しを再作成し、その使用INTERNAL_USEを喜ばせる、
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT EXCLUSIVE;
SQL> ALTER SYSTEM RESTRICTED SESSIONをENABLE;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0;
SQL> ALTERデータベースOPEN;
SQL> ALTERデータベースNATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL> SHUTDOWN IMMEDIATE;
SQL>スタートアップ;
上記のアプローチによって行われている場合、国家の文字セット領域が問題はない設け
DMPファイルは、文字セット変更、2は
上記の第2および第3バイトDMPファイルは、文字セット情報を記録し、このように直接DMP上のファイルの内容の第二及び第三のバイトを変更しますあなたはチェックOracleのカンニング"することができます。この理論は、US7ASCII、WE8ISO8859P1、ZHS16CGB231280、ZHS16GBKとして、我々は文字セットの一部を使用し、またサブセットのみからスーパーセットに変更することができているが、多くの場合においても、サブセットとスーパーセット関係なしに変更することができます基本的に変更することができます。変更はDMPファイルなので、ほとんど効果ですので。
より具体的な修正方法は、最も簡単にはウルトラ2と3バイトDMPファイルで修飾されています。
ZHS16GBK DMPファイルの文字セットを変更するたとえば、次のSQLコードによって単離することができるこのタイプに対応する16進文字セットです:SQL>を選択to_char関数(NLS_CHARSET_ID( 「ZHS16GBK」)、「XXXX」)デュアルから。
0354
その後、2,3 DMPファイルのバイトが0354に変更することができます。
DMPファイルは、UEが開くことができないと、大きい場合、我々はプログラムのメソッドを使用する必要があります