2017-09-25 11 views
1

最近、私はdb2と協力し始め、いくつかのデータベースを作成しました。
単一のDBを削除するには、db2 drop db demoDBを使用する必要があります。一度にすべてのDBを削除する方法はありますか?db2一度だけデータベースを落とす

おかげ

+0

ありません - あまりにも多くの仕事のように見えるのでしょうか? :-) – MichaelTiefenbacher

答えて

-1

最初、私はそれを行うための任意のDB2自然の方法があるとは思いません。しかし、私は通常次のことをします。

があなたの必要性に依存

  1. db2のリストdbディレクトリ
  2. DB2リストアクティブアクティブなデータベース(すべてのDB:開始時に、あなたのインスタンス上のすべてのデータベースを参照する方法は、次のいずれかです。あるいは単にアクティブDBS)
    私は通常、すべての私のDBをドロップ()DB2のユーザーガイドで

    方法は、シェルスクリプトを使用しているより多くのDBには、あなたが得ることができる一覧表示されますがあり確信している: 1.新規に作成します。スクリプト'vi db2_drop_all.sh'などを使用してください。 2.コードを貼り付けます:ステップ2でリストを変更することができます(あなたはもちろんのインスタンスに切り替えた後)sh db2_drop_all.sh
    変更
    4.保存

    #!/bin/bash -x 
    
    for db_name in $(db2 list db directory | grep Database | \ 
           grep name | cut -d= -f2); do 
         db2 drop db $db_name || true 
    done 
    exit 0 
    

    3を、ちょうどスクリプトを実行お知らせあなたが望むようにDBの。 (たとえば、db2 list active databasesに)

    あなたのお役に立てば幸いです。 :)

+1

'list db directory'はローカルデータベースとリモートデータベースをリストするので、あなたのシステムにカタログされたリモートデータベースがあれば、このスクリプトはエラーを生成するかもしれません。理想的には、あなたのスクリプトは 'Directory entry type = Indirect'を持つデータベースだけを見つけるでしょう。 –

+1

また、' list active databases'は、データベースが非アクティブである場合、データベースを必ずしも表示するとは限りません。 – mustaccio

+0

大丈夫です。 :)私はちょうど彼にシンプルなbashスクリプトでそれを行う方法の手がかりを与えました。このスクリプトは私が数時間前に助けてくれました。 – nisanarz

0

これまでの回答を考慮に入れると、この一連の行はスクリプトを作成しなくても同じです。

db2 list db directory | tail -n +6 | sed 'N;N;N;N;N;N;N;N;N;N;N;s/\n/ /g' | awk '$28 = /Indirect/ {print "db2 drop database "$7}' | source /dev/stdin 

これは、ローカルデータベースをフィルタリングし、生成された出力を実行します。

(英語のみの環境で動作します)

+0

素晴らしい提案。 :) – nisanarz