Oracle DB起動時にエラーORA-00257が出て起動しない際の対処法

昨日、弊社テスト環境で発生したOracle DBのアーカイブログ関連のエラー対処法を投稿いたしましたが、
その後、今度は別の内容のエラーが出力され停止しました。その際の対処法について書き記します。

以下の文が出力されたエラー内容です。

ORA-00257:archiver error. Connect internal only, until freed.

このエラー内容が意味するところは、アーカイブログ出力先として指定されているフラッシュリカバリ領域の容量がいっぱいになっており、新たなアーカイブログが書き込めないというものです。

対処法としては、基本的には、フラッシュリカバリ領域の容量を増やすか不要なアーカイブログファイルを削除するということになりますが、今回調べたところ、「空きを確保するためにアーカイブログをエクスプローラー上で手動ですでに削除してある」とのことでした。

そこでOracle DBの仕様を確認したところ、「アーカイブログの削除にはOracle DBのコマンドを使わなければならず、エクスプローラー上でアーカイブログを削除しても、Oracle DBはそれを認識しない(=領域を開放しない)」という仕様でした。
そのため、あいているはずのスペースが開放されず、結果としていっぱいになってしまった、ということになります。

このような場合、削除されたアーカイブREDOログファイルがすでに存在しないことをOracle DBに認識させる必要があります。
以下がそのコマンドです。
=============
ステップ1:Windowsのコマンドプロンプト(cmd.exe)を開きます。
ステップ2:「RMAN TARGET /」と入力します。
(場合によっては「RMAN TARGET system/password」と打たなければならないかもしれません)
リカバリマネージャに接続します。IDのsystemとパスワードのpasswordの部分は設定に応じて適宜変更してください。
ステップ3:「CROSSCHECK ARCHIVELOG ALL;」と入力します
Oracleがアーカイブファイルの存在を確認しにいきます。
コマンドライン上に進行状況が記録され、すでに存在しないファイルに関してはその旨が表示されます。
ステップ4:「DELETE EXPIRED ARCHIVELOG ALL;」と入力します
Oracleはすでに存在しないアーカイブファイルの情報を削除します。
ステップ5:これで領域が開放されます。これにて作業は完了です。

=============
Oracle DBから行うアーカイブログファイルの削除手順は以下のとおりです。
ステップ1:Windowsのコマンドプロンプト(cmd.exe)を開きます。
ステップ2:「RMAN TARGET /」と入力します。
ステップ3:「DELETE ARCHIVELOG ALL COMPLETED BEFORE ‘sysdate-7’;」と入力します。
BEFORE句は条件式です。上記の例は直近1週間分を残しそれ以前のアーカイブログは削除するというコマンドです。
条件に合わないアーカイブログの削除が実行されます。
ステップ4:「LIST ARCHIVELOG ALL;」と入力します。
条件に沿ったアーカイブログが残っているかを確かめます。

コメントする -->

Oracle DB起動時にエラーORA-01034・ORA-27101が出て起動しない際の対処法

先日、弊社においてDBMoto動作検証用に導入されていた、Windows上のOracle DB 11gR2に接続できなくなる事態が発生しました。
そこで、当該Orace DBにSQLPlusで接続しようとしたところ、次のようなエラーが出て接続できませんでした。

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory

より詳しい調査のため、Windows付属のイベントビューワを使います。
「Windowsログ」以下にある「アプリケーション」を開き、「現在のログをフィルター」から以下の画像のように条件を入力すると、Oracleのエラーのみが表示されるようになります。
eventviewer03

eventviewer_consolidated

絞り込んだOracleからのエラーログを調べますと、以下のようなエラーが出力されていました。

Archive process Error:ORA-16038: log 2 sequence# 149 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1:’C:\APP\ADMINISTRATOR\ORADATA\REDO02.LOG’

これらのエラーを調べたところ、REDOログをアーカイブする際に、何らかの原因でREDOログが
アーカイブREDOログに書き込めず、その結果発生するものでした。

この場合、以下のようにアーカイブログのモードを一旦リセットしなければなりません。

ステップ1:Windowsのコマンドプロンプト(cmd.exe)を開きます。

ステップ2:sqlplus system/password as sysdbaと入力します。SIDを指定する必要はありません。
sysdba権限で接続するコマンドです。IDのsystemとパスワードのpasswordの部分は設定に合わせて適宜変更してください。
SIDが不要な理由はその対象となるインスタンス自体が立ち上がっていない=認証できない、ためです。

