Oracleデプロイスクリプトを環境に依存しないようにする

バージョン管理システム(CVS、SVN、TFSなど)にデータベーススキーマのソースコードを保存し、デプロイスクリプトを維持することの必要性と利点について、正しい記事がまだ1つも書かれていません。

繰り返しはしませんが、このプロセスの特定の側面の1つを分析します。



通常設定される開発プロセスが、開発自体(Dev)、内部テスト(QA)、エンドユーザーによる受け入れテスト(UAT)、および直接本番で構成されることは秘密ではありません。 ライフサイクルの詳細は個々のケースで異なる場合がありますが、これは記事のトピックにとって不可欠ではありません。



時々(そしてしばしば著者の経験上)、このサイクルのさまざまな段階が行われる環境が何らかの理由で異なる場合があります。 違いは何でもかまいません。 さまざまなテーブルスペースから、スキーマ名、DBLink、およびその他の個々の機能の違いまで。 この問題を効果的に解決する方法については、この記事で検討します。







画像



メインのdeploy.sqlスクリプト(データベースのソースオブジェクトを使用して他のスクリプトを直接呼び出す)の隣に、個々のパラメーターのセット(define-s)を持つ各環境のファイルのセットが格納されるフォルダーを配置します。



DEFINE DATA_TS = DEV_DATA_TS DEFINE INDEX_TS = DEV_DATA_TS DEFINE Some_Source_data_dbl = Dev_dbl_source.world -- ...  ..
      
      







環境ごとに、彼は自分のものになります。

さらに、データベースのソースコードでは、次のような置換変数を使用するだけです。



  create table my_table (sample_col VarChar(2 char) ) tablespace &DATA_TS; .... select * from dual@&Some_Source_data_dbl;
      
      







したがって、スクリプトは環境に無関心であり、テスト環境で作業したことで、たとえばUATでも確実に機能する、と自信を持って言えます。 その結果、特定の環境ごとにソースコードを自分で変更することはありません。そのため、入力ミス、物忘れ、注意散漫の可能性などのヒューマンファクターのリスクがなくなります。

これのリスクは、エラーが置換パラメーターファイル自体に入り込み、環境収集を1-2-3回繰り返した後に消えます(通常、置換ファイルを差し引くことはそれほど難しくありません)。



これらのすべてのスクリプトを正しい順序で正しく呼び出し、さらなるサポートのための頭痛を最小限に抑えることだけが残っています。 ここでは、一見したところ、これらの設定ファイルに名前を付ける方法という小さな質問が入ります。 以前はそのように呼んでいました。



dev.sql

qa.sql

uat.sql

prod.sql



しかし、今ではこのプラクティスを放棄し、環境のTNS名で呼び出しています。

それは何を与えますか? この種類の.shスクリプトがあります(本質のみを残します)。



  # ...     , help,      par_file = ${3//.WORLD/} sqlplus $1/$2@$3 @deploy.sql $par_file # ...     
      
      







スクリプト入力には、ログイン、パスワード、TNSエイリアスの3つのパラメーターがあります(この簡略バージョンでは、回路が1つしかない場合)。 多くの処方を考えると



names.default_domain = world



次に、すべてを単一の形式にします(この場合、表示される可能性のある".WORLD"を切り取ります)。 その結果、呼び出す必要があるパラメーターファイル名は(TNSaliasという名前で)残ります。



完全を期すためにdeploy.sql自体の例を記述することは残っています。



  --    spool _deploy.log --       --  par_file    : @./defines/&1 @../ddl/some_table_create.sql @../data/some_other_deploy_activity.sql @./validate_invalid_objects.sql @./run_post_deployment_checks.sql spool off exit
      
      







同様の標準を開発プロセスに導入することで、環境の違いを完全に忘れることになります。これは、展開時の最後の瞬間の「頭痛」を大幅に軽減します。



PS:何年もデータベースを使って習得したスキルとベストプラクティスをhabrosocietyと共有したいと思います。 私が遭遇したさまざまな興味深い、私の意見、ケース、タスク、および落とし穴の分析を含む例に基づいた一連の短い記事を開きたいと思います。



All Articles