go4321 发表于 2018-9-12 12:03:51

Oracle中热备份

  1.热备份介绍
  热备份是在数据库已启动且正在运行时进行的备份。在某个时间点,可以对整个数据库进行备份,也可以只备份表空间或数据文件的一个子集。在执行热备份时,最终用户可以继续进行他们的所有正常操作。为此,数据库必须运行在归档日志模式。
  2.利用SQL*Plus进行数据库热备份的操作步骤如下
  1)用数据库管理员帐号登录Oracle
  SQL> conn sys/oracle as sysdba;
  2)设置数据库为归档模式。热备份只能在数据库处于归档模式才可以使用,因此,进行热备份前要确认数据库已经处于归档模式。查询数据库归档模式可以使用如下语句:
  1)创建归档目录
  $ mkdir my_arch_backup
  $ pwd
  /u01/app/oracle
  2)设置数据库为归档模式
  SQL> alter system set log_archive_start=true scope=spfile;
  SQL> show parameter log_archive_start;
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  log_archive_start                  boolean   TRUE
  SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/my_arch_backup' scope=both;
  SQL> shutdown immediate;
  SQL> startup mount;
  SQL> alter database archivelog;
  查看当前数据库是否归档信息:
  SQL> archive log list;
  Database log mode            Archive Mode
  Automatic archival             Enabled
  Archive destination            /u01/app/oracle/my_arch_backup
  Oldest online log sequence   58
  Next log sequence to archive   60
  Current log sequence         60
  或者:
  SQL> select name,log_mode from v$database;
  NAME      LOG_MODE
  --------- ------------
  ORCL      ARCHIVELOG
  如果数据库处于非归档模式,需要先将数据库切换为归档模式,切换为归档模式过程如下:
  --关闭数据库
  shutdown immediate
  --启动数据库到mount状态
  startup mount
  --更改数据库为归档模式
  alter database archivelog;
  --打开数据库
  alter database open;
  --设置归档路径为本地系统的记录,可以设置10个,分别以log_archive_dest_n命名
  alter system set log_archive_dest_1=’LOCATION=保存路径’;
  3)备份控制文件
  控制文件记录了数据库的物理结构,通常数据库物理结构发生改变都要对控制文件进行备份。改变数据库物理结构的操作有添加、修改或删除表空间,添加或删除重做日志文件组等。
  备份控制文件有两种方法,一种是先将控制文件备份为二进制文件,再将二进制文件转储到备份磁盘;另一种是先将控制文件备份为文本文件(里面有创建控制文件的脚本),再将文本文件转储到备份磁盘。

[*]  将控制文件备份为二进制文件,可以使用如下语句:
  SQL> alter database backup controlfile to '/u01/app/oracle/my_arch_backup/controlfile' reuse;

[*]  将控制文件备份为文本文件,可以使用如下语句:
  SQL> alter database backup controlfile to trace as '/u01/app/oracle/my_arch_backup/control.trc' reuse;
  将控制文件备份为文本文件实际上是生成当前Oracle数据库控制文件创建语句,并将这些语句存放于user_dump_dest服务器初始化参数指定目录下的一个文件中。查看user_dump_dest参数值,可以使用如下语句:
  SQL> show parameter user_dump_dest;
  NAME                                 TYPE      VALUE
  ------------------------------------ ----------- ------------------------------
  user_dump_dest                     string      /u01/app/oracle/admin/orcl/udump
  4)备份数据文件
  备份数据文件以表空间为单位进行,首先查看当前数据库中有哪些表空间,每个表空间中分别有哪些数据文件。
  --查看数据库中表空间及包含文件:
  SQL> select tablespace_name,file_name from dba_data_files order by tablespace_name;
  TABLESPACE_NAME      FILE_NAME
  -------------------- --------------------------------------------------
  EXAMPLE            /u01/app/oracle/oradata/orcl/example01.dbf
  MY_UNDO            /u01/app/oracle/oradata/orcl/my_undo01.dbf
  SYSAUX               /u01/app/oracle/oradata/orcl/sysaux01.dbf
  SYSTEM               /u01/app/oracle/oradata/orcl/system01.dbf
  TEST01               /u01/app/oracle/oradata/orcl/test01.dbf
  UNDOTBS1             /u01/app/oracle/oradata/orcl/undotbs01.dbf
  USERS                /u01/app/oracle/oradata/orcl/users01.dbf
  7 rows selected.
  获悉数据库表空间信息后,就可以对每个表空间进行备份了
  --设置需要备份的表空间为备份状态,如users表空间
  SQL> alter tablespace users begin backup;
  --复制表空间的所有数据文件到备份磁盘
  $ cp /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/my_arch_backup/tablespace/user01.dbf
  --修改表空间结束备份
  SQL> alter tablespace users end backup;
  重复以上操作,直到备份完每一个表空间。
  5)归档当前的联机重做日志文件
  SQL>alter system archive log current;
  $ ls
  control01.ctlexample01.dbfredo02.log    system01.dbfundotbs01.dbf
  control02.ctlmy_undo01.dbfredo03.log    temp01.dbf    users01.dbf
  control03.ctlredo01.log   sysaux01.dbftest01.dbf
  $ cp *.log /u01/app/oracle/my_arch_backup/
  当前联机重做日志文件归档,会将当前联机重做日志文件前还未归档的联机重做日志文件一同归档。数据库在归档模式下,可以同时指定多个归档路径,归档时每个归档路径下都会产生一个归档日志文件,这些日志文件互为备份。当然,用户也可以将这些归档日志文件转存于备份磁盘。
  6)备份初始化参数
  在操作系统中,可将Oracle数据库系统初始化参数文件复制到备份磁盘中。
  SQL> alter database begin backup;
  $ ls
  hc_orcl.datinit.oraorapworcl      spfileorcl.ora
  initdw.ora   lkORCL    pfileorcl.ora
  $ pwd
  /u01/app/oracle/db_1/dbs
  $ cp spfileorcl.ora /u01/app/oracle/my_arch_backup/
  7)备份密码文件
  $ ls
  hc_orcl.datinit.oraorapworcl      spfileorcl.ora
  initdw.ora   lkORCL    pfileorcl.ora
  $ pwd
  /u01/app/oracle/db_1/dbs
  $ cp orapworcl /u01/app/oracle/my_arch_backup/
  SQL> alter database end backup;
  8)查询v$backup以查看哪些数据文件是置于联机备份模式下的表空间的一部分:
  SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
  Session altered.
  SQL> select * from v$backup;
  FILE# STATUS                CHANGE# TIME
  ---------- ------------------ ---------- -------------------
  1 NOT ACTIVE            2002860 2014-03-11 05:44:09
  2 NOT ACTIVE            2002860 2014-03-11 05:44:09
  3 NOT ACTIVE            2002860 2014-03-11 05:44:09
  4 NOT ACTIVE            2002860 2014-03-11 05:44:09
  5 NOT ACTIVE            2002860 2014-03-11 05:44:09
  6 NOT ACTIVE            2002860 2014-03-11 05:44:09
  7 NOT ACTIVE            2002860 2014-03-11 05:44:09
  7 rows selected.
  查看当前系统时间:
  SQL> select sysdate from dual;
  SYSDATE
  -------------------
  2014-03-11 05:46:48
  查询USERS表空间对应的文件编号:
  SQL> select file_id from dba_data_files where tablespace_name='USERS';
  FILE_ID
  ----------
  4
  $ ll
  -rw-r-----. 1 oracle oinstall34086912 Mar 11 05:29 user01.dbf
  3.归档模式下数据库完全恢复
  归档模式下数据库完全恢复是在部分数据文件损坏时,利用热备份的数据文件替换损坏的数据文件,结合归档日志文件和联机重做日志文件中的日志记录,对未提交的事务回滚,恢复数据库到故障发生时刻的状态。数据库完全恢复的前提是归档日志文件、联机重做日志文件、控制文件都没有发生损坏。
  根据数据文件损坏的程度不同,数据库完全恢复可以分为数据库、表空间、数据文件恢复三个程度。数据库恢复主要用于数据库的所有文件或大部分都被破坏时;表空间恢复主要用于个别表空间中的数据文件发生破坏时;而数据文件恢复主要是针对一个表空间中的个别文件发生破坏时;数据库恢复只能在数据库装载但没有打开的情形下进行,而表空间和数据文件恢复可以在数据库装载或打开状态下进行,这样就不会影响其他正常表空间为用户提供数据服务。
  1)数据库完全恢复