ステップ3:shutdown immediateと入力します。
念のためデータベースをシャットダウンします。立ち上がっていない場合、エラーを出しますが問題ありません。
shutdown abortは最終手段用であり、データベースの整合性が失われる危険がありますので使わないでください。

ステップ4:startup mountと入力します。
今回、startup openと入力すると、異常のあるREDOログおよびアーカイブログが読み込まれ、マウントした直後に「ORA-03113:通信チャネルでend-of-fileが検出されました」という
エラーが発生し、それ以降exitするまでうまくいかなくなるため、mount状態でいったんとめます。

ステップ5:alter database noarchivelogと入力します。
アーカイブモードをノーアーカイブモードに変更します。
mount状態においてアーカイブモードに関する変更をすることができます。open状態ですと変更ができません。

ステップ6:alter database openと入力します。
データベースをオープンします。無事データベースがオープンします。

ステップ7:shutdown immediateと入力します。
データベースをシャットダウンします。
shutdown abortは最終手段用であり、データベースの整合性が失われる危険がありますので使わないでください。

ステップ8:startup mountと入力します。
再びデータベースをマウント状態におきます。

ステップ9:alter database archivelogと入力します。
設定をアーカイブモードに戻します。

ステップ10:alter database openと入力します。
データベースをオープンします。

ステップ11:exitで終了します。

ステップ12:sqlplusと入力します。通常の認証画面が出たらユーザー名とパスワードを入力してください。
接続ができるようになっているかと思います。

タグ: , ,

スキーマ(ユーザ)作成時に「ORA-65096」~Oracle 12cのアーキテクチャはここが違う~:DBMoto

Oracle 12cでスキーマ(ユーザ)を作成すると下記のエラーが発生する場合があります。

ORA-65096: 共通ユーザーまたはロール名が無効です

このエラーへの対処の前に、まずはOracle 12cのアーキテクチャを理解する必要があります。

まず、Oracle 11gR2 の場合:

続いて、Oracle 12c の場合:

Oracle 12cでは、まず「マルチテナントコンテナデータベース」(CDB)と呼ばれる親DBが存在し、その下に「プラガブルデータベース」(PDB)と呼ばれる子DBが存在します。
PDBは仮想DBのようなもので、1つのインスタンス上で複数作成・起動することができます。

そしてCDBとPDBには下記のルールがあります。

・通常のローカル接続(11gR2までと同じように接続)した場合、CDBに接続される。
・CDBにはユーザスキーマを作成することはできない。(ORA-65096となる)
・ユーザスキーマはPDBに接続して作成する必要がある。
・CDBからはユーザスキーマが見えない。

つまり、「ORA-65096」が発生するのは、これまでの Oracle 11gR2 までと同じ感覚で接続し、CDBに作成しようとしていたためです。
すなわちPDBに接続して作成する必要がありますが、下記の手順を取る必要があります。

1. PDBを起動する

PDBを起動するためにsysadminで接続し、下記のSQLを実行します。
SQL> alter pluggable database pdborcl open;

PDBを停止する場合は、下記のSQLを実行します。
SQL> alter pluggable database pdborcl close immediate;

2. PDBへ接続するために「tnsnames.ora」を編集する。

デフォルトではCDBへ接続されるようになっているので、新規でPDB接続用を作成します。
下記の例ではCDB接続用を「ORCLCDB」、PDB接続用を「ORCLPDB」としています。

なお、PDB名はインストール時に設定した↓です。

以上で、クライアントからPDBへ接続できるようになり、スキーマの作成が可能となります。

続いてSQLPLUSからPDBへ接続する手順です。

1. 現在の接続先を確認する

下記のSQLを実行します。CDBに接続されていることが分かります。
SQL> show con_name

2, 接続先を変更する

下記のSQLを実行します。PDBに接続されていることを確認します。
SQL> alter session set container = pdborcl;

※本記事は現在検証中のため、誤記等が含まれている可能性がある点ご承知おきください。

タグ: , , ,

Oracle 12c(Windows版)をインストールしました!

インストールの手順自体はそれほど難しいものではありません。

1. ダウンロードしたzipファイル2つを解凍し、2つのdatabaseフォルダを統合したあとにsetup.exeを実行します。

