2010年1月10日星期日

手工删除oracle数据库实例的全部文件

    今天公司搬家,没啥好写的,简单记录一下前两天删除重建oracle数据库的过程吧。
    首先,我重建的是oracle数据库,而不是oracle数据库程序。这几天不知道怎么回事,整个数据库的redo log出问题了,我又懒得去找。加上这个数据库做演示的时候乱糟糟的配置做了一堆,也记不请了,干脆重建。
    重建的第一步,需要找到所有程序实例的位置,这个可以看/etc/oraInv什么的一个文件,这里会指向一个目录。这个目录是标准的,里面有各种格式的oracle程序实例的位置。然后,一个程序实例可以运行多个数据库实例,因此,要找出这些数据库实例的配置文件。这个就需要对oracle的数据库基本结构有所了解,这里不赘述oracle数据库的各种基本概念。
    oracle的数据库配置文件在一个很怪的位置,/etc/oratab里面。其中有SID到spfile路径的对应关系,通常而言,这个路径位于$ORACLE_HOME/dbs/init$ORACLE_SID。我们首先不要删除这个对应关系和文件,因为启动中其他文件需要通过这个找到。我们首先通过spfile建立pfile,来读取其中的参数。
$ export SID=orcl
$ sqlplus / as sysdba
> create pfile from spfile
> exit
    OK,这样我们就建立了pfile,现在可以删除$ORACLE_HOME/dbs目录下所有的SID相关的文件,并且删除oratab中的对应关系。完成这步后,数据库就无法启动,也不存在了。但是我们还需要回首数据库相关的文件,主要是收回空间,同时也免除后患。
    首先,数据库有三个control files,还有一个到多个data files,以及多个redo log。在默认设置中,这些文件一般放在一起,你可以通过查看pfile确认这些文件的路径。找到之后,直接删除,没啥好多说的。在完成数据基础文件的删除后,我们还需要删除flash_recovery文件,这个也可以通过pfile确认,位置一般在data文件上两级(就是通常$ORACLE_BASE的位置)下面,flash什么的一个目录,很好找。
    最后,我们删除admin目录,具体是在$ORACLE_BASE下面的admin下面,以SID命名的,可以通过pfile确认。至此,oracle数据库的删除完成。不过呢——呵呵——让大家失望的是,其实DBCA也可以完成一样的工作...
    不过,dbca的工作必须通过vnc,绝对不要通过ssh + xming,因为那个会让最后一步执行前的确认无法被确认,导致不能执行。实在是很让人郁闷的一个bug,切记切记。

没有评论: