ORACLE数据库学习之备份与恢复(一)

2014-11-24 17:07:30 · 作者: · 浏览: 0

第一部分:数据库的备份

备份的必要性

因为各种人为或外界的因素可能会造成数据库中灾难性的数据丢失,为了保证数据库中数据的安全,必须采取备份措施保证RDBMS中包含的数据免遭破坏,而有效的备份是十分简单和普通的,是在数据库处于无法使用状态时用于重建数据库的重要信息拷贝。在重要的修改如删除段或者表空间以前或以后执行适当的备份是相当必要的。

备份的种类:

冷备份:

一种最简单直接的备份方式,也称为脱机备份,但是必须关闭数据库,这对于当前7×24的有效性并不可取;

联机热备:

正如名称所示,是在数据库打开时执行的备份方式,进行联机备份比进行脱机备份的进程复杂;

用导出exp应用程序备份:

是对于脱机备份和联机备份类型的补充,因为它无法回滚,所以不能替代数据库文件的备份。

各种备份的原理和步骤:

冷备份:

关闭数据库,采取操作系统拷贝命令来完成对数据库的备份,然后启动数据库。

例如:将名为lyj的数据库作一个冷备份,备份的文件放置在/mnt/backup_wy/目录下。

l 首先找出控制文件、数据文件和redo日志文件的存储位置

SQL> selectname from v$controlfile ;

NAME

----------------------------------------------------

/u3/oradata/lyj/control01.ctl

/u3/oradata/lyj/control02.ctl

/u3/oradata/lyj/control03.ctl

SQL> select status,name from v$datafile ;

STATUS NAME

---------- ----------------------------------------

SYSTEM /u3/oradata/lyj/system01.dbf

ONLINE /u3/oradata/lyj/tools01.dbf

ONLINE /u3/oradata/lyj/rbs01.dbf

ONLINE /u3/oradata/lyj/temp01.dbf

ONLINE /u3/oradata/lyj/users01.dbf

ONLINE /u3/oradata/lyj/indx01.dbf

SQL> select * from v$logfile ;

GROUP# STATUS MEMBER

--------------------------------------------------------------------------------

/u3/oradata/lyj/redo01.log

2 /u3/oradata/lyj/redo02.log

3 /u3/oradata/lyj/redo03.log

l 关闭数据库:

SQL> shutdown

数据库已经关闭。

已经卸载数据库。

ORACLE例程已经关闭。

l 将数据文件、控制文件和redo日志文件从上面查找出来的位置拷贝到/mnt/backup_wy/目录下作为备份:

[oracle|15:38:09|/u3/oradata/lyj]$ cp *.ctl /mnt/backup_wy/

[oracle|15:38:29|/u3/oradata/lyj]$ cp *.log /mnt/backup_wy/

[oracle|15:38:43|/u3/oradata/lyj]$ cp *.dbf /mnt/backup_wy/

l 重新开启数据库:startup

热备份

在联机状态下执行备份,这时数据库必须运行在ARCHIVELOG模式下,因为在日志书写器进程重新使用它之前,副本是由每一个redo日志文件组成的,日志书写器在循环方式中通过redo日志文件进行循环,只要数据库正在运行,它就写入一个,然后是另一个,依此类推。在ARCHIVELOG模式下运行时,直到redo日志文件的永久拷贝被建立,Oracle才覆盖redo日志文件。在ARCHIVELOG模式中运行数据库时,可以选择当每个redo日志文件写满时手工地生成备份或者启动可选的归档进程进行自动备份。只有通过sys身份或internal登录数据库,就有权利通过sqlplus或svrmgr查看数据库的归档状态;

SVRMGR> archive log list

数据库记录模式 存档模式

自动存档 已启用

存档路径 /u2/oratest/admin/lyj/arch

最旧的联机日志顺序 496

要存档的下一个记录顺序 498

当前记录顺序 498

在这种模式下,数据库运行在ARCHIVELOG模式下,并且能够进行自动归档,此时,可以进行联机备份了。

假设数据库运行在非存档模式下,就应该在参数文件中修改log_archive_start= true

log_archive_dest =指定的保存归档日志文件的目录

log_archive_format =“制定的归档日志文件的存储格式"

备份控制文件;

备份数据文件;

归档当前的联机日志文件;

备份归档日志文件。

下面以lyj为例说明如何热备一个数据库:

l 备份控制文件:

SVRMGR> alter databasebackup controlfile to '/mnt/backup_wy/controlfile' ;

语句已处理。

用完整的文件夹路径和文件的名称'/mnt/backup_wy/controlfile'将备份控制文件存储在此。

l 备份数据文件:

执行一个数据库的联机备份时,需要一次复制一个表空间的数据文件,在位一个表空间复制文件之前需要执行ALTER TABLESPACEtablespace_name BEGIN BACKUP;

为表空间复制完文件时,需要执行下列命令:

ALTER TABLESPACEtablespace_name END BACKUP;

使用这些BEGIN和END命令的理由是当它们被复制时,Oracle需要将数据文件头保持连贯状态,发出BEGIN命令时,Oracle停止更新受影响的数据文件的文件头上的检查点,在整个表空间备份模式中,Oracle通过将全部的数据块写入redo日志文件的方式来记录这个表空间中的数据的变化。

通过下面语句找出所有表空间的名字:

SVRMGR> select * fromv$tablespace;

TS# NAME

---------- ------------------------------

0 SYSTEM

1 TOOLS

2 RBS

3 TEMP

4 USERS

5 INDX

然后对这些表空间进行备份,将数据文件备份到/mnt/backup_wy/

目录下:

SVRMGR> alter tablespacesystem begin backup ;

语句已处理。

SVRMGR> alter tablespacetools begin backup ;

语句已处理。

SVRMGR> alter tablespacerbs begin backup;

语句已处理。

SVRMGR> alter tablespacetemp begin backup ;

语句已处理。

SVRMGR> alter tablespaceusers begin backup ;

语句已处理。

SVRMGR> alter tablespaceindx begin backup