ITPub博客

首页 > 数据库 > Oracle > oracle数据库的备份(上)

oracle数据库的备份(上)

原创 Oracle 作者:spaceair 时间:2004-12-20 16:52:13 0 删除 编辑
本文出自《网管员世界》“系统维护”栏目

一、引言
目前,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.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.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.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的售后服务也不支持。[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/59630/viewspace-784944/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    149
  • 访问量
    4899203