2. インストーラが起動します。ここでは特にメールアドレスは入力せずに画面を進めます。

3. メールアドレス未入力に関する警告が表示されます。

4. ここではソフトウェア更新を行わないものとし、「ソフトウェア更新のスキップ」にチェックを入れて画面を進めます。

5. 「データベースの作成および構成」にチェックが入っていることを確認し、画面を進めます。

6. 今回は検証用マシンのWindows Server 2012にインストールするため、「デスクトップ・クラス」にチェックを入れ、画面を進めます。

7. Oracle 12c Windows版では、これまでの過去のバージョンと異なり、Windowsの標準アカウントを指定して構成する方法を推奨しているようです。
SQL Serverと同じような仕様になったのでしょうか。ここでは新規でWindowsユーザを作成することとし、「新規Windowsユーザーの作成」にチェックを入れて必要事項を入力し、画面を進めます。

8. データベースの構成設定画面ですが、ここではデフォルトの設定をそのまま使用することとします。「プラガブル・データベース」というのが12c独自の考え方のようです。後々重要になります。

9. インストールの構成チェックが始まります。

10. 構成チェックに問題なければ下記の画面が表示されます。設定を確認して「インストール」をクリックします。

11. インストールが開始されます。結構な時間がかかります。

12. データベースの作成が完了します。OKをクリックします。

13. 「閉じる」をクリックし、インストール作業は完了です。

タグ:

SQL Serverセキュリティへの基本的なベスト・プラクティス

●暗号化したデータベースのバックアップの重要性
データベースのバックアップは企業にとって非常に重要です。バックアップ・ファイルが暗号化されていなければ、他のSQL Serverにコピーし、リストアすることは非常に簡単です。DB管理者はMEDIAPASSWORD機能を使用してこれを回避することができます。

●不明なユーザを削除することでデータベース・バックアップ・フォルダの保護
DB管理者はデータベース・バックアップ・フォルダへのアクセスを制限し、本当に必要なユーザのみに許可を与えることです。データベース・バックアップ・フォルダへの許可されていないアクセスは、脆弱なリモート・サーバへコピーされる可能性があります。許可されていないアクセスは重要なバックアップ・ファイルを誤って削除される可能性もあります。

●SQL Server認証モードではなく、Windows認証を使用する
SQL Serverのセキュリティ・ベスト・プラクティスとして、1つはWindows認証を使用してSQL Serverへ接続することです。SQL ServerのWindows認証モードは社内全体のAD(Active Directory),アカウント、グループ、パスワード・ポリシーを利用することができます。もしSQL Serverへ接続でSQL Server認証モードを使用しなければならないときはシステム管理者(SA)アカウントを使用しないことを推奨します。もしSQL Server認証を使用していても、ユーザ・アカウントのパスワードを設定する時にWindowsパスワード・ポリシーを利用することができます。

●システム管理者アカウントのパスワードを複雑化させる
SQL Serverで異なったモードの認証を使用している場合はSAアカウントでは複雑にしたパスワードを使用します。ベスト・プラクティスとしてSAアカウントでWebアプリケーションからSQL Serverへ接続することは避けます。日々のメンテナンス業務の実行にSAアカウントの使用は避けるべきです。日常的な業務メンバーにはWindowsアカウントと適正なパスワードを使用させます。ベスト・プラクティスとしてSAアカウントのパスワード週ごとに変更すべきです。

●ログインの監査
SQL Serverセキュリティ・ベスト・プラクティスとして、いつもSQL Serverへ失敗したログインを監査すべきです。SQL Serverへのログイン監査ができれば、ログイン情報はSQLServerエラー・ログに書き込まれます。定期的に怪しい行動がないかモニターすることができます。

●SQL Serverのブラウザ・サービスの停止
もう1つのSQL Serverセキュリティのベスト・プラクティスとして、データベース管理者はSQL Serverののデフォルト・インスタンスを稼働させている時にはSQL Serverブラウザ・サービスは停止させるべきです。ネームド・インスタンスを稼働させていても、SQL Serverのネームド・インスタンスに接続するアプリケーション・接続ストリング内でポートを明確に定義することができます。

