DBMotoでスクリプトで出来ること、記述する場所の違い

DBMotoでスクリプトを記述可能な場所は大きく分けて3つあります。

1.グローバルスクリプト
DBMoto起動や停止、エラーの通知など全体に関係する部分へのスクリプトの適用や2、3で作成するような関数をグローバルスクリプトに記述しておくことで共有の関数として利用することも可能です。
・ログの記述に関する追加スクリプト

・メール送信に関するスクリプト

・IBM DB2 for i(AS400/iSeries)をソースとして使用している場合のレシーバ使用確認

・各エラー発生時の追加スクリプト

・レプリケーションマネージャ起動・停止に関する追加スクリプト

・ソース、ターゲット間の自動マッピングの独自スクリプト

・レプリケーション対象外のデータベースからの値取得

・レプリケーションやエクスプレッションスクリプトの共有スクリプトの記述

2.レプリケーションスクリプト
各レプリケーション内で発生するイベントに対してスクリプトを記述できます。
・リフレッシュ時のイベント:
レコード削除前後、リフレッシュ前後等

・ログ読み込みのイベント:
待機状態、ログ読み込み前後、ログに変更があった場合

・レプリケーション対象のレコードに関するイベント:
レコード対応付け前後、レプリケーション実施前後

・レプリケーション時のイベント:
レプリケーション内でのエラー、コンフリクト(衝突)発生前後

3.エクスプレッション(変換)スクリプト

ソーステーブルとターゲットテーブルの各フィールドの1対1の値や型の変換や1対多、多対1のスクリプトを作成できます。VB.NETの関数や独自で作成したグローバルスクリプト内の関数に従ってレプリケーション時の変換スクリプトを作成します。

このようなスクリプトが使用できることでDBMotoは柔軟にレプリケーションが可能であり、使い方次第で、バックアップだけではなく、システムの一部として利用することも可能です。

コメントする -->

DBMotoで扱う一時保存ファイルやログファイルを暗号化して情報漏えいを防止

DBMotoではレプリケーション処理の際に、各データベースに合わせて型の変換等を行うますので、一時的にフィールド情報がインストールマシンに保存されることがあります。またフィールド内の文字列で変換処理等で失敗した場合にはエラーログにそのフィールド情報も記載されます。

そのため、DBMotoインストールマシン自体を暗号化しておくことで情報漏えいの防止に役立ちます。暗号化ソフトとしましてはWindowsのBitLockerが暗号化を行う方法もありますが、今回はTrueCryptというフリーのソフトウェアを紹介させていただきます。
TrueCryptホームページ
http://www.truecrypt.org/

このソフトではシステムドライブを丸ごと暗号化が可能です。これにより万が一ハードディスクの盗難等にあった場合でも、中身をみられることなく情報漏えいの防止に役立てることが可能です。

DBMotoで扱う一時保存ファイルやログファイルを暗号化して情報漏えいを防止 はコメントを受け付けていません -->

WindowsのOracleでORA-01031エラーが発生した場合の対処法

SQL> connect /as sysdba
ERROR:
ORA-01031: 権限が不足しています。

このパターンになってしまったときの対処法についてです。
SYSDBA接続はOS認証を利用しているので、Windows側でOS認証が正しく設定されていないケースがほとんどです。

●確認事項1:sqlnet.ora

sqlnet.oraに下記が記述されていることを確認します。SQLNET.AUTHENTICATION_SERVICES= (NTS)

sqlnet.oraの場所は、$ORACLE_HOME\NETWORK\ADMIN です。
※私の環境では下記の場所でした。
C:\app\furutty\product\11.2.0\dbhome_1\NETWORK\ADMIN

 

●確認事項2:ORA_DBAグループのユーザ

通常はOracleをインストール時には自動で追加されるはずなのですが、もし追加されていない場合は追加する必要があります。

コントーロールパネル⇒システムとセキュリティ⇒管理ツール⇒コンピューターの管理を開き、「ローカルユーザーとグループ」⇒「グループ」⇒「ora_dba」を確認します。

OSユーザが存在しない場合は追加しましょう。

これでOKです。

タグ:

