stone creater's room

アクセスカウンタ

zoom RSS 【PGメモ:DB】 Oracle Databese でのimport作業で起きた問題まとめ。

<<   作成日時 : 2010/05/03 00:05   >>

トラックバック 0 / コメント 0

複数のサーバーにあるoracle database(10g)を一つのサーバーに統合する為、
旧DBからexport→新DBへimportする作業で起きた問題をメモっておきます。
(DB移行作業初心者!)

@ DBA権限を持つユーザーからexportすると、DBA権限を持つユーザーでしかimport出来ない。
旧DBのユーザー作成時、良く考えずにDBA権限を付与していたのですが、
新DBのユーザーにはDBA権限を付与しない事なったので、上記の問題が発生しました。
対処)
ユーザーにDBA権限を付与してimportし、後でDBA権限を削除する
※ただし、Aでの対処が重要!!
A import先の表領域を指定出来ない。
旧DBのユーザーと新DBのユーザーの表領域が違う場合、
本来は新DBのユーザーのデフォルト表領域にimportされると思うのですが、
上記@の対応でDBA権限を与えている為、
export元と同じ表領域を拡張して作ってしまうだろうと言う問題が発生しました。
対処)
ユーザーの「UNLIMITED TABLESPACE」(表領域無制限)権限を削除し、
表領域を拡張出来ないようにする。
参考ページ:「IMPORT時に、EXPORT時と違う表領域へIMPORTする方法」

(この件は、後にやはり表領域を旧DBと同にする事になったので、問題ではなくなりましたが、
DBA権限を持つユーザーでimportする場合は、やっておいた方が無難だと思います)
B OracleTextのファンクションを利用しているプロシージャーがコンパイルエラーになる。
OracleTextのインデックス再作成用のプロシージャー内の
ctx_ddl.optimize_index 記述部分でコンパイルエラーが発生しました。

行2でエラーが発生しました。:
ORA-06550: 行2、列1:
PLS-00201: 識別子CTX_DDLを宣言してください。
ORA-06550: 行2、列1:
PL/SQL: Statement ignored

ただし、ctx_ddl.optimize_indexをSqlPlusで直接実行した場合は、エラーが起きない。

sql> BEGIN
ctx_ddl.optimize_index('IDX_TEST_SF ', 'full');
END
⇒ OK
対処)
ユーザーにCTX_DDL実行権限を付与する。(GRANT EXECUTE ON CTX_DDL TO TEST_USER;)
参考ページ:「ask Tom Oracle」のQuestions (スレッド内を「PLS-00201」で検索して下さい)

何故にプロシ−ジャー内でだけエラーになるのかは不明のままですf^_^;

新DBではCTXSYSユーザーがロックされている状態だったので、
SYSDBAにて対象ユーザーにCTXAPP権限を与えたせいかと思い、
CTXSYSを有効にして再度権限を付与したのですが、状況は変わらずでした。
C export時とimport時の文字コードを同じにする必要がある。
旧DBサーバーと新DBサーバーで文字コードが違う場合、
import時に、プロシージャー内の日本語コメントが文字化けするらしく、
コンパイルエラーが発生しました。
対処)NLS_LANGを合わせる。

最終的に、下記の手順で新DBに(旧DBと同じ)ユーザーを作成し、importを実行しました。


(※新DBサーバーの文字コードはUTF-8)

$ sqlplus / as sysdba

CREATE USER TEST_USER
IDENTIFIED BY "TEST_PASSWORD"
DEFAULT TABLESPACE TS_TEST
TEMPORARY TABLESPACE TS_TEST_TMP
PROFILE DEFAULT
/
GRANT CONNECT TO TEST_USER
/
GRANT RESOURCE TO TEST_USER
/
GRANT CREATE VIEW TO TEST_USER
/
GRANT DBA TO TEST_USER
/
REVOKE UNLIMITED TABLESPACE FROM TEST_USER
/
ALTER USER TEST_USER QUOTA UNLIMITED ON TS_TEST ← デフォルト表領域
/
ALTER USER TEST_USER QUOTA UNLIMITED ON TS_TEST_TMP ← 一時表領域(念の為…)
/
ALTER USER TEST_USER QUOTA UNLIMITED ON TS_TEST_IDX ← インデックス表領域
/
GRANT CTXAPP TO TEST_USER
/
GRANT EXECUTE ON CTX_DDL TO TEST_USER
/
exit

$ sqlplus test_user/test_password

BEGIN
CTX_DDL.CREATE_PREFERENCE('TEST_LEXER', 'JAPANESE_VGRAM_LEXER');
END;
/

exit

$ export NLS_LANG=japanese_japan.ja16sjistilde ← 旧DBサーバーの文字コード

(コンソールをSHIFT-JISにする)

$ imp test_user/test_password file=/tmp/test_user.dmp log=/tmp/test_user.log fromuser=test_user touser=test_user

$ export NLS_LANG=Japanese_Japan.UTF8 ← 新DBサーバーの文字コード

(コンソールをUTF-8に戻す)

(DBA権限を削除する)

$ sqlplus / as sysdba

REVOKE DBA FROM TEST_USER
/

exit
/


…ちまちま画面を作っているしがないプログラマが、
見よう見まねでサーバー設定やDB移行をしているという、人手不足が深刻な今日この頃なのでした(-_-)

テーマ

注目テーマ 一覧


月別リンク

【PGメモ:DB】 Oracle Databese でのimport作業で起きた問題まとめ。 stone creater's room/BIGLOBEウェブリブログ
文字サイズ:       閉じる