資料庫管理員(DBA)每天面對大量重複指令,將驗證過的命令封裝成腳本檔(.sql),不僅能減少輸入錯誤、提升效率,更能建立可重複、可版控的作業知識庫。本文分享從建立到維護的完整流程。
流程:外部編輯器撰寫 → 複製貼上到 SQL*Plus 測試 → 通過後存檔為 xxx.sql(副檔名必須為 .sql,SQL*Plus 才能直接 @xxx 呼叫)。
/ 結尾,告知 SQL*Plus 執行緩衝區指令。; 結尾,否則 / 會重複執行導致錯誤。&1, &2... 表示,執行時依序代入;無需預先宣告。backup_table.sql-- backup_table.sql
-- 用法: @backup_table 來源表 目標表
CREATE TABLE &2 AS SELECT * FROM &1
/
執行:SQL> @backup_table emp emp_bak_20240101
EDIT filename 呼叫外部編輯器修改。/、避免誤刪、確認編碼為 UTF-8。ACCEPT confirm CHAR PROMPT '確定要刪除 &1 表嗎? (Y/N): '
BEGIN
IF UPPER('&confirm') = 'Y' THEN
EXECUTE IMMEDIATE 'DROP TABLE &1 PURGE';
END IF;
END;
/
SPOOL backup_&1._&_DATE..log
-- 實際操作
SPOOL OFF
DECLARE
v_cnt NUMBER;
BEGIN
SELECT COUNT(*) INTO v_cnt FROM user_tables WHERE table_name = UPPER('&1');
IF v_cnt = 0 THEN
DBMS_OUTPUT.PUT_LINE('表 &1 不存在');
ELSE
EXECUTE IMMEDIATE 'TRUNCATE TABLE &1';
END IF;
END;
/
「筆者已累積近百支腳本,涵蓋備份、效能收集、物件重建、權限稽核等。記事本(Notepad)配合 SQL*Plus 測試,輕量且足夠應付 90% 場景。關鍵在於每支腳本上線前必須實測,未測試的腳本就是定時炸彈。」
.sql/、無多餘 ;&n 形式