Database Performance Analyzer (旧Ignite)の情報からメモリのチューニング【DBの監視・管理】

検証用にインストールしたOracle 10.2をIgniteに登録し、監視していたところ以下のようにLibrary Cache Hit Ratioの警告が発生していました。

検証のためにインストールしたものであるため、最小構成であったようです。そのためSGAのパラメータを大きくして共有プールサイズが大きくなるよう変更しました。

SGA最大サイズを変更
alter system set sga_max_size = 512M scope = spfile;

SGA_TARGETを変更
alter system set sga_target = 512M scope = spfile;

インスタンス再起動
shutdown immediate;
startup;

これにより、警告が消えていることがわかります。

この程度のチューニングであれば、専門家ならすぐにわかるとは思います。
しかし運用しているOracleのパフォーマンス低下の原因が、どこにあるかを明確にするためには手間がかかります。
この際にigniteを用いることで、これがSQLクエリの問題なのか、プログラムの問題なのか、今回のようなパラメータやマシンスペックの問題なのかといった、原因の特定を用意にすることが可能です。

タグ: , ,

DBMoto Ver7.2のリリース [Vectorwiseのサポート追加]

DBMoto Ver7.2のリリースを開始しました。

主な新機能:

Actian Vectorwise (データウェアハウス向け高速データベース) V2.5以降の正式サポート
– リレーショナル・データベース・ソースからVectorwiseへのデータ・ロード
– ソース・データベースでの変更をリアルタイムに自動でVectorwiseへアップデート
(ミラーリングはVectorwiseがターゲット·データベースのみ)

●DB2 UDBの圧縮されたテーブルに対応するログリーダーのサポートが追加されました。

●SQL Serverのログベースのレプリケーションに関する最後のトランザクションID取得時のパフォーマンスの向上

タグ: , , , ,

SQL Serverへリモート接続するために必要な設定

SQL Serverに対して別マシンからリモートで接続を行う場合には、以下3点の設定が必要です。

1. SQL Server Management Studioを起動し、サーバーのプロパティ画面を開き、「接続」にある「このサーバーへのリモート接続を許可する」のチェックをONにする。
(デフォルトはONになっています)

2. SQL Server 構成マネージャーを起動し、「SQL Serverネットワークの構成」にあるインスタンスのプロトコルを選択し、「TCP/IP」を「有効」にする。
(デフォルトでは無効になっています)

3. SQL Server 構成マネージャー又はWindowsのサービス画面から、「SQL Server Browser」のサービスを起動する。
(デフォルトではExpress Editionの場合はサービス自体が無効になっており、有償版では自動起動済みになっています)

これらの設定はDBMotoからSQL Serverへ接続する際にも必要な手順となります。

タグ:

Database Performance Analyzer (旧Ignite) for Oracleユーザ事例:Liquid Digital Media


Liquid Digital Mediaはマルチメディア・コンテンツのリアルタイムな配信を行っています。そのシステムは顧客がインターネット小売サイトから個々のミュージックをダウンロードできるものです。顧客が直接ミュージックをダウンロードして購入した時にリアルタイムに受注から入金管理まで行います。顧客は多くのセレクションからカスタムCDを作成することができ、そのCDは直接ユーザに配送されます。

問題点:
使用していたJavaサーバで稼働するWebアプリケーション用にOracleを使用しています。購入されたミュージックの検索、選択、受注・入金管理のほとんどのタスクはそのOracleに依存しています。

Liquid Digital MediaはIgnite for Oracleをこのアプリケーションがサービス役務に適合するようにOracleデータベースのボトルネックを確認し、解決するために使用されています。Ignite を使用する前はそのユーザへのレポート・アプリケーションの遅延の原因を解決することができませんでした。使用していた従来型のツールではデータベースに遅延を起こしている特定のSQLを見つけ出すことはできず、問題の原因になるSQLステートメントを見つけ出さずに、データベースのレスポンス・タイムを改善することはできませんでした。Igniteは問題の正確なソースを見つけ出し、どのOracle のウェイト・イベントがエンドユーザの遅延をを起こしている要因かを解明します。

問題解決:

