前些天春节放假,所有的服务器都关机,过完节回来开机,发现unix服务器下的oracle目录只剩下个空目录啦,里面的东西光光的啦。查了history,没发现有人做rm操作。难道是硬盘出故障了?导致挂载点/oracle直接丢失?搞了半天没有没搞明白,而且数据库还没有做dmp备份。幸好发现/oradata下面的文件都还在,通过重装oracle软件来做恢复吧。
补充个小知识,看unux下的磁盘,用 fdisk -l
cciss是惠普的smart array控制器的设备名。
c0指channl 0,第一个SCSI通道
d0指逻辑盘1,d1指逻辑盘2.。。
p1指第一个分区,p2,第二个分区 ,发现两块磁盘都是好好的,那么 /oracle下面的东西到底去哪里啦?
在这个机器上已经装了6个数据库,发现其中4个数据库的/oradata/sid/下面的dbf文件都是全的,包括system01.dbf,其中一个数据库的system01.dbf放在了/oracle软件安装环境下了。所有的控制文件和redo文件都丢失了,可以通过重建控制文件和redo文件做恢复,那个系统表空间都丢失的数据库,估计是救不活啦。
闲话少说,操作步骤如下:
1 先安装oracle软件吧,还是原来的目录安装好
2 建立pfile文件,可以先新建一个空库,
在oracle用户下,dbca 新建一个数据库,然后 sqlplus / as sysdba ,
执行命令,SQL>create pfile='?/dbs/init@.ora' from spfile 生成pfile(?是指oracle_home,@代表sid)
pfile放在 oracle_home/dbs下,格式为init实例名.ora,复制3个init@.ora文件,文件的内容大致如下:
orcl10g.__db_cache_size=427819008
orcl10g.__java_pool_size=4194304
orcl10g.__large_pool_size=4194304
orcl10g.__shared_pool_size=155189248
orcl10g.__streams_pool_size=0
*._allow_resetlogs_corruption=TRUE
*.audit_file_dest='/oracle/product/10.2.0/db1/admin/orcl10g/adump'
*.background_dump_dest='/oracle/product/10.2.0/db1/admin/orcl10g/bdump'
*.compatible='10.2.0.5.0'
*.control_files='/oradata/orcl10g/control01.ctl','/oradata/orcl10g/control02.ctl','/oradata/orcl10g/control03.ctl'
*.core_dump_dest='/oracle/product/10.2.0/db1/admin/orcl10g/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl10g'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcl10gXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=199229440
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=599785472
*.undo_management='manual'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/oracle/product/10.2.0/db1/admin/orcl10g/udump'
我们只需要修改sid名称为目标sid名称,对于没有的目录要创建一下
3 建立控制文件
export SID=sid名称
sqlplus / as sysdba
SQL>startup nomount,建立控制文件
执行下面脚本
SQL> CREATE CONTROLFILE reuse DATABASE "orcl10g" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/orcl10g/redo01.log' SIZE 50M,
GROUP 2 '/oradata/orcl10g/redo02.log' SIZE 50M,
GROUP 3 '/oradata/orcl10g/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oradata/orcl10g/system01.dbf',
'/oradata/orcl10g/undotbs01.dbf',
'/oradata/orcl10g/sysaux01.dbf',
'/oradata/orcl10g/users01.dbf',
'/oradata/orcl10g/你的所有的dbf.dbf'
CHARACTER SET ZHS16GBK;
4 重建redo文件
SQL>alter database open resetlogs
5 数据库可以顺利的起来啦,赶紧的做dmp备份吧
6 依法炮制,把其它的几个库都恢复了。
7 丢失了system01.dbf的两个数据库,在做了各种尝试以后,终于放弃了。
使用了dbf恢复小工具aul5也不行,看来丢失了system文件几乎就是判死刑了。
8 总结:
1)重启数据库前,重启机器等关键时刻一定先做数据库的备份
2)冷备份dbf文件时一定要把system.dbf给备份了,否则冷备份的dbf是无法使用的