<p>今度はデータベースのデータを移行しようとがんばってみる。<br />
とあるサーバからデータを頂いてくることにする。とあるサーバはLinux上で動いている。<br />
ここですでにExportされたデータを、新しいマイデータベースサーバに頂くという寸法。<br />
このデータを頂こうとすると、なぜかいろいろエラーがでる。IMPでデータをIMPORTしようとすると、エラーが表示される。</p>
<pre>imp.exe USER/PASS FROMUSER=USER FILE=&#092;*********.dmp tables=*** TOUSER=USER IGNORE=Y</pre>
<blockquote>IMP-00058: Oracleエラー 12560が発生しました。<br />
ORA-12560: TNS：プロトコル・アダプタ・エラー<br />
IMP-00000: エラーが発生したためインポートを終了します。 </blockquote>
<p>接続先を指定していないので、仕方が無いのか...<br />
IMP HELP=Y でコマンドの内容を見てみる。しかし、接続先の指定方法はない。<br />
苦し紛れに ユーザ/パスワード の部分を ユーザ/パスワード@接続文字列 に変更してみる。<br />
すると、エラーメッセージが変わった。一歩進んだようだ。<br />
次のエラーは、このような感じだった。</p>
<pre>imp.exe USER/PASS/hoge FROMUSER=USER FILE=&#092;*********.dmp tables=*** TOUSER=USER IGNORE=Y</pre>
<blockquote>IMP-00067: サーバのキャラクタ・セットのハンドルを変換できません。<br />
IMP-00000: エラーが発生したためインポートを終了します。 </blockquote>
<p>バージョンが違うダンプファイルは取り込み不可なんでしょうか？<br />
で、ネットをぐぐってみる...<a href="http://www.oracle.co.jp/2shin/ora80/18_19.html">オラクル通信:お知恵を拝借！ OTN-JフォーラムのQ&amp;Aから</a>で旧バージョンをdmpファイルを新バージョンに取り込むのは問題が無いという。<br />
IMPのバージョンが問題かなとOracle10のクライアントCDを探す。CD管理者に尋ねた際に、必要な原因を話してると、キャラクタセットが異なるからと言う話で、Oracleの設定を確認してみる。<br />
（くろねこは、dmpファイルもdatabaseもSJISだと思っていた。管理者は、dmpファイルはEUCで、databaseはSJISだと思っていた。）<br />
確認してみると、意外なことがわかった。dmpファイルはSJIS。データベースがUTF-8だったのです。<br />
ヾ(・・;)ォィォィ スキーマ(=ユーザ)から作り直しかよ...<br />
ちなみにキャラクタセットは、管理｜データベースのバージョン情報｜各国語サポートでNLS_CHARACTERSETの値を見るとわかります。<br />
コマンドの場合は、以下で調べることが出来ます。</p>
<pre>SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'</pre>
<br />
ここで、OracleだからSQLで変更できるだろうと、下記のようにやってみる。
<p>&nbsp;</p>
<pre>update nls_database_parameters SET VALUE='JA16SJIS' WHERE parameter = 'NLS_CHARACTERSET'</pre>
<p>下記のように表示されてうまくいかなかった。</p>
<blockquote>ORA-01733: ここでは仮想配列は使用できません。</blockquote>
<p>この前の記憶領域のコマンドもあやふやなので、もう一度再インストールしようかなとも思ったんですが...<br />
インストール時にキャラクタセットを指定できるところがなかった。OTZ</p>
<p>今日はこの辺で...</p>