ソフトウェアをインストールするとき、データベースを初期化するには、多くの場合、複数の実行が必要になります。 .sql ファイルであり、番号順に指定する必要があります。手動で 1 つずつ実行すると時間がかかり、リークが発生しやすくなります。著者はここで、カプセル化のアイデアを共有しています。まずマスター制御スクリプトを生成し、次にそれをデータベースに与えてすぐに実行します。
01 |まずディレクトリ内のファイルを確認します
通常、複数の初期化ディレクトリがあります .sqlファイル名には、次のように先頭に数字が付きます。
$ ls -lrth
total 92K
-rw-r--r-- 1 oracle oinstall 2.1K Oct 15 17:35 999-security-context.md
-rw-r--r-- 1 oracle oinstall 825 Oct 15 17:35 400-rdf-network.sql
-rw-r--r-- 1 oracle oinstall 8.9K Oct 15 17:35 310-rdf-ontology.sql
-rw-r--r-- 1 oracle oinstall 46K Oct 15 17:35 300-data.sql
-rw-r--r-- 1 oracle oinstall 3.3K Oct 15 17:35 200-changes.sql
-rw-r--r-- 1 oracle oinstall 13K Oct 15 17:35 100-dbobjects.sql
数値プレフィックスは実行順序の基礎となります。から 100 到着 400 それらを一つずつ実行するだけです。
02 |マスター制御スクリプトを生成する
中心となるアプローチは、ループを使用してそれぞれをループすることです。 .sql 一つ作ってください run_all.sqlエラー終了、エコー、タイミングなどの設定を追加します。
echo "-- ========================================"
echo "-- Auto-generated Oracle Deployment Script"
echo "-- ========================================"
echo "WHENEVER SQLERROR EXIT SQL.CODE;"
echo "SET ECHO ON;"
echo "SET TIMING ON;"
echo ""
# 获取所有 sql,按版本号排序,并排除 run_all.sql 自身
for f in $(printf '%s\n' *.sql > run_all.sql
生成後、これらを入力します .sql ファイルが置かれているディレクトリ (@@ 現在の作業ディレクトリを基準にして解決されます)、対応するアクセス許可を持つデータベース ユーザーに接続して、実行します。 run_all.sql。スクリプトが設定されています WHENEVER SQLERROR EXIT SQL.CODEエラーを報告するステートメントはすぐに終了します。現時点では、失敗したスクリプトを再実行する前に、トラブルシューティングを行って修復する必要があります。運用環境で使用する前に、テスト環境で検証することをお勧めします。
03 |なぜこれが機能するのか
鍵は次の 2 点にあります。
sort -Vバージョン番号で並べ替え、100、200、300このような数値接頭辞は自然に整列することができ、文字列のソートのずれは発生しません。grep -v '^run_all\.sql$'正確なカリングrun_all.sql自体。生成された対象ファイルも同じディレクトリにあるため、除外しないと繰り返し生成中に再度リストに書き込まれ、自己参照が発生します。
このようにして、生成コマンドを何度実行しても、制御スクリプトにはビジネスのみが含まれます。 .sql ファイルはそれ自体を参照しません。ただし、スクリプトを繰り返し実行できることは保証されません。初期化 SQL が冪等でない場合、繰り返し実行するとデータの重複やエラー報告が発生する可能性があります。実稼働環境でスクリプトを実行する前に、スクリプトをバックアップして冪等性を確認する必要があります。
私に従ってAIと一緒に成長してください~