Oracle数据库的备份(上)

Oracle数据库的备份(上),学习笔记!

一、引言

目前,Oracle数据库已经发展成为主流大型数据库之一,其存储级别可以达到TB级,从而也在更广泛的范围运用开来,那么如何保证数据库的安全性和可靠性就更至关重要了。现在,就平常的实际使用,和大家谈谈关于Oracle数据库的备份方法及备份策略。

二、分类

对于不同的项目和应用,Oracle数据库提供了多种丰富的备份方法用以达到不同的功能。
1. 从总体上可分为物理备份和逻辑备份。
* 物理备份是实际物理数据库文件从一处复制到另一处(通常从磁盘到磁带)的备份,并在备份过程中对物理文件实施压缩、校验等相关操作。
* 逻辑备份则是利用SQL从数据库中导出数据并存入二进制文件。这些数据可以重新装载到原数据库或其他数据库。逻辑备份通常为物理备份的补充方式。
2. 按备份时的数据库状态可分为联机备份(又叫热备份)和脱机备份(又叫冷备份)。
* 热备份是指不需要关闭数据库进行的备份,在备份的同时可以进行正常的数据库的各种操作,满足了7*24的系统需要。
* 冷备份是指关闭数据库之后进行备份,所以备份时数据库将不能被访问。
3. 按数据库运行时的存档状态可分为存档方式下的备份(ARCHIVELOG)和非存档方式下的备份(NOARCHIVELOG)。
* 存档方式是指在online redo log文件满后转到存档目录下形成存档文件之后,再循环使用online redo log文件。这种方式的目的是当数据库发生故障时最大限度恢复所有已提交的事物。
* 非存档方式指在联机存档文件满后直接循环覆盖联机存档组中的联机存档文件。
* 通常,我们根据用户对数据库的高可用性的要求和可以忍受数据丢失的程度,来考虑让数据库工作在哪一种模式下,例如,把生产机上的(正式运行的)数据库放置在存档方式(ARCHIVELOG)下运行;而一般的开发机上的(用于开发和调试)数据库采用不存档方式(NOARCHIVELOG)。
4. 按实现的手段和工具可分为逻辑输出/输入、RECOVER MANAGER(RMAN)方式、SQL和操作系统方式、Oracle Enterprise Manager的GUI方式等。
5. 按备份的增量概念可以分为全数据库备份、增量备份和累计增量备份。
* 物理备份和逻辑备份均支持增量备份的概念,RMAN方式备份在数据块级上支持增量备份,而逻辑备份只在表级上支持增量备份。
下面,我们主要讨论一下冷备份、热备份和逻辑备份:
三、物理备份的实现之冷备份
冷备份就是在做备份的时候,数据库必须是通过Shutdown Normal正常关闭(只有这个状态是数据库完全关闭状态)。在操作系统下,利用操作系统的复制工具,把Oracle数据库所对应的数据文件、控制文件、联机日志文件、存档文件及参数文件复制出来。关闭数据库之前,通常需要确定和查看上述文件的名称、位置等信息。因为冷备份是在数据库关闭时实现的,因此对数据系统运行的状态是毫无必要的。数据库可以运行在存档或非存档两种方式下。如果数据库是运行在非存档方式下, 仅仅需要在正常关闭数据库后,备份数据库的所有组成文件、控制文件、数据文件、联机日志文件及参数文件。基于这种备份的恢复, 需要使用备份的所有文件,并将其恢复到原来同样的目录结构, 然后重新启动数据库,此时数据库将恢复到备份的时间点。显然你的一部分数据(从备份点到数据库失败)将会丢失, 故如果采用这种方法, 为了减少数据的丢失,就需要经常做备份,同时也可以结合逻辑备份来备份一些经常变化的并且比较重要的数据。 
1. 找出并记录下来所有需要备份的数据文件、控制文件、存档日志文件、参数文件、联机日志文件
(1)以Oracle用户的身份进入操作系统,并键入如下命令连接数据库:
$ sqlplus /nolog
SQL> connect / as sysdba
(2)确定需要备份的数据文件:
SQL> select name, status from v$datafile;
注:如果文件名(包含路径名)过分冗长,系统会自动显示这行,这时,可以适当的调节显示形式,以便更清楚明了地显示数据文件的信息,如:
SQL> column name format a50
SQL> select name, status from v$datafile;
将找出的所有status显示为"online"的数据文件,记录下来它们的全路径和文件名。
(3)确定需要备份的控制文件:
SQL> show parameter control_file;
NAME TYPE VALUE
control_file_record_keep_time integer 7
control_files string /home/Oracle/data/control01.ctl, 
/home/Oracle/data/control02.ctl, 
/home/Oracle/data/contro.ctl
也可以从动态性能视图v$controlfile中查看:
SQL> select * from v$controlfile;
STATUS NAME
/home/Oracle/data/control01.ctl
/home/Oracle/data/control02.ctl
/home/Oracle/data/control03.ctl
SQL>
还可以从init<sid>.ora文件中找到用于指定当前实例控制文件信息的参数,如:
control_files = ("/home/Oracle/data/control01.ctl", "/home/Oracle/data/control02.ctl", "/home/Oracle/data/control03.ctl")
然后,记录下来找出的控制文件的全路径和文件名。
如果不知道Oracle的sid,可以从数据字典中获得信息,键入如下命令:
SQL>select instance from v$thread;
INSTANCE
o816 -- 这个"o816"即为Oracle的sid
注意:
* 为保证数据库的高可用性,控制文件一般设计为在不同磁盘的多个备份(至少有两个备份放在不同磁盘上)。实现多路镜像控制文件的方法步骤:
* 用OS命令拷贝一份控制文件到准备镜像的位置
* 修改init<sid>.ora文件中的参数control_files,使之包含所有需要的控制文件
* 重新启动实例,从而使修改后的初始化参数生效
(4)确定需要备份的存档日志文件(如果数据库运行在archive模式下):
SQL> show parameter archive;
NAME TYPE VALUE
log_archive_dest_1 string location=/usr/Oracle/app/oracl e/product/8.1.6/admin/o816/arch 
也可以用下面的命令:
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination --存档日志文件的位置/usr/Oracle/app/Oracle/product/8.1.6/admin/o816/arch
Oldest online log sequence 5931
Next log sequence to archive 5934
Current log sequence 5934
SQL>
还可以从init<sid>.ora文件中找到用于指定当前实例存档日志文件路径和文件名形式的参数,如:
Log_archive_dest_1 = --存档日志文件的位置 "location=/usr/Oracle/app/Oracle/product/8.1.6/admin/o816/arch"
log_archive_format = arch_%t_%s.arc --存档日志文件的文件名格式
可见,这个例子中的存档日志文件将存在于 /usr/Oracle/app/Oracle/product/8.1.6/admin/o816/arch目录下。
存档日志文件的文件名格式为arch_%t_%s.arc。然后,记录下来找出的存档日志文件的全路径和文件名。
(5)确定需要备份的参数文件:
以Oracle用户的身份进入操作系统,并且知道Oracle的sid,如o816 
$ cd $Oracle_HOME/dbs
$ ls init*.ora
init.ora inito816.ora --其中inito816.ora即Oracle的参数文件
然后,记录下找出参数文件的全路径和文件名。
(6)确定需要备份的联机日志文件 (重做日值文件)
SQL> select member from v$logfile;
然后,记录下来找出的参数文件的全路径和文件名。
注意:备份全部数据文件、日志文件、控制文件、参数文件,并且一定要记录下相应的物理地址,因为此时所有文件的状态是一致的,只要同时能把这些文件恢复至相应的路径中,数据库可以重新启动,否则数据库启动会报相应的错误代码。
2. 完全关闭数据库,然后将记录下来的所有需要备份文件用OS命令备份到备份目录,操作如下:
SQL>shutdown normal
$ cp < file > < backup directory >
注意:如果不能以shutdown normal关闭数据库, 而又确信没有Oracle用户连接上此数据库,此时可以通过查找数据字典中的v$session查询是否有死掉的session挂在数据库中,而导致数据库不能正常关闭,可以用命令将此session杀掉,重新关闭数据库。具体步骤如下:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> select serial#, sid, status, username from v$session;
SERIAL# SID STATUS USERNAME
159 12 ACTIVE SYS
654 13 INACTIVE TEST
1055 15 INACTIVE TEST
1489 16 INACTIVE TEST
27 17 INACTIVE TEST
SQL> alter system kill session '27,17';
当然这要求对数据库体系进程非常了解,否则会误杀Oracle后台进程,导致意外事件的发生,更简单的方法如下:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate;
SQL> startup;
SQL> shutdown normal;
如果数据库没有关闭,而直接在操作系统进行数据库文件拷贝,Oracle称此行为是热备份,此拷贝出来的文件是无法使用的,同时Oracle的售后服务也不支持。

附录:
1:查看数据库数据文件的位置:
SQL> select name, status from v$datafile;
或者为:
SQL> column name format a50
SQL> select name, status from v$datafile;
2:查看数据库的控制文件的位置:
SQL> show parameter control_file;
或者为:
SQL> select * from v$controlfile;
3:查看数据库的sid:
SQL>select instance from v$thread;
4:查看oracle数据库的存档日志文件(如果数据库运行在archive模式下):
SQL> show parameter archive;
或者为:
SQL> archive log list
5:查看oracle数据库的参数文件位置为:
$ cd $Oracle_HOME/dbs
$ ls init*.ora
6:查看oracle数据库的联机日志文件:
SQL> select member from v$logfile;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值