當 DBCA 無法使用、或需徹底清除殘留實例時,手動刪除資料庫是 DBA 必備技能。本文提供標準化、可驗證的操作流程,分為「檔案系統」與「ASM 儲存」兩大場景,涵蓋停止服務、清理檔案、修改配置的完整步驟。
$ lsnrctl stop LISTENER_NAME
$ emctl stop dbconsole
SQL> SELECT status, name FROM v$controlfile; -- 控制檔
SQL> SELECT * FROM v$dbfile; -- 資料檔
SQL> SELECT * FROM v$logfile; -- 重做日誌檔
SQL> ARCHIVE LOG LIST; -- 歸檔資訊
SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT EXCLUSIVE RESTRICT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> DROP DATABASE;
SQL> EXIT
DROP DATABASE 會刪除控制檔、資料檔、重做日誌檔、線上日誌、臨時檔,並更新控制檔記錄。若啟用 OMF,相關檔案亦會自動清除。
$ echo $ORACLE_SID
$ rm -rf $ORACLE_BASE/admin/$ORACLE_SID
$ rm -rf $ORACLE_BASE/oradata/$ORACLE_SID # 依步驟2查詢路徑補刪
$ rm -rf $ORACLE_BASE/arch/$ORACLE_SID # 歸檔目的地
$ rm -rf $ORACLE_BASE/flash_recovery_area/$ORACLE_SID
$ rm -rf $ORACLE_HOME/dbs/*$ORACLE_SID* # 參數檔、密碼檔等
$ rm -f $TNS_ADMIN/*.ora # 若設定 TNS_ADMIN
$ rm -f $ORACLE_HOME/network/admin/*.ora
$ vi /etc/oratab # 移除實例條目
$ vi ~/.bash_profile # 移除環境變數設定
ASM 環境下,資料檔、控制檔、日誌檔、參數檔均儲於 ASM 磁碟組,需在 ASM 實例額外清理。
SQL> DROP DATABASE; EXIT
$ export ORACLE_SID=+ASM
$ sqlplus / as sysdba
方式 A:SQL 指令
SQL> SELECT name, file_number, group_number, file_incarnation FROM v$asm_alias;
SQL> ALTER DISKGROUP DG1 DROP DIRECTORY '+DG1/asmdb/file_name';
SQL> ALTER DISKGROUP REV DROP DIRECTORY '+REV/asmdb/file_name';
SQL> SELECT name, file_number, group_number, file_incarnation FROM v$asm_alias; -- 驗證
方式 B:ASMCMD 命令列 (推薦,直觀)
$ asmcmd
ASMCMD> ls -l
ASMCMD> cd +DG1
ASMCMD> ls
ASMCMD> rm -rf ASMDB
ASMCMD> cd +REV
ASMCMD> rm -rf ASMDB
ASMCMD> ls -s # 確認空間釋放
$ORACLE_BASE/admin/$ORACLE_SID、$ORACLE_HOME/dbs/*$ORACLE_SID*/etc/oratab、~/.bash_profile/etc/oratab 無殘留條目ls -s 確認)ALTER DATABASE DATAFILE ... OFFLINE DROP 方式修復後再 DROP TABLESPACE。