数据库oracle-----备份恢复(数据文件丢失恢复)
oracle数据文件丢失下的恢复
背景说明:
我们经常遇到这样的问题,比如我建立一个表空间larmss 一个数据文件larmss.dbf ,空间里面有我们的系统用户和数据,忽然那天不知道撒原因,数据文件
larmss.dbf丢失了,而我没有这个文件的备份,我们当如何把数据找回来的问题。
很幸运,oracle数据的恢复机制,可以帮你完成这样功能。不过,做这样一件事是有前提的。
前提就是,必须是你先把数据库设置为归档模式,再建立的表空间和用户。这里就不在描述归档模式是撒了,先说说为啥先建立了对象,后归档,
这种情况是不能恢复。
这个道理很简单:比如你现在在写一部小说,每天写完后,都会在一个备份文件夹里面做今天的小说备份,也只有这样,你才可能那天你的小说感染病毒后才能从
你的备份文件中找到恢复,如果你是写了一个月后,才想起建个文件夹来备份每天的写作数据,忽然那天你小说不见了,你想恢复到目前的状态,你能从你的备份
文件夹里找到全部数据吗?答案是否定的,应为你有一个月没有备份,那一个月的数据时找不会来的。数据库的归档原理大概也是如此。
现在为了测试恢复效果,来模拟下恢复环境,为此我们要做下面几件事
1.将数据库设置成为归档模式
2.建立表空间,数据文件,用户和一张表。
3.删除表空间的数据文件。
4.恢复数据文件
5.检查恢复是否完成。
任务1: 设置归档
大概说下,设置归档一般分两步:1.设置归档路径(数据库参数log_archive_dest_1="location='E;\oracle\arhcive'",归档格式参数 log_archive_format)
2.参数设置好后,启动数据库为归档方式
具体过程:
a.查看归档是否启动的方法 命令方式:SQL》archive log list;
视图查看: select dbid,name,log_mode from v$database
select * from v$archive_dest//可是设置10个归档路径
b 设置归档,要修改数据库参数文件,修改两个参数
1.ARCHIVE DEST(归档目的地)
log_archive_dest_1="location=E:\applicationTool\oracle\product\oradata\PRACTICE\archive";设置归档文件放置的位置
其中location意味归档将拷贝到本地磁盘位置
2.ARCHIVE MODE(归档格式)
log_archive_format=%s.arc 其中%s是序列号
SQL> alter system set log_archive_dest_1="location=E:\applicationTool\oracle\product\oradata\PRACTICE\archive" scope=spfile;
alter system set log_archive_format="ARC%S_%R.%T" scope=spfile;
SQL >shutdown immediate
SQL > startup mount;
SQL > alter database archivelog;
SQL > alter database open;
SQL > archive log list;//查看是否成功
为了查看效果,可以强制数据库日志切换 SQL》alter system switch logfile;多切换几次,去归档目录下,看看是否有文件生成
任务2: 建立表空间,数据文件,用户和表
SQL》create tablespace larmss datafile 'E:\oracle\data\larmss.dbf' size 20M;
SQL> create user larmss identified by oracle default tablespace larmss;
SQl> grant resource,connect to larmss;
SQL> conn larmss/oracle
SQL> create table loan(loanno number,loanamt number(10,2));
向里面插入一些测试数据
任务3: 删除表空间数据文件,模拟坏的环境
先关闭数据库SQL》shutdown immdeidate;
再在系统中删除文件E:\oracle\data\larmss.dbf
当你再启动数据库,就会报找不到文件的错误
SQL》startup
你可以查看视图select * from v$recover_file 查看错误文件号,在查询select * from v$datafile where FILE#=fileno查看具体那个文件错误。
任务4: 恢复数据文件
一般步骤,先在相应位置从新建立数据文件,再通过修复机制修复数据文件,修复后,挂载数据文件,最后打开数据库
SQL》startup mount;
SQL>alter database create datafile 'E:\oracle\data\larmss.dbf'
SQL>set autorecovery on;
SQL>recover datafile 'E:\oracle\data\larmss.dbf';
SQL>alter database datafile 'E:\oracle\data\larmss.dbf' online;
SQL>alter database open;
这样数据库就恢复打开了
任务5 检查是否恢复成功
用用户larmss/oracle 联接,进去看看数据还在没有,在说明恢复成功。