Liquid Digital MediaのDB管理責任者はIgnite for Oracleを使用はじめ、その問題が忙しい休暇シーズンに依存していることを確認することができました。他のツールはボトルネックの正確な原因を割りだすことができませんでしたがIgniteは問題を起こしている特定のSQLステートメントを見つけました。

またLiquid Digital MediaはIgniteのアラート(警告)機能を使用して異常なオペレーションのモニターをしています。問題を起こす可能性のある状況をDBAチームにアラートします。結果としてとしてボトルネックが起こる事前の警告でDBAチームは危機的な状況や週末での問題を回避しています。

Ignite for Oracleでの主な恩恵は:

●忙しい小売シーズンでのサービス・レベルのコンプライアンスを守りました。

●問題の本当の原因を特定し、Java、開発とデータ分野でのタスク割り当てを正確なものとしました。

●問題の発生を防ぐ具体的な変更点を特定することによって、ユーザのアプリケーションを事前に改善しました。

タグ: ,

AS400(IBM i Series)からの差分レプリケーションの際にはジャーナルの自動削除はしないよう注意

DBMotoでAS/400(i Series)からの差分レプリケーション(ミラーリング)を行う際にはジャーナル・レシーバ(以下ジャーナル)を参照します。

ジャーナルは「レシーバーの管理」が「*SYSTEM」の場合、最大値(しきい値)を超えると以下のように自動で連番を振って次のジャーナルを作成して切り替えます。

DBMJ0001
DMBJ0002
DMBJ0003
DBMJ0004
DBMJ0005・・・・・

ジャーナルが切り替わった場合には、DBMotoも自動で参照するジャーナルを切り替えます。一方のDBMotoは定期間隔(デフォルト60秒)おきにAS/400のジャーナルを参照します。

例えばAS/400側でジャーナルDBMJ0001からDBMJ0002へ切り替わった場合、次にDBMotoがジャーナルを参照するタイミングではまず、切り替え前のDBMJ0001を参照し最後尾まで確認後、自動的にDMBJ0002を参照しに行きます。

この際に1点注意が必要です。

ジャーナルを自動で切り替える際に元のジャーナルを自動で削除するかしないかの設定がジャーナル作成時に可能です。


「レシーバーの削除」が「*NO」の場合は自動では削除しませんが、「*YES」の場合には切り替わった直後に自動で削除します。

この設定にしている場合、例えばジャーナルDBMJ0001がDMMJ0002に切り替わったタイミングでDBMJ0001が削除されてしまうため、DBMotoがDBMJ0001を参照しに行ったタイミングでジャーナルDBMJ0001が見つからないという下記のエラーメッセージがAS/400から返されます。

エラーメッセージの例:
「ライブラリーFURUJRNにオブジェクトDBMJ0001が見つからない。」

このようなエラーを回避するために、AS/400のジャーナルは自動ですぐに削除しないよう下記の対策を検討する必要があります。

・自動削除はせず手動削除対応とする
・自動削除する場合は削除するタイミングを遅らせる(ようなプログラムを作成する)
⇒1つまでのジャーナルを削除するのではなく2つ前までのジャーナルを削除する等

タグ: , ,

PostgreSQL – アイドル・プロセスの終了方法

データベース・サーバ上で稼働するすべての不要なプロセスを強制終了させるクエリー:

タグ: ,

Database Performance Analyzer (旧Ignite)のアラート設定について(実行結果アラート編:Custom Alerts)

Igniteのアラート種類の一つであるCustom Alerts(実行結果アラート)では下記のようにSQLやプロシージャの実行結果(数値、ブール値)にあわせて、アラートを通知可能です。また結果がNORMAL, INFO, LOW, MEDIUM, HIGHといったアラートの値と同じ文字列である場合には、その文字列にあったアラート通知が可能です。

例として「Custom SQL Alert Single Numeric Return:SQL実行結果(一つの値)」のアラート設定を行います。

アラート名、間隔、インスタンス、実行するSQL(今回は表のレコード数)、閾値等を設定します。

このアラートを作成するためには、悪意あるSQLの実行を防ぐために、Igniteの設定ファイルにパスワードを設定し、作成時にはそのパスワードを入力する必要があります。

作成されると、アラート一覧に追加されます。

