【Oracle】如何使用DBCA工具删除数据库?
删除前的检查确认
在删除数据库之前,建议确认当前数据库的状态和相关信息,尤其是备份。
检查数据库状态
确认要删除的数据库状态
SQL> select DBID,NAME,OPEN_MODE,CDB,LOG_MODE,DATABASE_ROLE from v$database;DBID NAME OPEN_MODE CDB LOG_MODE DATABASE_ROLE
---------- --------- -------------------- --- ------------ ----------------
2497874632 TEST READ WRITE NO NOARCHIVELOG PRIMARY
检查连接会话
确保无活动业务连接。
SELECT sid, serial#, username, program FROM v$session WHERE type='USER';
检查数据库备份
删除数据库前一定要进行备份并确认备份有效性。
非归档模式(NOARCHIVELOG)备份
将数据库置于mount状态后使用rman工具进行全量备份(冷备)
#将即将要删除的数据库置于mount状态
[oracle@oracle19c_db ~]$ export ORACLE_SID=test
[oracle@oracle19c_db ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Tue Apr 29 21:46:01 2025
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle. All rights reserved.Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0#状态检查
SQL> select DBID,NAME,OPEN_MODE,CDB,LOG_MODE,DATABASE_ROLE from v$database;DBID NAME OPEN_MODE CDB LOG_MODE DATABASE_ROLE
---------- --------- -------------------- --- ------------ ----------------
2497874632 TEST READ WRITE NO NOARCHIVELOG PRIMARYSQL>
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup mount;
ORACLE instance started.Total System Global Area 1.0033E+10 bytes
Fixed Size 12445784 bytes
Variable Size 1543503872 bytes
Database Buffers 8455716864 bytes
Redo Buffers 21106688 bytes
Database mounted.#状态检查,确认实例处于MOUNTED状态
SQL> select DBID,NAME,OPEN_MODE,CDB,LOG_MODE,DATABASE_ROLE from v$database;DBID NAME OPEN_MODE CDB LOG_MODE DATABASE_ROLE
---------- --------- -------------------- --- ------------ ----------------
2497874632 TEST MOUNTED NO NOARCHIVELOG PRIMARYSQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0#使用rman进行全量备份(冷备)
[oracle@oracle19c_db ~]$ rman target /Recovery Manager: Release 19.0.0.0.0 - Production on Tue Apr 29 21:48:44 2025
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.connected to target database: TEST (DBID=2497874632, not open)RMAN> BACKUP DATABASE; Starting backup at 29-APR-25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=7 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/dbdata/oradata/TEST/datafile/o1_mf_system_n1182zw8_.dbf
input datafile file number=00003 name=/dbdata/oradata/TEST/datafile/o1_mf_sysaux_n1184dst_.dbf
input datafile file number=00004 name=/dbdata/oradata/TEST/datafile/o1_mf_undotbs1_n1184vsh_.dbf
input datafile file number=00007 name=/dbdata/oradata/TEST/datafile/o1_mf_users_n1184wvc_.dbf
channel ORA_DISK_1: starting piece 1 at 29-APR-25
channel ORA_DISK_1: finished piece 1 at 29-APR-25
piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_29/o1_mf_nnndf_TAG20250429T214920_n11p709m_.bkp tag=TAG20250429T214920 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:05
Finished backup at 29-APR-25Starting Control File and SPFILE Autobackup at 29-APR-25
piece handle=/dbdata/fast_recovery_area/TEST/autobackup/2025_04_29/o1_mf_s_1199742455_n11p920g_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 29-APR-25RMAN>
归档模式(ARCHIVELOG)下备份(热备)
[oracle@oracle19c_db ~]$ export ORACLE_SID=test
[oracle@oracle19c_db ~]$ rman target /Recovery Manager: Release 19.0.0.0.0 - Production on Wed Apr 30 16:51:46 2025
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.connected to target database: TEST (DBID=2497874632)RMAN> # 全量备份数据库 + 归档日志(热备)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;Starting backup at 30-APR-25
current log archived
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=254 device type=DISK
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=6 RECID=1 STAMP=1199811122
channel ORA_DISK_1: starting piece 1 at 30-APR-25
channel ORA_DISK_1: finished piece 1 at 30-APR-25
piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_annnn_TAG20250430T165203_n13s5m5o_.bkp tag=TAG20250430T165203 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 30-APR-25Starting backup at 30-APR-25
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/dbdata/oradata/TEST/datafile/o1_mf_system_n1182zw8_.dbf
input datafile file number=00003 name=/dbdata/oradata/TEST/datafile/o1_mf_sysaux_n1184dst_.dbf
input datafile file number=00004 name=/dbdata/oradata/TEST/datafile/o1_mf_undotbs1_n1184vsh_.dbf
input datafile file number=00007 name=/dbdata/oradata/TEST/datafile/o1_mf_users_n1184wvc_.dbf
channel ORA_DISK_1: starting piece 1 at 30-APR-25
channel ORA_DISK_1: finished piece 1 at 30-APR-25
piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_nnndf_TAG20250430T165204_n13s5nw5_.bkp tag=TAG20250430T165204 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
Finished backup at 30-APR-25Starting backup at 30-APR-25
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=7 RECID=2 STAMP=1199811150
channel ORA_DISK_1: starting piece 1 at 30-APR-25
channel ORA_DISK_1: finished piece 1 at 30-APR-25
piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_annnn_TAG20250430T165230_n13s6g48_.bkp tag=TAG20250430T165230 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 30-APR-25Starting Control File and SPFILE Autobackup at 30-APR-25
piece handle=/dbdata/fast_recovery_area/TEST/autobackup/2025_04_30/o1_mf_s_1199811151_n13s6h83_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 30-APR-25
备份后验证备份可用性
#列出所有备份集信息
RMAN> LIST BACKUP SUMMARY;List of Backups
===============
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
......
5 B A A DISK 30-APR-25 1 1 NO TAG20250430T165203
6 B F A DISK 30-APR-25 1 1 NO TAG20250430T165204
7 B A A DISK 30-APR-25 1 1 NO TAG20250430T165230
8 B F A DISK 30-APR-25 1 1 NO TAG20250430T165231#验证备份完整性
RMAN> VALIDATE BACKUPSET 5; Starting validate at 30-APR-25
using channel ORA_DISK_1
channel ORA_DISK_1: starting validation of archived log backup set
channel ORA_DISK_1: reading from backup piece /dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_annnn_TAG20250430T165203_n13s5m5o_.bkp
channel ORA_DISK_1: piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_annnn_TAG20250430T165203_n13s5m5o_.bkp tag=TAG20250430T165203
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
Finished validate at 30-APR-25#验证数据库文件可恢复
RMAN> RESTORE DATABASE VALIDATE;Starting restore at 30-APR-25
using channel ORA_DISK_1channel ORA_DISK_1: starting validation of datafile backup set
channel ORA_DISK_1: reading from backup piece /dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_nnndf_TAG20250430T165204_n13s5nw5_.bkp
channel ORA_DISK_1: piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_nnndf_TAG20250430T165204_n13s5nw5_.bkp tag=TAG20250430T165204
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: validation complete, elapsed time: 00:00:02
Finished restore at 30-APR-25#验证所有归档日志可恢复
RMAN> RESTORE ARCHIVELOG ALL VALIDATE; Starting restore at 30-APR-25
using channel ORA_DISK_1channel ORA_DISK_1: scanning archived log /dbdata/fast_recovery_area/TEST/archivelog/2025_04_30/o1_mf_1_6_n13s5ls6_.arc
channel ORA_DISK_1: scanning archived log /dbdata/fast_recovery_area/TEST/archivelog/2025_04_30/o1_mf_1_7_n13s6g2k_.arc
Finished restore at 30-APR-25#检查备份元数据一致性
RMAN> CROSSCHECK BACKUP; using channel ORA_DISK_1
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_annnn_TAG20250430T165203_n13s5m5o_.bkp RECID=5 STAMP=1199811123
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_nnndf_TAG20250430T165204_n13s5nw5_.bkp RECID=6 STAMP=1199811124
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/dbdata/fast_recovery_area/TEST/backupset/2025_04_30/o1_mf_annnn_TAG20250430T165230_n13s6g48_.bkp RECID=7 STAMP=1199811150
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/dbdata/fast_recovery_area/TEST/autobackup/2025_04_30/o1_mf_s_1199811151_n13s6h83_.bkp RECID=8 STAMP=1199811151
Crosschecked 8 objectsRMAN>
关键命令总结
操作 | 命令 | 用途 |
---|---|---|
列出备份 | LIST BACKUP SUMMARY; | 查看备份集编号和状态 |
验证物理完整性 | VALIDATE BACKUPSET <BS Key>; | 检查备份文件是否可读 |
验证逻辑一致性 | RESTORE DATABASE VALIDATE; | 模拟恢复流程,检查数据块有效性 |
检查备份元数据 | CROSSCHECK BACKUP; | 确认备份文件未被删除或损坏 |
实际恢复测试 | RESTORE DATABASE; RECOVER DATABASE; | 在测试环境验证备份可用性 |
检查数据文件位置
查询所有数据文件的位置,以便稍后确认已删除数据库的相关文件是否已被清理。
SELECT name FROM v$controlfile
UNION ALL
SELECT name FROM v$datafile
UNION ALL
SELECT name FROM v$tempfile
UNION ALL
SELECT name FROM v$recovery_file_dest
UNION ALL
SELECT member FROM v$logfile;
停止数据库实例(可选)
以 SYSDBA
身份连接到数据库,并执行以下命令关闭要删除的数据库:
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
EXIT;
说明:
实验发现在关闭数据库实例的情况下使用
dbca
工具删除数据库,如果是图形化方式删除,相关的控制文件、数据文件、日志文件等会被全部清理,但如果是静默命令行模式,则并没有删除所有数据库文件(如数据文件、控制文件等),静默命令行模式删除有类似如下警告信息:
[WARNING] [DBT-11503] The instance (TEST) is not running on the local node. This may result in partial delete of Oracle database.
CAUSE: A locally running instance is required for complete deletion of Oracle database instance and database files.
ACTION: Specify a locally running database, or execute DBCA on a node where the database instance is running.[WARNING] The data files for database with SID "TEST" could not be determined because the database could not be started. DBCA will proceed with the service deletion.
所以,生产环境中,删除前建议先关闭一段时间,确认业务没人找来,在删除时再启动实例使用 DBCA 管理工具删除
运行 DBCA 删除数据库
图形化方式删除
oracle用户下执行dbca
命令选择 Delete Database,按向导操作完成数据库删除操作。
选择要删除的数据库
确认要删除的数据库信息(包括控制文件及相关数据文件、日志文件等),确认完成,等待删除操作完成即可。
静默命令行方式删除
-deleteDatabase:
该命令将删除数据库
dbca -silent -deleteDatabase \-sourceDB TEST \ -sysDBAUserName sys \ -sysDBAPassword oracle
deleteDatabase 参数:
参数 | 必选/可选 | 描述 |
---|---|---|
-sourceDB database_name_or_sid | 必选 | Oracle RAC 数据库的唯一名称或单实例数据库的系统标识符(SID)。 |
-sysDBAUserName SYSDBA_user_name | 可选 | 拥有 SYSDBA 权限的用户名。 |
-sysDBAPassword SYSDBA_password | 可选 | SYSDBA 用户的密码。 |
-forceArchiveLogDeletion | 可选 | 指定此参数可删除数据库归档日志。 |
-deRegisterEMCloudControl | 可选 | 指定此参数及以下子参数,从 Enterprise Manager Cloud Control 注销数据库: -omsHost : Enterprise Manager 服务器主机名。 -omsPort : Enterprise Manager 服务器端口号。 -emUser : Enterprise Manager 管理员用户名。 -emPassword : Enterprise Manager 管理员密码。 |
`-unregisterWithDirService {true | false}` | 可选 |
-sid database_system_identifier | 可选 | 数据库系统标识符(SID)。 |
`-useWalletForDBCredentials {true | false}` | 可选 |
监听器及网络配置清理(如有)
清理监听器和网络配置
-
删除监听器条目(
$ORACLE_HOME/network/admin/listener.ora
):# 删除或注释以下示例内容: SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = TEST)(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)(SID_NAME = TEST))
-
重启监听器:如果重新启动监听器,确保已删除的数据库不再出现在监听器列表中
lsnrctl stop lsnrctl start
清理客户端配置
删除客户端 $ORACLE_HOME/network/admin/tnsnames.ora
中对应的条目:
# 删除或注释以下示例内容:
TEST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = oracle19c_db)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = test)))
清理 oratab
条目
编辑 /etc/oratab
文件,删除与要删除数据库相关的条目。例如:
test:/u01/app/oracle/product/19.0.0/dbhome_1:N
删除后的检查验证
确保所有文件和配置已成功删除。
检查实例进程
确认不存在已删除的数据库进程,如:ora_pmon_test
[root@oracle19c_db ~]# ps -ef | grep pmon
oracle 3884 1 0 12:52 ? 00:00:01 ora_pmon_PRODCDB
root 4498 22899 0 18:44 pts/5 00:00:00 grep --color=auto pmon
oracle 8267 1 0 13:15 ? 00:00:01 ora_pmon_orcl
检查文件系统
根据之前查询到的文件路径,确认所有与数据库相关的文件已被删除。例如:
ll /dbdata/oradata/TEST/
ll /dbdata/fast_recovery_area/TEST/
ll $ORACLE_HOME/dbs/*.ora
检查监听器状态
检查服务列表确保已删除的数据库不再出现在监听器列表中
lsnrctl status