用户管理的备份恢复

用户管理的备份恢复

冷备份(脱机备份)

一致性备份,直接拷贝要备份的文件,在关闭实例的情况下。
在非归档模式下: 只能完全恢复。
例如周一做了一次备份,到周四的时候,需要恢复数据,从周一到周四这之间的数据就会丢失,只会还原到周一备份前的数据状态。
完全和非完全:
1.要把所有的关键性数据拷贝出来:数据文件、控制文件、日志文件
2.恢复

热备份(联机备份)

也叫不一致备份,可以在数据库实例开启的状态下进行备份,可以还原到某一个时间节点,可以单文件恢复,不需要像冷备份的全部文件统一恢复。

这里讲一下热备份的备份操作流程:
--备份数据库所有文件
1. alter database begin backup;
为什么要用这句命令,举个例子:
本次采用热备份的形式,因为热备份不像冷备份,必须要关闭数据库才能备份,所有数据的一致性是肯定的,但是热备份的也必须要考虑数据的一致性,所有我们为了数据的一致性,我们需要把数据库所有的文件“加锁",假如这时我需要备份数据文件,我就不用担心控制文件或者日志文件不一致的情况发生了(复杂点描述就是把每个文件的头锁住了,类似于之前讲到的scn号)。
2. 我们这里首先备份数据库的数据文件:
	(1)在/u01 目录下mkdir backup一个文件夹,用于存放备份后的数据文件。
	(2)这里为了方便,我们写个shell执行一下吧:
vim /u01/backupDatafile.sh
#!/bin/bash
cp \
--数据文件的路径可以在v$datafile表里面查询
/u01/app/oracle/oradata/pas/system01.dbf \
/u01/app/oracle/oradata/pas/sysaux01.dbf \
/u01/app/oracle/oradata/pas/undotbs01.dbf \
/u01/app/oracle/oradata/pas/users01.dbf \
/u01/app/oracle/oradata/pas/example01.dbf /u01/backup

3.写完上面的脚本后保存执行,bash backupDatafile.sh
4.稍等一会正在备份,这里要说一下,虽然目前数据库各个文件处于加锁状态包括现在备份的数据文件在内,但是不会影响用户对数据文件或者其他文件的读和写,这就是联机备份(热备份)。
5.现在去到/u01/backup文件夹下面,就可以看到我们数据库里的数据文件已经全部备份完成了。
6.接着我们就解锁 alter database end backup;
7.这里我们的数据文件已经通过热备份完成了。

接着我们刚刚已经备份完成数据文件了,这里有个问题,上面有提到我们备份前是将文件头锁住的,假如我们锁住的时候scn号=100,在我们备份完成后数据库的scn号=110了(热备份会一直读和写),这时我们就要通过上一章讲到的“重做日志”来还原100-110的scn号数据信息了,因为重做日志会将我们数据一切改动的信息都记录在此,所以我们先手动归档一下目前的重做日志:
alter system switch logfile
这个时候数据文件已经有了,归档日志也已经有了,就可以进行恢复了(后面会继续讲怎么恢复)

小节(如何备份表空间)

有两种方法:联机备份、脱机备份
第一种备份方式:脱机备份

1. --创建一个表空间,用于测试备份
create tablespace xx datafile '/u01/xx.dbf' size 10m
autoextend on next 5m 
maxsize 100m;
2. --通过dba_tablespaces查看新增加的表空间和表空间状态
desc dba_tablespaces;
select tablespace_name,status from dba_tablespaces;
3. --可以看到目前新增加的xx表空间是online状态的,这个状态下是不允许备份表空间的,需要修改成offline状态。
alter tablespace xx offline;
4.在/u01目录下创建保存备份表空间文件的文件夹。
mkdir /u01/backup1
5.在/u01/xx.dbf下复制文件到第四步创建的文件夹目录下
cp -a /u01/xx.dbf /u01/backup1
6.把xx表空间改回online
alter tablespace xx online;
7.已经将表空间备份完成

第二种备份方式:联机备份

