バックグラウンド
前述のように、スキーマは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権限があるためです。したがって、データベースを再起動する方法を使用して、すべてのユーザーのリンクを切断することもできます(即時シャットダウン、起動オープン)