您的位置:首页 > 数据库 > Oracle

ORACLE手工删除数据库

2016-04-29 22:31 585 查看
很多人习惯用ORACLE的DBCA工具创建、删除数据库,这里总结一下手工删除数据库实验的步骤,文中大量参考了乐沙弥的手动删除ORACLE数据库这篇博客的内容,当然还有Oracle官方相关文档。此处实验环境为OracleLinuxServerrelease5.7,数据库版本为10.2.0.5.0Step1:.获得控制文件、数据文件,日志文件等相关信息获取这些信息,一方面是为了后面的建库做参考,另外一个是为了验证后面一些操作,如果这些都没有必要,其实是可以可以跳过这一步的。

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--去掉实例相关的设置

参考资料:
/article/1444777.html
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=508865219788761&id=443822.1&displayIndex=10&_afrWindowMode=0&_adf.ctrl-state=38ojq5hbc_203
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
章节导航