初心者の忘備録

プログラミング初心者の忘備録

【windows】【データベース移行】oracleからpostgresqlへ

めちゃくちゃ大変だった。

初心者です。

間違ってたら教えて下さい。

ただ、これで一応テーブル定義はpostgreSQLに移行できました。

*忘れないように書いておく。また時間あるときに綺麗に書き換えます。

 

【やりたいこと】

WindowsOracleで管理していたデータベースをPostgreSQLに移行したい

 

【事前準備】

oracleデータベースの環境とpostgreSQLの環境を整えておきましょう。

oracle

Oracle Database Express Edition 11g Release 2のダウンロード

postgreSQL

PostgreSQL: The world's most advanced open source database

どちらも無償のものです。

 

なんか、他のサイトではclient instantツールを使うとかあったけど、

よくわからなかったので、こちらでやりました。

 

 

【流れ】

OracleのデータベースをOra2pgというソフトを使ってPostgreSQLのデータベースに移行させていく。

Ora2pgのconfファイル内に接続するデータベース、その後の変換パターンを記述して、

Ora2pgコマンドから、confファイルの指定通りに新たなファイルを作成するように

指示することによって、適切なファイルが作られる。

 

【問題】

そもそも、OraclePostgreSQLは定義が違ったり、データ型が違うからそのまま

データを抜き出して、移行はできない。

そのため、Ora2pgというソフトを利用して、Oracleのデータベースの定義を

エクスポートする際にPostgreSQL型に変更させてインポートできるようにする。

 

やってイコーーー!

【参考サイト】

ora2pg.darold.net

いろんなサイト見たけど、linuxからだったり、みなさん専門用語が多すぎたので、

今回は、この本家サイトを参考にやっていきました。

わからない単語は調べながらやったけど、まーーーーじーーーーでーー時間かかた。

 

【インストールする必要があるもの】

-Perl v5以上

(下記はPerlから使えるモジュール(部品))

 /CPAN    シェル

 /Time-HiRes   時間用

 /DBI     データベース接続用

 /DBD::Oracle oracleのデータベース接続用

-Ora2pg

 (下記はOra2pgから作成するconfファイル)

 /ora2pg.conf  設定ファイル

 

 

【その①】

perlのインストール

windows OSから行ったので、私はこちらのサイトからインストールしました。

Strawberry Perl for Windows

このパッケージの中には、あらかじめいくつかのモジュール(部品)が入って

いるので便利です。

このパッケージの中にCPANというシェルが入ってます。

シェルから、上記で記述した他に必要なモジュールをインストールするので必須。

 

$perl --version

バージョンが出てきたら、インストールできてます。

 

----現状----

-Perl v5以上

(下記はPerlから使えるモジュール(部品))

 /CPAN

 /DBI::Oracle

 /Time-HiRes

 /DBD::Oracle

-Ora2pg

 (下記はOra2pgから作成するconfファイル)

 /ora2pg.conf

 

【その②】

まずはPerl関連からどんどこインストール

コマンドラインからCPANを使ってインストール

$CPAN install Time-Hires

$CPAN install DBI

$CPAN install DBD::Oracle

 

はいおっけー!

【その③】

DBD::OracleOracleのデータベースにPerlから接続できる部品だから

予め、Oracleのデータベースの場所をWindowsOSに指示しておく必要がある。

そのための環境変数を設定する。

 

本当はコマンドから何度も挑戦したんだけど、全然うまく起動しなかったので

こちらを参考に。

新規パスとして2つ登録する。

パス名:ORACLE_HOME 

パス:Oracleデータベースが設定されているパス 

   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 Makefile.PL

$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 [ユーザー名]

ORACLE_PWD [パスワード]

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のパスワード]

 

できたーーーーーーーーーーーーーーーー😭😭😭

めちゃくちゃ嬉しい。

色々細かいところも、わかってないですが、これでできます。

流れが自分で説明できるだけ、だいぶ成長!

おっし!