【Script】使用PL/SQL快速清理當前使用者下所有資料庫物件
我們在平時的應用開發及資料庫環境準備的過程中,經常會遇到清理當前使用者下資料庫物件的需求,以便滿足資料庫環境準備。
本文給出一種使用PL/SQL實現清理當前使用者下資料庫物件的方法。
【提別提醒】:由於指令碼中涉及到DROP這種危險的DDL命令,千萬不要在生產環境及系統使用者(SYSTEM及SYS使用者等)下進行嘗試!
1.環境準備
這裡模擬建立表、檢視以及同名。
sec@ora11g> create table t1 (x int);
Table created.
sec@ora11g> create table t2 (x int);
Table created.
sec@ora11g> create view v_t1 as select * from t1;
View created.
sec@ora11g> create view v_t2 as select * from t2;
View created.
sec@ora11g> create synonym syn_t1 for t1;
Synonym created.
sec@ora11g> create synonym syn_t2 for t2;
Synonym created.
sec@ora11g> select OBJECT_NAME,OBJECT_TYPE from obj order by CREATED;
OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
T1 TABLE
T2 TABLE
V_T1 VIEW
V_T2 VIEW
SYN_T1 SYNONYM
SYN_T2 SYNONYM
6 rows selected.
OK,具有三種資料庫物件的sec使用者準備完畢,此處為每一種資料庫物件建立了多個。
2.準備清理當前使用者資料庫物件的PL/SQL指令碼
由於指令碼結構和內容均比較簡單,不進行註釋。具體指令碼內容如下。
DECLARE
CURSOR l_tables IS
select table_name from user_tables;
CURSOR l_views IS
select view_name from user_views;
CURSOR l_synonyms IS
select synonym_name from user_synonyms;
BEGIN
-- drop tables
FOR rec_tables IN l_tables LOOP
dbms_output.put_line('Dropping table ' || rec_tables.table_name );
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE ' || rec_tables.table_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop table ' || rec_tables.table_name);
END;
END LOOP;
-- drop views
FOR rec_views IN l_views LOOP
dbms_output.put_line('Dropping view ' || rec_views.view_name);
BEGIN
EXECUTE IMMEDIATE 'DROP VIEW ' || rec_views.view_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop view ' || rec_views.view_name);
END;
END LOOP;
-- drop synonyms
FOR rec_synonyms IN l_synonyms LOOP
dbms_output.put_line('Dropping synonym ' || rec_synonyms.synonym_name);
BEGIN
EXECUTE IMMEDIATE 'DROP SYNONYM ' || rec_synonyms.synonym_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop synonym ' || rec_synonyms.synonym_name);
END;
END LOOP;
END;
/
3.執行效果驗證
1)執行指令碼過程中的輸出資訊
Dropping table T1
Dropping table T2
Dropping view V_T1
Dropping view V_T2
Dropping synonym SYN_T1
Dropping synonym SYN_T2
PL/SQL procedure successfully completed.
如果在刪除的過程中出現問題,這裡也會給出簡單的報錯提示。
2)測試指令碼執行效果
sec@ora11g> select OBJECT_NAME,OBJECT_TYPE from obj order by CREATED;
no rows selected
可見,當前sec使用者下的表、檢視以及同名清理完畢。
4.小結
這裡給出的僅僅是刪除當前使用者下表、檢視以及同名的PL/SQL指令碼。根據具體的環境,可以按照指令碼的結構自行定製。
滿足實際需求的指令碼才是有價值的,毫無目的性的指令碼編寫皆為虛無!
Good luck.
secooler
11.03.20
-- The End --
本文給出一種使用PL/SQL實現清理當前使用者下資料庫物件的方法。
【提別提醒】:由於指令碼中涉及到DROP這種危險的DDL命令,千萬不要在生產環境及系統使用者(SYSTEM及SYS使用者等)下進行嘗試!
1.環境準備
這裡模擬建立表、檢視以及同名。
sec@ora11g> create table t1 (x int);
Table created.
sec@ora11g> create table t2 (x int);
Table created.
sec@ora11g> create view v_t1 as select * from t1;
View created.
sec@ora11g> create view v_t2 as select * from t2;
View created.
sec@ora11g> create synonym syn_t1 for t1;
Synonym created.
sec@ora11g> create synonym syn_t2 for t2;
Synonym created.
sec@ora11g> select OBJECT_NAME,OBJECT_TYPE from obj order by CREATED;
OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
T1 TABLE
T2 TABLE
V_T1 VIEW
V_T2 VIEW
SYN_T1 SYNONYM
SYN_T2 SYNONYM
6 rows selected.
OK,具有三種資料庫物件的sec使用者準備完畢,此處為每一種資料庫物件建立了多個。
2.準備清理當前使用者資料庫物件的PL/SQL指令碼
由於指令碼結構和內容均比較簡單,不進行註釋。具體指令碼內容如下。
DECLARE
CURSOR l_tables IS
select table_name from user_tables;
CURSOR l_views IS
select view_name from user_views;
CURSOR l_synonyms IS
select synonym_name from user_synonyms;
BEGIN
-- drop tables
FOR rec_tables IN l_tables LOOP
dbms_output.put_line('Dropping table ' || rec_tables.table_name );
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE ' || rec_tables.table_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop table ' || rec_tables.table_name);
END;
END LOOP;
-- drop views
FOR rec_views IN l_views LOOP
dbms_output.put_line('Dropping view ' || rec_views.view_name);
BEGIN
EXECUTE IMMEDIATE 'DROP VIEW ' || rec_views.view_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop view ' || rec_views.view_name);
END;
END LOOP;
-- drop synonyms
FOR rec_synonyms IN l_synonyms LOOP
dbms_output.put_line('Dropping synonym ' || rec_synonyms.synonym_name);
BEGIN
EXECUTE IMMEDIATE 'DROP SYNONYM ' || rec_synonyms.synonym_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop synonym ' || rec_synonyms.synonym_name);
END;
END LOOP;
END;
/
3.執行效果驗證
1)執行指令碼過程中的輸出資訊
Dropping table T1
Dropping table T2
Dropping view V_T1
Dropping view V_T2
Dropping synonym SYN_T1
Dropping synonym SYN_T2
PL/SQL procedure successfully completed.
如果在刪除的過程中出現問題,這裡也會給出簡單的報錯提示。
2)測試指令碼執行效果
sec@ora11g> select OBJECT_NAME,OBJECT_TYPE from obj order by CREATED;
no rows selected
可見,當前sec使用者下的表、檢視以及同名清理完畢。
4.小結
這裡給出的僅僅是刪除當前使用者下表、檢視以及同名的PL/SQL指令碼。根據具體的環境,可以按照指令碼的結構自行定製。
滿足實際需求的指令碼才是有價值的,毫無目的性的指令碼編寫皆為虛無!
Good luck.
secooler
11.03.20
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-690110/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【指令碼】快速獲得當前使用者下“暫忘”的資料庫物件資訊指令碼資料庫物件
- Oracle查詢當前使用者和當前使用者下的所有表Oracle
- sql 查詢當前使用者所有表的容量SQL
- 【SCRIPTS】快速清理Schema中所有表和序列的PL/SQL指令碼SQL指令碼
- 刪除當前資料庫連線使用者資料庫
- 清除使用者下所有的資料(清庫)
- 使用當前使用者的資料庫鏈的實現資料庫
- 如何快速定位當前資料庫消耗 CPU 最高的 sql 語句?資料庫SQL
- ORACLE刪除當前使用者下所有的表的方法Oracle
- 【SQL】【指令碼】遷移當前使用者下所有表和索引到新表空間SQL指令碼索引
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 【analyze】使用PL/SQL 方法完成多使用者資料分析SQL
- sql查詢當前使用者所有表、欄位及相關注釋資訊SQL
- 版本影響當前使用者看到的物件物件
- FlashText:語料庫資料快速清理利器
- SQL:清空資料庫所有資料SQL資料庫
- 刪除使用者及使用者下的所有資料
- [script]P_CHECK_BLACK.sql 檢查當前使用者下是否有varchar2欄位的末尾包含空格SQL
- 查詢當前資料庫名、使用者名稱、資料庫伺服器IP、埠、資料庫版本資訊。資料庫伺服器
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-使用者定義的PL/SQL子型別SQL資料型別
- 使用者介面設計--系統的當前物件物件
- MySQL檢視當前資料庫庫MySql資料庫
- 工作經驗: linux 壓縮當前資料夾下所有檔案Linux
- 刪除一個使用者下所有的物件物件
- SQL Server無法刪除資料庫 "xxx",因為該資料庫當前正在使用(如何刪除一個Sql Server資料庫)SQLServer資料庫
- 使用者清理及使用者資料遷移
- 刪除資料庫所有使用者表(SqlServer)資料庫SQLServer
- MySQL查詢當前資料庫中所有記錄不為空的表MySql資料庫
- 【轉】檢視Oracle當前使用者下的資訊Oracle
- SQL刪除資料庫裡所有表的外來鍵,同時刪除所有使用者表SQL資料庫
- indexedDB 刪除物件倉庫所有資料Index物件
- oracle檢視當前使用者下所有外來鍵、主鍵、索引、sequence的建立語句Oracle索引
- 使用instantclient和PL/SQL連線oracle遠端資料庫clientSQLOracle資料庫
- 匯出當前域內所有使用者hash的技術整理
- ORACLE資料庫物件與使用者管理(轉)Oracle資料庫物件
- PL/SQL使用匿名塊處理資料SQL
- Oracl資料庫+PL/SQL安裝與配置資料庫SQL
- 刪除sql server資料庫中所有資料SQLServer資料庫