OracleDBエントリ4:指定されたスキーマのすべての内容を削除します

バックグラウンド

    前述のように、スキーマはORACLEデータベースユーザーが所有するデータベースオブジェクトのコレクションです。プロジェクトオブジェクトには、テーブル、ビュー、シーケンス、ストアドプロシージャ、シノニム、インデックス、クラスター、データベースリンクなどの構造が含まれます通常、プログラムオブジェクトには、データベース内のアプリケーションによって作成されたすべてのコンテンツが含まれます。具体的には、ORACLEユーザーはスキーマに対応します。

詳細な手順

次の内容のSQLスクリプト(drop_schema.sql)ファイルを作成します

set define on
set serveroutput on
connect / as sysdba

define schema = &1

-- Kill Session connecting to the schemas to be dropped
Declare
    Cursor c_session Is
    SELECT s.sid, s.serial# FROM gv$session s
      JOIN gv$process p ON p.addr = s.paddr  AND p.inst_id = s.inst_id
      WHERE s.type != 'BACKGROUND' AND s.username = '&schema';
Begin
    For r_session In c_session Loop
         Execute Immediate 'ALTER SYSTEM KILL SESSION '''||r_session.sid||','||r_session.serial#||'''';
    End Loop;
End;
/

-- Drop schemas
Drop User &schema Cascade;

set define off
exit

SQLスクリプトの実行権限を追加します

chmod +x drop_schema.sql 

SQLスクリプトを実行する

$sqlplus /nolog 
SQL> @drop_schema.sql

結果

                 

ソースコードの説明

  • セット定義のオン/オフ

変数関数を開く/置換します。

  • serveroutputをオンに設定します

サーバーの出力情報をウィンドウに表示します。

  • 宣言…開始…終了

宣言または開始キーワードで始まる匿名ブロックは、匿名ブロックと呼ばれます。使用するたびにコンパイルする必要があり、データベースに格納したり、他のPL / SQLから呼び出すことはできません。ここでは、begin ... endステートメントブロックを使用して、指定したスキーマ(ユーザー)のすべてのリンクを切断します。リンクを切断しないと、ユーザーXXXカスケードを直接ドロップしたときにエラーが発生する可能性があります。

  • 「/」バックスラッシュ

スラッシュは、サーバーに以前に記述されたSQLスクリプトを実行させることです。通常のselectステートメントの場合、セミコロンを実行できます。ただし、ストアドプロシージャの場合、セミコロンが検出された場合、すぐに実行することはできません。このとき、スラッシュ(/)で実行する必要があります。

  • ユーザーXXXカスケードを削除します

ユーザーの下のすべてのコンテンツを削除します(スキーマ)

展開

 もちろん、スクリプトのメインコマンドは drop user XXX Cascadeです。これは、ユーザーのdba権限があるためです。したがって、データベースを再起動する方法を使用して、すべてのユーザーのリンクを切断することもできます(即時シャットダウン、起動オープン)

おすすめ

転載: blog.csdn.net/zhaogang1993/article/details/89502277