ORACLE手工删除数据库
2016-04-29 22:31
585 查看
很多人习惯用ORACLE的DBCA工具创建、删除数据库,这里总结一下手工删除数据库实验的步骤,文中大量参考了乐沙弥的手动删除ORACLE数据库这篇博客的内容,当然还有Oracle官方相关文档。此处实验环境为OracleLinuxServerrelease5.7,数据库版本为10.2.0.5.0Step1:.获得控制文件、数据文件,日志文件等相关信息获取这些信息,一方面是为了后面的建库做参考,另外一个是为了验证后面一些操作,如果这些都没有必要,其实是可以可以跳过这一步的。
Step2:停止监听服务和OEM
Step3:关闭数据库实例
Step4:启动到数据库实例到mount状态
使用exclusiverestart或普通模式都可以
Step5:修改参数为允许受限的会话模式
这一步骤是必须的,否则在dropdatabase时会报ORA-01586:databasemustbemountedEXCLUSIVEandnotopenforthisoperation
Step6:使用dropdatabase命令来清除数据库
SQL>dropdatabase;
dropdatabase命令会删除控制文件和在控制文件中所列的数据文件,如果数据库正在使用spfile文件,则一并删除。
备份文件和归档日志文件不会被删除,我们可以之后通过RMAN进行删除。
如果数据库是建立在裸设备上,那么这个命令不会删除指定裸设备上的文件。
#deletesalldatabasefiles,bothASMandnon-ASM
Whenyouissuethisstatement,OracleDatabasedropsthedatabaseanddeletesallcontrolfilesanddatafileslistedinthecontrolfile.Ifthedatabaseusedaserverparameterfile(spfile),itisalsodeleted.
Archivedlogsandbackupsarenotremoved,butyoucanuseRecoveryManager(RMAN)toremovethem.Ifthedatabaseisonrawdisks,thisstatementdoesnotdeletetheactualrawdiskspecialfiles.
DROPDATABASE
TheDROPDATABASEcommanddeletesthesefilesfromoperatingsystem.
*Datafiles
*OnlineRedoLogFiles
*Controlfiles
*SPFILE(ifitexists)
TheDROPDATABASEcommanddoesnotdeletethefollowingfiles:
*init.ora(textversionoftheOracleinitializationfile)
*passwordfile
*entriesinlistenerfiles
*entriesinoratabfile
SQL>selectstatus,namefromv$controlfile;
SQL>select*fromv$dbfile;
SQL>select*fromv$logfile;
SQL>archiveloglist;
Step2:停止监听服务和OEM
$lsnrctlstop或lsnrctlstoplistener_name
[oracle@DB-Server~]$emctlstopdbconsole
TZsettoHongkong
OracleEnterpriseManager10gDatabaseControlRelease10.2.0.5.0
Copyright(c)1996,2010OracleCorporation.Allrightsreserved.
http://EGMLNX02.eel1.esquel.com:1158/em/console/aboutApplication
StoppingOracleEnterpriseManager10gDatabaseControl...
CannotdetermineOracleEnterpriseManager10gDatabaseControlprocess./u01/app/oracle/product/10.2.0/db_1/xxxxx_xxx/emctl.piddoesnotexist.
Step3:关闭数据库实例
SQL>shutdownimmediate;
Databaseclosed.
Databasedismounted.
ORACLEinstanceshutdown.
Step4:启动到数据库实例到mount状态
使用exclusiverestart或普通模式都可以
SQL>startupmountexclusiverestrict;
或
SQL>startupmount;
Step5:修改参数为允许受限的会话模式
这一步骤是必须的,否则在dropdatabase时会报ORA-01586:databasemustbemountedEXCLUSIVEandnotopenforthisoperation
SQL>altersystemenablerestrictedsession;
Step6:使用dropdatabase命令来清除数据库
SQL>dropdatabase;
dropdatabase命令会删除控制文件和在控制文件中所列的数据文件,如果数据库正在使用spfile文件,则一并删除。
备份文件和归档日志文件不会被删除,我们可以之后通过RMAN进行删除。
如果数据库是建立在裸设备上,那么这个命令不会删除指定裸设备上的文件。
#deletesalldatabasefiles,bothASMandnon-ASM
Whenyouissuethisstatement,OracleDatabasedropsthedatabaseanddeletesallcontrolfilesanddatafileslistedinthecontrolfile.Ifthedatabaseusedaserverparameterfile(spfile),itisalsodeleted.
Archivedlogsandbackupsarenotremoved,butyoucanuseRecoveryManager(RMAN)toremovethem.Ifthedatabaseisonrawdisks,thisstatementdoesnotdeletetheactualrawdiskspecialfiles.
DROPDATABASE
TheDROPDATABASEcommanddeletesthesefilesfromoperatingsystem.
*Datafiles
*OnlineRedoLogFiles
*Controlfiles
*SPFILE(ifitexists)
TheDROPDATABASEcommanddoesnotdeletethefollowingfiles:
*init.ora(textversionoftheOracleinitializationfile)
*passwordfile
*entriesinlistenerfiles
*entriesinoratabfile
其实最好是在执行dropdatabase命令时,查看alert_$ORACLE_SID的输出内容,即可有个大概的了解。在metlink上看到一个手工删除数据文件、联机重做日志、控制文件的脚本,如下所示,这个也可以作为一个参考。
SQL>SETSERVEROUTPUTON
SQL>DECLARE
TYPEstring_arrISTABLEOFVARCHAR2(1024);
file_liststring_arr;
BEGIN
SELECTt.file_pathBULKCOLLECT
INTOfile_list
FROM(SELECTNAMEfile_path
FROMV$DATAFILE
UNION
SELECTMEMBERfile_path
FROMV$LOGFILE
UNION
SELECTNAMEfile_path
FROMv$controlfile
UNION
SELECTVALUEfile_path
FROMv$parameter
WHERENAMELIKE'%dest'
UNION
SELECTVALUEfile_path
FROMv$parameter2
WHERENAME='utl_file_dir'
UNION
SELECT'$ORACLE_BASE/admin/$ORACLE_SID'file_path
FROMdual
)t;
FORiINfile_list.FIRST..file_list.LASTLOOP
DBMS_OUTPUT.PUT_LINE('rm-f'||file_list(i));
ENDLOOP;
END;
/
执行上面脚本就能得到类似下面输出的内容。当然,这个脚本必须在前面步骤之前执行。
rm-f$ORACLE_BASE/admin/$ORACLE_SID
rm-f/ORATEST/oracle/admin/bdump
rm-f/ORATEST/oracle/admin/cdump
rm-f/ORATEST/oracle/admin/udump
rm-f/ORATEST/oracle/product/10.1/rdbms/audit
rm-f/ORATEST/oradata/control01.ctl
rm-f/ORATEST/oradata/control02.ctl
rm-f/ORATEST/oradata/control03.ctl
rm-f/ORATEST/oradata/data01.dbf
rm-f/ORATEST/oradata/data02.dbf
rm-f/ORATEST/oradata/redo01.log
rm-f/ORATEST/oradata/redo02.log
rm-f/ORATEST/oradata/redo03.log
rm-f/ORATEST/oradata/sysaux01.dbf
rm-f/ORATEST/oradata/system01.dbf
rm-f/ORATEST/oradata/undotbs01.dbf
rm-f/ORATEST/oradata/users01.dbf
rm-f?/dbs/arch
Step7:手动清理相关文件
$echo$ORACLE_SID--确认当前的ORACLE_SID
$ls$ORACLE_BASE/admin/$ORACLE_SID--删除OracleBase目录下$ORACLE_SID时,先检查、确认一下
$rm-rf$ORACLE_BASE/admin/$ORACLE_SID--删除oraclebase目录下的$ORACLE_SID的所有内容
注意,任何删除前最好先检查、确认,例如下面删除归档日志,我测试的环境,没有开启归档模式,所以下面命令根本没有必要
$ls-lrt$ORACLE_BASE/arch/$ORACLE_SID
$rm-rf$ORACLE_BASE/arch/$ORACLE_SID--清除归档日志,注意归档路径的正确性
$rm-rf$ORACLE_BASE/flash_recovery_area/$ORACLE_SID--清除闪回区的内容
删除前,最好将所有的参数文件保存到另外一个目录,以免需要参考时需要
$cp$ORACLE_HOME/dbs/*/tmp/
$rm-rf$ORACLE_HOME/dbs/*$ORACLE_SID*--清除参数文件
Step8.清理监听相关文件
$rm$TNS_ADMIN/*.ora--如果设定了$TNS_ADMIN变量,否则删除默认路径下的监听文件
$rm$ORACLE_HOME/network/admin/*.ora--注意,如果动态监听可能不存在这些文件。如果不删除,重新创建同样名字数据库
--时,监听可能会有一些异常情况。
Step9.修改oratab文件以及.bash_profile
这个步骤不是必须的,是情况和需要而定。
$vi/etc/oratab--去掉实例相关的设置
$vi~/.bash_profile--去掉实例相关的设置
参考资料:
相关文章推荐
- 删除ORacle 命名空间
- 15.oracle的dump理解十五 SQL命令DUMP
- 14.oracle的dump理解十四 窥视内存
- 13.oracle的dump理解十二 dump heap
- 12.oracle的dump理解十二 dump library_cache_object
- 11.oracle的dump理解十一 dump library_cache
- 10.oracle的dump理解十 dump CONTROL文件头
- 9.oracle的dump理解九 dump REDO文件头
- 8.oracle的dump理解八 dump文件头
- 7.oracle的dump理解七 enqueue理论及dump enqueues
- 4.latch之oracle latch undo globaldata
- 2.latch之oracle latch
- ORACLE时间日期星期(SYSDATE)相关处理
- oracle的存储过程和存储函数
- Oracle基础 --常用SQL语句
- Oracle中(+)的作用
- PL/SQL配置Oracle数据库路径
- oracle_建表并指定字段和描述
- oracle_日期维度表插入数据
- oracle 新建用户