[*]  如果无法正常关闭数据库,应以终止方式关闭数据库
  shutdown abort

[*]  在操作系统上利用备份的数据文件替换所有损坏的数据文件
[*]  启动数据库到mount状态
  startup mount
[*]  执行数据库恢复命令
  recover database;
[*]  打开数据库
  alter database open;
  2)表空间完全恢复
  表空间完全恢复可以在数据库处于mount状态或在数据库打开状态下进行,mount状态下对表空间恢复步骤如下:

[*]  如果无法正常关闭数据库,应以终止方式关闭数据库
  shutdown abort;
[*]  在操作系统上利用备份的表空间数据文件替换表空间中所有损坏的数据文件
[*]  启动数据库到装载状态
  startup mount;
[*]  执行表空间恢复命令,如恢复uers表空间
  recover tablespace users;
[*]  打开数据库
  alter database open;
  数据库处于打开状态下,表空间完全恢复操作步骤,如下:

[*]  如果表空间数据文件损坏时数据库已经关闭,则启动数据库到装载状态
  startup mount;
[*]  将损坏的数据文件设为脱机状态,如users01.dbf文件。
  alter database datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf’ offline;
[*]  打开数据库
  alter database open;
[*]  将损坏的数据文件所在的表空间脱机准备恢复
  alter tablespace users offline for recover;
[*]  在操作系统上,利用备份的数据文件替换表空间中损坏的数据文件
[*]  执行表空间恢复
  recover tablespace users;
[*]  将表空间联机
  alter tablespace users online;
  (如果表空间数据文件损坏时数据库仍正常运行,可以直接从将损坏的表空间状态改为脱机准备恢复,之后向下进行)
  3)数据文件完全恢复
  数据文件完全恢复可以在数据库装载或打开状态下进行,数据库处于装载状态下的数据文件完全恢复步骤如下:

[*]  如果无法正常关闭数据库,应以终止方式关闭数据库
  shutdown abort;
[*]  在操作系统上利用备份的数据文件替换损坏的数据文件
[*]  启动数据库到装载状态
  startup mount;
[*]  执行数据文件恢复命令,如恢复users.dbf数据文件
  recover datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf’ ;
[*]  打开数据库
  alter database open;
  数据库处于打开状态下,数据文件完全恢复步骤,如下:

[*]  如果数据文件损坏时数据库已经关闭,则启动数据库到装载状态
  startup mount;
[*]  将损坏的数据文件设为脱机状态,如users01.dbf文件
  alter database datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf’offline;
[*]  打开数据库
  alter database open;
[*]  在操作系统上,利用备份的数据文件替换损坏的数据文件
[*]  执行数据文件恢复
  recover datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf’ ;
[*]  将数据文件联机
  alter database datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf’online;
  (如果数据文件损坏时数据库仍正常运行,则可以直接执行步骤2,4,5,6)

页: [1]
查看完整版本: Oracle中热备份