--联机备份表空间和脱机备份表空间最大区别就是不用将表空间状态设置为offline
1.创建保存备份表空间数据文件的文件夹 mkdir /u01/backup1
2.将所需备份的表空间设置为备份状态,可以通过v$backup表查看目前表空间的状态,这里需要用到上面一样的“锁” alter tablespace xx begin backup;
此时的xx表空间还是处于活动状态,还是能进行读写操作。
3.将上锁后的表空间数据文件复制到刚刚第一步新创建的文件夹中,cp -a xx.dbf /backup1
4.解除该表空间锁状态,再次查看v$backup表。
5.完成备份。

这里思考一个问题:

我刚刚在第一种备份方式时创建了一个表空间,这时我删除了表空间对应的数据文件,也就是xx.dbf,如果这时不重启数据库实例还是可以继续使用,但是如果重启了实例,那就会报错,找不到对应的xx.dbf数据文件;
这时我们首先要保证数据库能启动起来,目前数据库少了一个数据文件,实例的状态肯定是mounted,我们需要先将丢失或损坏的数据文件先设置为offline状态保证实例的正常启动,alter database datafile 6 offline;
然后 alter database open;就可以正常打开数据库了,这样就能保证业务至少能正常运转再想解决办法,将影响范围降到最低。
::应对上面这个问题的解决方法::

1.将我们刚刚在第二步备份的数据文件拷到原来数据xx.dbf的文件位置下。
2.进到sqlplus,用管理员身份再重新设置alter database datafile 6 online,这时会发现系统提示我们需要进行“介质”恢复。
3.直接执行介质恢复,recover datafile 6;
4.再次执行alter database datafile 6 online;
5.startup force重启数据库,发现已经正常可以使用了

恢复

讲到恢复,在数据库中代表恢复有两个名词(restore、recover),这两个名词的意思都是指的恢复,但是其作用在不同的领域中,接下来详细说明:

1.首先我们做个实验:在刚刚创建的xx表空间里面创建一张表,插入三条数据。
2.接着按照刚刚联机备份的方式,将xx表空间进行备份。
3.再备份完成后,我们再往表里面插入第四第五条数据。
3.此时,我们将原来的xx表空间的数据文件删除掉,是启动不了数据库的,结合上面的解决方法,我们是通过联机备份生成的备份数据文件来还原到原来xx表空间数据文件的目录下,cp -a backup1/xx.dbf . ,这一步的操作解释就是**restore**,它的意思是通过已经备份好的文件进行恢复,而我们刚刚建了一张表插了三条数据,这里的**restore**就是恢复我们刚刚的三条数据。
4.但是有一点应该已经意识到了,那我们后来插入的第四第五条数据呢?这个时候就是我们上面有说到的需要进行“介质”恢复**recover**,recover datafile 6;
recover的原理就是利用重做日志或者归档日志里的信息,因为这两个日志里的信息是无时无刻都在记录的,利用里面的信息恢复备份以后所产生的数据,也就是我们刚刚在第三部所插入的第四第五条记录。
5.通过以上步骤,从而实现数据的一致性恢复。

总结

这里先把上面的所有部分做一次总结,通过联机备份来实现表空间的备份与恢复,下面就是全过程:

--第一步,通过管理员身份登录sqlplus
sqlplus /nolog
conn sys / as sysdba
--第二步,将所要备份的表空间进行上锁(联机备份与脱机备份的区别!)
alter tablespace xx begin backup;
--第三步,在操作系统上创建一个文件夹,用于保存备份后的数据文件(linux)
mkdir backup2
--第三步,将xx.bdf(表空间对应的数据文件)复制到刚刚所创建的backup2下
cp -a /u01/xx.dbf /u01/backup2
--第四步,回到sqlplus,将xx表空间解锁
alter tablespace xx end backup;
--第五步,恢复,将xx表空间原来路径下的数据文件删除,再用备份resotre。
rm -rf /u01/xx.dbf
cp -a /backup2/xx.dbf /u01
--第五步,重启数据库,发现需要进行介质恢复recover
startup force
recover datafile 6(这里是我的数据文件号,以自己创建的为例)
--第五步,将数据库实例状态切换成open状态,完成整个恢复工作。
alter database open;

以上就是本章节主要想介绍的内容,也叫做“完全恢复”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值