●SQL Serverでの未使用な機能の無効化
未使用な機能の無効化することで外部からの攻撃を削減することができます。SQL Server 2005 では SQL Server Configuration Managerを使用してそれらを行うことができました。SQL Server 2008以上では「policy-based management」機能を使用して実行することができます。例:XP_CMDSHELL, OLE AUTOMATION, OPENROWSET, OPENDATASET

●SQL Serverサービス・アカウントのプリビレッジの削減
最期のベスト・プラクティスはデータベース管理者は、常に最小限のプリビレッジを持つローカル・ドメイン・アカウントでSQL Serverサービスを実行することです。SQL Serverサービスをローカル・システム、ローカル・管理者、ドメイン管理者アカウントの基で稼働させることは避けるべきです。その場合SQL Serverサービス・アカウントがデータ、ログ、リード/ライト用のバックアップ・ディレクトリへの「フルコントロール」パーミッションを確認ください。

ソース:SearchSQLServer.com

タグ: ,

主キー(PK)もDBMoto仮想PKも指定せずに差分レプリケーションを行うには?

DBMotoで差分レプリケーション(ミラーリング)を行う場合には、
原則複製先のターゲットDB側にPKが必要です。

参考:差分レプリケーションに必要なDBの主キーとDBMotoの仮想PK
//www.climb.co.jp/blog_dbmoto/archives/1114

もしDBにもPKがなく、DBMotoの仮想PKとするための一意の(値が重複しないユニークな)フィールド(またはフィールドの組み合わせ)が存在しない場合でも、差分レプリケーションを行うことが可能な方法があります。

方法は複製元のソースDB側のレコードIDを使用します。
例えば、Oracleの場合はROWIDに該当します。

ただし、この方法をとる場合には、ターゲット側DBに対して、ソースのROWIDとマッピングを行う専用のフィールドを新たに用意する必要があります。

以下設定手順です。

ソーステーブルは下記の3フィールドです。
PKの指定はありません。

一方ターゲットテーブルはソーステーブルの3フィールドに加え、ソーステーブルのレコードIDとマッピングするためのフィールドSP_IDを用意します。
このフィールドはDBのPK又はDBMotoの仮想PKの指定が必要です。

レプリケーション定義作成時のマッピング画面ではデフォルトで下記のように表示されています。
これはソースとターゲットで共通のフィールドのみマッピングされている状態です。

ソースのレコードIDとマッピングするターゲットのフィールドSP_IDを右クリックし、「関数へのマッピング」を選択します。

関数プログラムの画面で入力欄に[!RecordID]と入力します。または、左下ペインから値⇒Log Fieldを選択し、右下ペインから !RecordID をダブルクリックすることで上の入力欄に反映されます。

マッピング画面で下記のように表示されていれば問題ありません。

この状態でレプリケーションを開始しますが、ソースのレコードIDをターゲットのフィールドSP_IDへ反映させるために、初期リフレッシュから実行します。
初期リフレッシュ完了後は下記のように表示されています。

ソース

ターゲット

ソース側に1レコードを追加してみました。正常にミラーリングされていることが確認できます。

ソース

ターゲット

主キー(PK)もDBMoto仮想PKも指定せずに差分レプリケーションを行うには? はコメントを受け付けていません -->

DBMotoの設定情報(メタデータ)を冗長化構成にして、より安全に運用する

DBMotoでの設定情報はメタデータの形式で、デフォルトではDBMotoインストールマシンにSQL Server CE形式(.sdf)で保存されます。
※DBMotoマシン以外の別マシンのDBに保存することも可能です。


※通常の構成例

このメタデータは冗長化の構成を取ることが可能で、メインのメタデータから最大2つのバックアップメタデータを取ることが可能です。
すなわちメインのメタデータを含めると、最大3つのメタデータを冗長化することが可能となります。


※メタデータを冗長化した構成例。
この場合メインのメタデータをDBMotoマシンに、バックアップ用のメタデータをターゲットDBと、さらに別マシンのDBに保存している。

メインのメタデータの内容が変更されると、同時にバックアップ用のメタデータにもリアルタイムで反映されます。
万が一のDBMotoマシンの予期せぬ障害(災害等)対策に便利な機能です。

設定はメタデータのプロパティから行えます。
1つ目のバックアップは「プライマリバックアップ」、2つ目のバックアップは「セカンダリバックアップ」の項目で設定します。
「バックアップの有効」をTrueにすることでバックアップが有効になります。

DBMotoの設定情報(メタデータ)を冗長化構成にして、より安全に運用する はコメントを受け付けていません -->

DBMotoでユーザ認証・権限機能を使用~Windowsログインユーザにも対応~

DBMotoはデフォルトでは管理ツールであるManagement Centerのすべての機能を使用可能です。
しかし、DBMotoでユーザ権限を設定することで各ユーザに対して認証を要し、必要な権限のみを付与することも可能です。

ユーザ権限は「DBMoto認証」と「Windows認証」の2種類から選択可能です。
DBMoto認証の場合には、DBMoto専用のユーザ認証を使用し、Windows認証の場合には、Windowsログインユーザの認証機能を使用します。

権限も下記のようにきめ細かに設定が可能です。

・全機能を使用可能なユーザ
・設定情報は作成できないが運用監視のみ行えるユーザ
・ライセンス管理やユーザ管理のみ行えるユーザ 等

権限設定後は、DBMoto Management Center起動時に下記のようにログイン画面が表示されます。

DBMotoでユーザ認証・権限機能を使用~Windowsログインユーザにも対応~ はコメントを受け付けていません -->

metadataを開く際にエラー「An error was generated while creating database」が発生した場合の対処

DBMotoインストール直後、metadataを開く際にマシン環境によっては下記エラーが表示されて開くことができない場合があります。

An error was generated while creating database

●原因

下記の条件をすべて満たす際に発生します。
・DBMoto 64bit版がインストールされている
・SQL Server Compact Edition 32bit版がインストールされている。

DBMotoはデフォルトでmetadataの保存をSQL Server Compact Edition形式で行います。
DBMotoが64bitマシンの場合、metadata保存用のSQL Server Compact Editionも64bit版を使用します。

その際、マシンに32bit版のSQL Server Compact Editionがインストールされていると32bit版のSQL Server Compact Editionを参照しようとして本エラーが発生します。

●対処法

下記のどちらかの対応をお願いいたします。
・SQL Server Compact Edition 32bit版をアンインストールする 又は
・SQL Server Compact Edition 64bit版を新規インストールする
http://www.microsoft.com/ja-jp/download/details.aspx?id=17876

metadataを開く際にエラー「An error was generated while creating database」が発生した場合の対処 はコメントを受け付けていません -->

レプリケーション時のエラー「ORA-01291: ログ・ファイルがありません」への対処法

Oracleからの差分レプリケーション(ミラーリング)の際に、下記のエラーが発生した場合の原因と対処法です。

●エラー内容:
ORA-01291: ログ・ファイルがありません

●原因:
DBMotoが保持している(最後にレプリケーションした)Redo IDがOracleへ接続参照時に既になくなっている場合に本エラーが発生します。

DBMotoが保持しているRedo IDはDBMotoのレプリケーションプロパティから確認できます。下記画面例では73348299となります。

次にOracleサイドでのRedo IDを確認します。
クエリselect * from v$logにて確認可能です。

上記例のケースでは、SEQUENCE#が693がRedoの一番古いグループです。
このレコードのFIRST_CHANGE#を確認するとIDが75885340となっており、これがその時点での一番古いIDとなります。

DBMoto側でのIDが73348299、Oracleの一番古いIDが75885340ということで、このケースでエラーとなります。

●対処法:

まず既になくなってしまったIDの範囲のレプリケーションを行うことはできませんので、レプリケーションデータを復旧するにはイニシャルリフレッシュを実行する必要があります。

次に、このエラーを発生させないようにするには、DBMotoからOracleへ参照するIDが確実に残っている必要がありますので、下記対応を検討する必要があります。
・Redoログサイズやグループ数を増やして余裕を持たせる
・アーカイブログ運用にする(DBMotoはアーカイブログの参照も可能)

なお、Oracle側にIDが残っているにも関わらず本エラーが発生してしまう場合にはお問い合わせください。

 

レプリケーション時のエラー「ORA-01291: ログ・ファイルがありません」への対処法 はコメントを受け付けていません -->

OracleでのNOLOGGING運用によるDBMotoレプリケーションへの影響

OracleではREDOログファイルに記録する「LOGGING」か、記録しない「NOLOGGING」を指定することができ、NOLOGGINGを指定することで表や索引作成などの処理効率を上げることができます。
NOLOGGINGモードを指定すると、最小限のREDO情報しか作成されないため、次の利点があります。

・REDOログファイルの領域を節約できる。
・表や索引などの作成時間を削減できる。

NOLOGGINGモードでもUPDATE・DELETE・通常のINSERTに関してはREDOに記録されるため、NOLOGGINGモードでもDBMotoの差分レプリケーションには支障はありません。
しかしNOLOGGINGモードの場合、下記はREDOに記録されません。

・SQL*Loaderのダイレクトパス・ロード
・ダイレクトロード・インサート
・パラレルDML

これらの処理が発生しうる場合には、DBMotoで差分レプリケーションを行うために、NOLOGGINGモードに加え強制ロギングを設定するか、もしくはLOGGINGモードで運用する必要があります。

タグ:

AS/400でレプリケーションに必要なジャーナルが起動済みかを確認するためには?

DBMotoを使用してAS/400からのミラーリング(差分レプリケーション)を行う場合にはジャーナルが起動されている必要があります。

●参考:AS/400ジャーナル・レシーバー作成手順書、プロシージャ作成手順書を公開しました
//www.climb.co.jp/blog_dbmoto/archives/812

●参考:AS400(IBM i Series)からの差分レプリケーションの際にはジャーナルの自動削除はしないよう注意
//www.climb.co.jp/blog_dbmoto/archives/646

正しくジャーナルが起動されているかどうかは下記の手順で確認可能です。

1. DSPFDコマンドを入力します。

2. ジャーナルを起動している対象のテーブル(物理ファイル)とライブラリを指定します。

3. 物理ファイルの詳細画面が表示されるため、ジャーナル情報を確認します。
下記の画面例では、ジャーナル起動済み、ジャーナル名JRN、ジャーナル保存先FURUJRN、起動イメージBOTHとなっています。

4. 続いてDSPLIB コマンドにてジャーナル保存先の内容を確認します。

5. ジャーナルとレシーバーの一覧が表示されます。
タイプJRNはジャーナル、タイプJRNRCVはレシーバーでこちらが通常連番になっています。

6. 続いてジャーナルの詳細オプションの確認のため、CHGJRNコマンドを実行します。

7. ジャーナル名とライブラリを指定します。

8. ジャーナルの詳細オプションが表示されます。変更も可能です。
特にレシーバーの管理がSYSTEMになっている場合、レシーバーの削除がNOになっていることをご確認ください。

 

タグ: ,

リアルタイムDBレプリケーションツールの最新版DBMoto8完全日本語版をリリースしました。

DBMoto8の新機能は下記の通りです。

1. DBMoto管理・運用ツール完全日本語化

管理・運用ツールであるManagement Center内の項目や説明がすべて日本語化され、よりお使いいただきやすくなりました。
日本語と英語の言語切り替えはいつでも可能です。

2. 「DBMoto検証」機能の強化

「DBMoto検証」はレプリケーション後にソースとターゲットのテーブル間でデータの整合性が取られているか比較検証を行うことができる機能です。
DBMoto 8では新たにWHERE句とORDER BY句の条件を指定しての比較検証が可能となり、データ取得時間を最適化することが可能となります。

3. 複数ユーザーをサポートするためのメタデータ管理の強化

複数のユーザがローカル環境やDBMoto Management Centerリモートアクセス版、DBMoto APIで開発されたアプリケーションなどのクライアントを経由してメタデータにアクセスし変更することができるようメタデータ管理が改良されました。

4. DBMotoクライアントとDBMoto Server Agent間のセキュリティ通信を強化

イントラネットやインターネット環境でServer AgentとManagement Centerを実行しているとき、安全なデータのためのX.509証明書をサポートし、DBMotoのセキュリティオプションから選択可能となりました。

5. .NET Framework 4.0をサポート

DBMoto 8は.NET Framework 4.0用アプリケーションに変更されました。このため、DBMoto 8は.NET Framework 4.0又は4.5がインストールされたマシン上で動作します。
「レプリケーション状況確認ビューワ」ではMicrosoft Chart Controlsを使用します。

6. データベース「HP Vertica」をサポート

複製先のターゲットデータベースに「HP Vertica」のサポートを追加しました。

7. IBM DB2 LUW 10.1以降をサポート

IBM DB2 10.1以降(Linux、Unix、Windows版)を正式サポートしました。

8. Microsoft SQL Serverレプリケーションの高速化

Microsoft SQL Serverのトランザクションログであるディストリビュータを使用したレプリケーションがより高速化されました。

