

皆さんは,本番リリース時にどのような作業を行いますか。まっとうな開発環境であれば,本番,バックアップ,開発の3インスタンス体制になっているはずです。とすると,あなたのDBツールは,今,どのインスタンスに接続しているのでしょう。すぐに判別がつきますか。
トラブル時の緊急対応や本番リリース時の作業スケジュールが過密であったり,スケジュールが押していたりすると,ミスが一層出やすくなります。
人間はケアレスミスをする生き物なので,担当者の注意と努力では,敗戦した日本軍と変わりません。もう少し良い方法はないでしょうか。

プリファレンスの設定により接続先ごとにIDEの背景,SQL/プログラムウィンドウの背景色を自由に設定することができます。私は,本番をピンク,週次コピーを黄色,開発環境を青もしくは緑にしています。こうしておくと今自分が作業しているのはどの環境なのか決して間違えることがありません。背景がピンクだと緊張しながら作業することができます。
ただし,エディタ内でのカラー表示が見難くならないよう,背景色はできるだけ白の近似色にしておくことをお勧めします。



本番環境に適用しなければならないテーブル,ビュー,パッケージはどれでしょうか。またリリース作業完了時の確認として適用漏れがないかどうかをどのようにして判断していますか。「JSOX適用下で監視もしているし,本番環境のプログラム,テーブル類は変更されているはずはない」,と思っていると痛い目に遭います。本番環境であっても運用担当者がトラブルの臨時対応として一部のオブジェクトに修正をかけている場合があるからです。それも,JSOXに則ったワークフローを経由してです。
実際のところ,こうしたシステム変更ワークフローは情シスと業務部門責任者,それに運用担当者の中を流れるだけで,機能追加を行っている開発チームのメンバーにその内容が知らされることはないのではないでしょうか。皆さんのところはいかがですか。また,仮に知らされていたとしても,開発中に行われた変更が自分のリリースに影響していることが判別できるのは,開発の後半にさしかかった頃です。開発初期では,どれが関係しているかもわからないことでしょう。
これらのことから,リリース前に数回,そしてリリース作業完了時にもう一度,本番環境と開発環境のオブジェクトの比較が必要になります。
PL/SQL Developerにはオブジェクト比較とテーブルデータ比較の2種類のツールが提供されています。
スキーマオブジェクト比較
単にオブジェクト比較をする機能はAqua Data Studioにも備わっています。こちらもまっとうな比較ツールが実装されています。ただし,PL/SQL Developerは単に差分を表示するだけではありません。差分を同期させるためのSQLスクリプトを生成してくれます。SQL Serverの場合,SSMSにはこの機能がなく VS2008Team System Database Editionで同等のことができるとカタログ上は書いてあります。VS2010だとDB関係の説明が詳しくないのですが,Premium,Ultimate辺りに同等の機能がありそうです。

当たり前のことですが,Oracleの古いバージョンですとalter table AA drop column BBのDDLでテーブルデータがいなくなりますので,テーブル比較と差分適用についてはくれぐれもご注意ください。なお,DDLの差分ツールとしてExamDiffのフリーバージョンが同梱されています。私は,Exam Diff Proを使っています。Win Mergeに慣れているならプリファレンスでDiffツールを変更できます。
テーブルデータ比較
いくつかのDBツールに実装されている機能ですが,PL/SQL Developerにも同等の機能があります。PL/SQL Developerはオブジェクト比較と同様,同期適用のためのSQLを生成してくれます。テーブルデータ比較については,比較元,比較先双方に主キーが設定されている必要があります。ユニークキーだけでは,NGです。