#Oracleレプリケーション環境で遊びたい
やむにまれない事情でOracleレプリケーションで遊ぶ必要があったので、ローカルPCの仮想環境にDBサーバを2台立てて、レプリケーション環境を構築します。レプリケーションのタイプは単純な読取り専用マテリアライズド・ビューで、構成イメージ以下の通りです。
#Oracleをインストールする
##ゲストマシンを作成する
VMPlayerよりゲストマシンを1台作成し、CentOS6.8をインストールします。
このとき、スペックがOracle Enterprise Editionのインストール要件を満たしていることに注意します。(今回、メモリ1GB、ディスク20GBで構築しましたが、ストレスなく動いています)
OSがインストールできたら、OTNからOracle11gR2のアーカイブファイルをダウンロードして、適当なディレクトリに配置します。
##インストール用のユーザとグループを作成する
Oracleをインストールするために必要なユーザ、グループを作成します。
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
##インストーラを実行する
ダウンロードしたアーカイブファイルをoracleユーザで解凍し、インストーラを実行します。
なお、インストールは対話形式で行いますので、CUIではなくGUI環境で作業してください。
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
./database/runInstaller
以下、インストールの設定例です。
ただ遊ぶための環境なので、ほぼデフォルトのままです。
なお、LANGが日本語だとOUIが文字化けてしまったので、一時的に英語に切り替えています。
6/9 前提条件チェックの実行
私の環境の場合、結構、怒られましたが、とりあえず必要そうな以下のパッケージだけインストールしました。
yum install -y gcc-c++
yum install -y glibc
yum install -y compat-libstdc++-33
yum install -y elfutils-libelf-devel
その後、再度チェックを行い、「Ignore ALL」を選択して、次へ進みます。
インストール処理後、DBCAが起動して、1時間後くらいに無事にインストール、DB作成完了。なお、アカウントロックの解除は特にしていません。
最後に、rootユーザでスクリプトを実行しろと言われるので、実行します。
sh /home/oracle/app/oraInventory/orainstRoot.sh
sh /home/oracle/app/oracle/product/11.2.0/dbhome_1/root.sh
##ゲストマシンを複製する
Oracleのインストールが完了したら、ゲストマシンのファイルを丸ごとコピーして、別の仮想マシンとして作成します。
#Oracleレプリケーション環境を構築する
Oracleをインストールした仮想マシンが2台できたので、レプリケーション環境を構築します。
このとき、必要に応じて構築用のスキーマを作成してください。また、リスナーのポートも開放しておきます。
##tnsnames.oraファイルを設定する
マテリアライズドビューサイトからマスターサイトに接続できるように、レプリケーションサイトのtnsnames.oraに任意の接続識別子を追記します。以下、記述例です。
db1=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = [マスターサイトのIPアドレス])(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
)
)
##DBLinkを作成する
サイト間でレプリケーションができるように、マテリアライズド・ビューサイトでDBLinkを作成します。
USING句の後には、上記で作成した接続識別子を指定します。
CREATE DATABASE LINK db1_mv CONNECT TO user IDENTIFIED BY password USING 'db1';
DBLinkが作成できたら、マスターサイトでテーブルを作成し、マテリアライズド・ビューサイトからそのテーブルが参照できることを確認します。
select * from table1@db1_mv ;
##マテリアライズド・ビューログを作成する
今回、高速リフレッシュを行いたかったので、マスターサイトでレプリケーション対象のテーブルに対してマテリアライズドビュー・ログを作成します。
create materialized view log on table1;
##マテリアライズド・ビューを作成する
マテリアライズド・ビューサイトで作成します。今回、リフレッシュのタイミングは手動にしています。
create materialized view mv1
refresh fast on demand
as
SELECT * FROM table1@db1_mv;
##完了
マテリアライズド・ビューが作成できたら、マスターサイトのテーブルにレコードを追加して、すぐにはレプリケーションされないことを確認します。その後、マテリアライズド・ビューサイトで完全リフレッシュを行い、データが反映されていることを確認します。
exec dbms_mview.refresh('mv1','c');
以上で、必要最低限のOracleレプリケーション環境が構築できました。