9. 双方向レプリケーション競合解決オプションの追加

双方向レプリケーションを行う際に、ソースとターゲットで同一更新が発生した際の競合回避オプションとして、これまでのオプション項目である「ソースを優先」「ターゲットを優先」「更新の早い方を優先」「スクリプトによるカスタマイズ」に加え、「更新の遅い方を優先」するオプションが新たに追加されました。

10. オプションダイアログにトレースオプションや設定を追加

APIやService MonitorとManagement Centerのいくつかの設定において、詳細なトレースオプションを提供するためにツールメニューのオプションダイアログを変更しました。

11. DBMoto APIの強化

カタログ・スキーマ・テーブル参照用に、システムカタログ機能のAPIを追加しました。
DBMoto API はC#・Visual Basic・Visual C++に対応しています。

タグ: ,

差分レプリケーションでどのようにデータの整合性がとられているか

DBMotoの差分レプリケーション(ミラーリング)は、ソースDBのトランザクションログをデフォルトで1分間隔で参照し、更新対象があればターゲットDBへ反映する手法を取っています。

DBMotoは常に下記の流れで最新のトランザクションIDを保持しているため、データの整合性をとったレプリケーションが可能となります。

・ソースDBのトランザクションを参照

・更新対象があればターゲットDBへ反映

・DBMoto内でトランザクションIDを最新にする

(以下繰り返し)

※この流れは、言い換えるとターゲットDBへ反映しなければDBMotoのトランザクションIDを更新しないことになります。
つまり、万が一ネットワーク障害等で一時的にDBMotoからDBにアクセスできない状態になった場合でもDBMoto内部のトランザクションIDは保持され続けますので、障害復旧後から正常通りレプリケーションが再開され、データの不整合は発生しません。

DBMoto内で保持されている現在のトランザクションIDはレプリケーションプロパティから確認することができます。

また、諸事情によりトランザクションIDを任意の位置に戻したり、特定の日時の位置に戻してレプリケーションをやり直すことも可能です。

コメントする -->

差分レプリケーションに必要なDBの主キーとDBMotoの仮想PK

DBMotoのレプリケーションはすべてSQLのクエリで行われます。
差分レプリケーション(ミラーリング)を行う場合には、どのレコードをレプリケーション対象かを判別させるために、
Where句を指定したクエリを発行する必要があります。

これはすなわち主キー(PK)が必要であることを意味します。
下記にミラーリングを行う際に主キーが必要なケースをまとめます。

●ターゲットDB(複製先)の場合:

すべてのDBにおいて、主キーが必要です。
DBに主キーが存在しない場合には、DBMotoの機能で疑似的にwhere句の条件に指定するための「仮想PK」を設定することも可能ですが、
仮想PKに設定するフィールドは一意(重複しない)である必要があります。
1つのフィールドで一意を満たせない場合には複数のフィールドを仮想PK(複合キー扱い)とすることも可能です。

【注意】
ターゲットDBに主キーが存在しない場合にDBMotoの仮想PKを使用する場合、
主キーがある場合と比較して一回に処理するレコード数が多ければ多いほど、
パフォーマンスが劣化することがあります。
これはDB側にPKが存在しない場合でもインデックスを作成することで回避可能です。

●ソースDB(複製元)の場合:

DBによって異なります。

・AS/400の場合:
⇒DBの主キーはなくても問題ありません。その際仮想PKの設定も行わなくて問題ありません。
※全レコードの値をwhere句に指定して対象を判別します。

・Oracleの場合:
⇒DBの主キーはなくても問題ありません。その際仮想PKの設定も行わなくて問題ありません。
※ROWIDとORA_ROWSCNをwhere句に指定して対象を判別します。

・SQL Server(ディストリビュータ使用)の場合:
⇒DBに主キーが必ず必要です。仮想PKを使用することはできません。
※ディストリビュータの仕様です

・MySQL、DB2、SQL Server(トリガー使用)の場合:
⇒DBの主キーはなくても問題ありません。しかしその場合は仮想PKの設定が必ず必要です。

■仮想PKの設定方法

1. metadataの対象のソーステーブルを右クリックし、「主キー設定」を選択します。

2. 主キー設定画面が開きます。

3. 仮想PKに設定したいフィールドを右側へ移動します。

 

タグ: , , , ,