0

ラップトップに oracle 10gr2 Express Edition をインストールしました。Oracle 10gr2 Enterprise Edition で生成された .dmp ファイルをインポートすると、エラーが発生します。

.dmp ファイルを生成したデータベース サーバーは GBK文字セットで実行されていますが、私の oracle Express サーバーはUTF-8で実行されています。

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8

独自の Oracle サーバーを構成して .dmp ファイルをインポートするにはどうすればよいですか?

編集 - - - - - - - - - - - - - - - - - - - - - - - - - -- 自分の oracle Express サーバー:

SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET';

PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
AL32UTF8

NLS_NCHAR_CHARACTERSET
AL16UTF16
4

2 に答える 2

5

新しい文字セットでは、1 文字あたり最大 4 バイトが必要ですが、古い文字セットでは最大 2 バイトしか必要ありませんでした。そのため、文字セットの変更により、一部の文字フィールドでは以前よりも多くのスペースが必要になります。明らかに、それらのいくつかは列の長さの制限に達しています。

これを解決するには、影響を受ける列の長さを増やすか、長さが文字単位で解釈されるように長さのセマンティクスを変更する必要があります (デフォルトのバイト単位ではありません)。

ダンプ ファイルにスキーマ定義とデータの両方が含まれている場合は、段階的に作業する必要があります。最初にスキーマのみをインポートし、列の長さを増やしてから、最後にデータをインポートします。

長さのセマンティクスの経験はありません。通常は明示的に指定します。詳細については、NLS_LENGTH_SEMANTICS パラメータに関するドキュメントを参照してください。100これは、次のステートメントの数値の解釈方法に影響します。

CREATE TABLE example (
    id NUMBER,
    name VARCHAR(100)
);

通常、明示的に単位を直接指定することをお勧めします。

CREATE TABLE example (
    id NUMBER,
    name VARCHAR(100 CHAR)
);
于 2012-02-27T10:54:46.800 に答える
3

ダンプファイルにはスキーマ全体が含まれているため、列の長さを変更することは私にとって適切なオプションではありません。

Oracle ExpressエディションはデフォルトでUTF-8を使用します。ウェブをグーグルで検索した後、データベースの文字セットを変更する方法を見つけました。

私の場合:UTF-8-> GBK

sqlplusのsysdbaとしてユーザーsysに接続しました。次に、次のコマンドを実行しました。

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;  

alter database character set internal_use ZHS16GBK ;  

shutdown immediate  

startup

これらのコマンドがデータベースに対して何をしたのかわかりませんが、機能します。

于 2012-02-28T01:32:10.857 に答える