【windows】【データベース移行】oracleからpostgresqlへ
めちゃくちゃ大変だった。
初心者です。
間違ってたら教えて下さい。
ただ、これで一応テーブル定義はpostgreSQLに移行できました。
*忘れないように書いておく。また時間あるときに綺麗に書き換えます。
【やりたいこと】
WindowsでOracleで管理していたデータベースをPostgreSQLに移行したい
【事前準備】
oracleデータベースの環境とpostgreSQLの環境を整えておきましょう。
Oracle Database Express Edition 11g Release 2のダウンロード
PostgreSQL: The world's most advanced open source database
どちらも無償のものです。
なんか、他のサイトではclient instantツールを使うとかあったけど、
よくわからなかったので、こちらでやりました。
【流れ】
OracleのデータベースをOra2pgというソフトを使ってPostgreSQLのデータベースに移行させていく。
Ora2pgのconfファイル内に接続するデータベース、その後の変換パターンを記述して、
Ora2pgコマンドから、confファイルの指定通りに新たなファイルを作成するように
指示することによって、適切なファイルが作られる。
【問題】
そもそも、OracleとPostgreSQLは定義が違ったり、データ型が違うからそのまま
データを抜き出して、移行はできない。
そのため、Ora2pgというソフトを利用して、Oracleのデータベースの定義を
エクスポートする際にPostgreSQL型に変更させてインポートできるようにする。
やってイコーーー!
【参考サイト】
いろんなサイト見たけど、linuxからだったり、みなさん専門用語が多すぎたので、
今回は、この本家サイトを参考にやっていきました。
わからない単語は調べながらやったけど、まーーーーじーーーーでーー時間かかた。
【インストールする必要があるもの】
-Perl v5以上
(下記はPerlから使えるモジュール(部品))
/CPAN シェル
/Time-HiRes 時間用
/DBI データベース接続用
-Ora2pg
(下記はOra2pgから作成するconfファイル)
/ora2pg.conf 設定ファイル
【その①】
perlのインストール
windows OSから行ったので、私はこちらのサイトからインストールしました。
このパッケージの中には、あらかじめいくつかのモジュール(部品)が入って
いるので便利です。
シェルから、上記で記述した他に必要なモジュールをインストールするので必須。
$perl --version
バージョンが出てきたら、インストールできてます。
----現状----
-Perl v5以上
(下記はPerlから使えるモジュール(部品))
/CPAN
/Time-HiRes
/DBD::Oracle
-Ora2pg
(下記はOra2pgから作成するconfファイル)
/ora2pg.conf
【その②】
まずはPerl関連からどんどこインストール
$CPAN install Time-Hires
はいおっけー!
【その③】
DBD::OracleはOracleのデータベースにPerlから接続できる部品だから
予め、Oracleのデータベースの場所をWindowsOSに指示しておく必要がある。
そのための環境変数を設定する。
本当はコマンドから何度も挑戦したんだけど、全然うまく起動しなかったので
こちらを参考に。
新規パスとして2つ登録する。
パス名:ORACLE_HOME
パス:Oracleデータベースが設定されているパス
例)C:¥oraclexe¥app¥oracle¥product¥11.2.0
←このパスの後ろにもう一つディレクトリがあるかも
パス名:LD_LIBRARY_PATH
パス:上記のパスの一つ下の層にあるlib
例)C:¥oraclexe¥app¥oracle¥product¥11.2.0¥lib
----現状----
-Perl v5以上
(下記はPerlから使えるモジュール(部品))
/CPAN
/DBI
/Time-HiRes
/DBD::Oracle
-Ora2pg
(下記はOra2pgから作成するconfファイル)
/ora2pg.conf
【その④】
Ora2pgをダウンロードして、インストールする
まずはこちらからダウンロード
そんで、インストール
まずはzipファイルを適当な場所(これいっつも困る。Cの中にぶっこんだ)
に展開します。
コマンドから上記の展開したディレクトリまで移動して、perlを使ってインストール
$cd C:¥ora2pg-19.0
$perl gmake && gmake install
確認コマンド
$ ora2pg --version
バージョンが表示されたらOK
----現状----
-Perl v5以上
(下記はPerlから使えるモジュール(部品))
/CPAN
/DBI
/Time-HiRes
/DBD::Oracle
-Ora2pg
(下記はOra2pgから作成するconfファイル)
/ora2pg.conf
【その⑤】
ora2pg.confファイルを作成
C:¥ora2pg-19.0 ディレクトリ下にora2pg_dist.confファイルがある。
これをコピーして、まずはファイルを作成する。もしかしたらora2pg_dist.confを
書き換えて、ora2pg_dist.confファイルを設定ファイルとして指定したら
よかったのかも。。。
ちょっとわかんなかったので、私はコピーして作った。
コマンドから(ora2pg-19.0のディレクトリで)
$copy ora2pg_dist.conf ora2pg.conf
これでファイルは作成できた
----現状----
-Perl v5以上
(下記はPerlから使えるモジュール(部品))
/CPAN
/DBI
/Time-HiRes
/DBD::Oracle
-Ora2pg
(下記はOra2pgから作成するconfファイル)
/ora2pg.conf
やったーーー!!これで全部インストール系は完了!うっし。
【流れを再度確認】
ora2pgコマンドより、ora2pg.confファイルに設定してある内容で
データをpostgreSQL用にエクスポートさせたい。
ということは、ora2pg.confにはどのoracleに接続するのか指定する
必要がある。
【その⑥】
ora2pg.confにデータベースの設定を指示していく
ファイルを開いて、編集箇所を書いて上書き保存
⦅編集箇所⦆
ORACLE_HOME [windowsOSに通したパス]
ORACLE_DSN dbi:Oracle:host=[ホスト名] localhost:sid=[sid名(XE等)]
ORACLE_USER [ユーザー名]
SHEMA [スキーマ名(通常はユーザー名と同じ)]
【その⑦】
Oracleへの接続確認
ora2pg-19.0ディレクトリまで移動して
$ora2pg -c ora2pg.conf -t SHOW_VERSION
と打ったら
Oracle database 11g Release 11.2.0.1.0
こんなんでて、バージョン確認できたら、ora2pgコマンドから
使用したいOracle databaseに接続できる!
ちなみに
-c:conf file
-t:type export
-n:user name
なので、
$ora2pg -c ora2pg.conf -n [confファイルに設定したユーザー名] -t SHOW_TABLE
と打つと、
ユーザー名が作ったテーブルがズラーーーーっとコマンド上に出てくる
このテーブルはora2pgさんがpostgreSQL用に変換してくれたもの。
これをファイルとしてエクスポートする必要がある
【その⑧】
postgreSQLでインポートできるファイルを作成する
上記のデータをファイルにする
$ora2pg -c ora2pg.conf -n [ユーザー名]
ora2pg-19.0ディレクトリ下にoutput.sqlとして出力されている
【その⑨】
postgreSQLに先程作成したoutput.sqlをインポートする
一応postgreSQLの入ってるディレクトリまで行って。
(ただ、これあんま関係ない気がする)
$psql -f[実行したいSQLが書かれているファイル] -U [postgreSQL ユーザー名]
([DB名])(-h[ホスト名])
password:[postgreSQLのパスワード]
できたーーーーーーーーーーーーーーーー😭😭😭
めちゃくちゃ嬉しい。
色々細かいところも、わかってないですが、これでできます。
流れが自分で説明できるだけ、だいぶ成長!
おっし!