実際に送られてくる通知は次のようなメールです。

タグ: , ,

Database Performance Analyzer (旧Ignite)のアラート設定について(管理アラート編:Administrative Alerts)

Igniteのアラート種類の一つであるAdministrative Alerts(管理アラート)では下記のようにインスタンスとの接続、エラーによるアラートだけではなく、設定の変更や空き容量の低下に対してもアラート通知が可能です。

例として、「Database Instance Parameter Changes:データベースインスタンスの設定変更」のアラート設定を行います。

アラートの名前、間隔、対象のインスタンスを設定して作成します。

アラート一覧に追加されます。

実際のメール通知ではどのような変更(今回は共有プール領域のサイズ変更)が行われたかが通知されます。

タグ: ,

DPA(Ignite)のアラート設定について(待ち時間アラート編:Wait Time Alert)

Igniteのアラート種類の一つであるWait Time Alert(待ち時間アラート)では下記のようにSQLの実行時間だけではなく、ユーザやプログラム、マシンのI/Oなど、問題点を明確にした状態で、通知を行うことが可能です。

例として「Total SQL Wait Rime for a Single Wait:単一のイベントによる待ち時間の合計」のアラート設定を行います。

アラートの名前や間隔、対象のインスタンス、イベントの種類、閾値を設定します。

イベントの種類はたくさんありますが、Searchボタンから一覧が表示されますので、今回はその中からSelect文の待ち時間を選択します。

この設定を保存しますと、下のようにアラート画面に追加されます。

実際のアラート通知は下のようなメールが送られてきます。

タグ: ,

DPA(Ignite)のアラート設定について

igniteのアラート設定は3つのカテゴリーに分かれています。

・Wait Time Alerts
SQL文などの処理にどれだけ時間がかかったを計測してアラートを通知します。

・Administrator Alerts
データベースインスタンスなどの設定変更や空き容量の低下、エラー出力にあわせてアラートを通知します。

・Custom Alerts
SQLやプロシージャの実行結果からアラートを通知します。

・アラートの通知先について
設定したアラートの通知は作成したContactに対して行います。Contactの種類としてはメールもしくはSNMPを通知先として作成、グループわけすることが可能です。

メールのContact作成画面

SNMPのコンタクト作成画面

 

 

DPA(Ignite)のアラート設定について はコメントを受け付けていません -->

SQL チューニングに役立つコスト情報の表示【DPA:データベースパフォーマンスのモニタ・分析ソリューション】

統計情報を元にして行われるコストベースのチューニングを行う際に、Igniteを用いることで効率的にチューニングが可能です。

各クエリの実行にかかった時間を表すグラフから問題となっているクエリを選択します。

クエリの詳細が表示されます。

ここでPlanタブから実行計画の情報を得ることが可能です。Oracleでは以下のように

SQL Serverでは以下のように表示されます。

またOracleでは現在のコストを再計算させることや、実際にSQLに変更を加えた場合にどのようなコストになるか計算を行うことも可能です。

この場合はSQL Textに変更を入力し、Live Planを行うことで計算が行われます。

GoからLive Planを開始、ユーザを選択して実行します。

このように、現在の計画が表示されます。

タグ: , ,

DBレプリケーションツールDBMotoはWindows 8とWindows Server 2012を正式サポートします

DBMotoは先日一般販売を開始したWindows 8、及びWindows Server 2012を正式サポートします。

ただし、DBMotoは.NET Framework 2.0 SP2上で動作するアプリケーションです。
Windows 8とWindows Server 2012はデフォルトで.NET Framework 2.0 が有効になっていないため、DBMotoインストール前に予め有効にしておく必要があります。

●Windows 8で.NET Framework 2.0(3.5)を有効にする方法

コントロールパネル→プログラム→「Windowsの機能の有効化または無効化」から.NET Framework 3.5にチェックを入れます。

●Windows Server 2012で.NET Framework 2.0(3.5)を有効にする方法

サーバマネージャー・ダッシュボード→「2. 役割と機能の追加」から.NET Framework 3.5にチェックを入れます。

Windows 8でDBMoto管理ツールManagemet Centerを開いた画面です。

タグ: ,