导航

4. 用户管理的备份

Posted on 2008-09-08 11:28  毅无涯  阅读(302)  评论(0编辑  收藏  举报

用户管理的备份是指使用OS 命令(UNIX: cp,Windows:copy )备份数据库物理文件的过程。

 

4.1 备份数据库

备份DB 是指备份DB 的所有数据文件和控制文件,另外还应该备份参数文件和口令文件。注意,当备份数据库时,不要备份重做日志,备份重做日志“有弊无利”。

4.1.1 数据库一致性备份

数据库一致性备份是指在关闭了DB 之后备份所有数据文件和控制文件的方法。当使用SHUTDOWN 命令关闭了数据库之后,所有数据文件的当前SCN 值完全一致,所以关闭后的数据库备份被称为数据库一致性备份或冷备份。此备份既适用于ARCHIVELOG 模式,也适用于NOARCHIVELOG 模式。

具体步骤如下:

(1) 列出要备份的数据文件和控制文件。

SQL> select name from v$controlfile union select name from v$datafile;

NAME
--------------------------------------------------------------------------------
C:\DEMO\CONTROL02.CTL
D:\DEMO\CONTROL01.CTL
D:\DEMO\SYSAUX01.DBF
D:\DEMO\SYSTEM01.DBF
D:\DEMO\UNDOTBS01.DBF
D:\DEMO\USERS01.DBF

已选择6行。

 

(2) 关闭数据库(不要使用 SHUTDOWN ABORT)。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。


(3) 复制所有数据文件和控制文件到备份目录。

SQL>  host copy c:\demo\control02.ctl d:\backup

SQL> host copy d:\demo\control01.ctl d:\backup

SQL> host copy d:\demo\sysaux01.dbf d:\backup

SQL> host copy d:\demo\system01.dbf d:\backup

SQL> host copy d:\demo\undotbs01.dbf d:\backup

SQL> host copy d:\demo\users01.dbf d:\backup

 

(4) 启动例程并打开数据库。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              71304548 bytes
Database Buffers           92274688 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。

 

4.1.2 数据库非一致性备份

数据库非一致性备份是指在OPEN 状态下备份数据所有数据文件和控制文件的方法。因为在OPEN 状态下数据库内容随时都会改变,从而导致不同数据文件的当前SCN 值不同,所以打开时的数据库备份被称为数据库非一致性备份。

一致性备份会中断业务操作,非一致性备份不会影响业务操作。非一致性备份只适用于ARCHIVELOG 模式,不适用于NOARCHIVELOG 模式。

具体步骤如下:

(1) 列出要备份的数据文件。

SQL> select name from v$datafile;

NAME
----------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\UNDOTBS01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\USERS01.DBF

 

(2) 开始数据库备份。在列出要备份的数据文件之后,将数据库设置为备份模式。当将数据库设置为备份模式之后,会在数据库上发出全局检查点,并且会在所有数据文件头块上加锁,以确保备份期间数据文件的头块内容不会改变。

SQL> alter database begin backup;

数据库已更改。

 

(3) 备份所有数据文件和控制文件(数据文件用COPY 命令,控制文件用ALTER DATABASE BACKUP CONTROLFILE 命令)。

SQL> host copy d:\demo\system01.dbf d:\backup

SQL> host copy d:\demo\undotbs01.dbf d:\backup

SQL> host copy d:\demo\sysaux01.dbf d:\backup

SQL> host copy d:\demo\users01.dbf d:\backup

SQL> alter database backup controlfile to 'd:\backup\demo.ctl';

数据库已更改。

 

(4) 结束数据库备份。为了确保数据文件备份的同步性,应该归档当前日志组。

SQL> alter database end backup;

数据库已更改。

SQL> alter system archive log current;

系统已更改。

 

4.2 备份表空间

备份表空间是指在数据库处于OPEN 状态时备份其数据文件的方法。注意,表空间备份只适用于ARCHIVELOG 模式,而不适用于NOARCHIVELOG 模式。另外,当备份表空间时,既可以备份表空间的所有数据文件,也可以备份表空间的某个数据文件。

4.2.1 脱机备份

脱机备份是指当表空间处于OFFLINE 状态时,备份表空间所有数据文件或单个数据文件的过程。与联机备份相比,这种备份方法的优点是会生成较少的重做信息,但选缺点是会影响表空间上的业务操作。因为SYSTEM 表空间和正在使用的UNDO 表空间不能被脱机,所以这种备份方法不适用于SYSTEM 表空间和正在使用的UNDO 表空间。

以备份USERS 表空间为例,说明执行脱机备份的具体方法。步骤如下:

(1) 确定表空间所包含的数据文件。

SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
D:\DEMO\USERS01.DBF

 

(2) 设置表空间为脱机状态。

SQL> alter tablespace users offline;

表空间已更改。

 

(3) 复制数据文件(如果备份表空间,则复制其所有的数据文件;如果备份数据文件,则只需复制相应的数据文件)。

SQL> host copy d:\demo\users01.dbf d:\backup

 

(4) 设置表空间为联机状态。

SQL> alter tablespace users online;

表空间已更改。

 

4.2.2 联机备份

联机备份是指当表空间处于ONLINE 状态时,备份表空间所有数据文件或单个数据文件的过程,使用这种方法可以备份数据库的所有表空间和数据文件。联机备份的优点是不影响在表空间上的业务操作,但缺点是会生成更多的重做信息和归档信息。

以备份USERS 表空间为例,说明执行联机备份的具体方法。步骤如下:

(1) 确定表空间所包含的数据文件。

SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
D:\DEMO\USERS01.DBF

 

(2) 设置表空间为备份模式。在将表空间设置为备份模式之后,会在数据文件头块上加锁,使得数据文件头块不会发生改变,并且头块会记载将来进行恢复时的日志序列号、SCN等信息。

SQL> alter tablespace users begin backup;

表空间已更改。

 

(3) 复制数据文件。如果要备份表空间,则复制其所有数据文件;如果要备份数据文件,则只需复制相应的数据文件。

SQL> host copy d:\demo\users01.dbf d:\backup

 

(4) 设置表空间为正常模式。

SQL> alter tablespace users end backup;

表空间已更改。

 

4.2.3 处理联机备份失败

当执行联机备份时,如果出现了例程失败,那么当执行STARTUP 启动数据库时,会显示如下错误信息:

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              71304548 bytes
Database Buffers           92274688 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
ORA-01113: 文件 4 需要介质恢复
ORA-01110: 数据文件 4: 'D:\DEMO\USERS01.DBF'

为了打开数据库,必须要结束这些数据文件的联机备份状态。具体步骤如下:

(1) 装载数据库。

SQL> startup force mount
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              71304548 bytes
Database Buffers           92274688 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。

 

(2) 确定处于联机状态的所有数据文件。
SQL> select file# from v$backup where status='ACTIVE';

     FILE#
----------
         4

 

(3) 结束联机备份状态。有三种方法结束数据文件的联机备份状态。

A. 如果存在多个数据文件处于联机备份状态,那么可以使用ALTER DATABASE END BACKUP 命令结束联机备份状态。

SQL> alter database end backup;

数据库已更改。

B. 如果只有某个数据文件处于联机备份状态,那么可以使用ALTER DATABASE DATAFILE ... END BACKUP 命令结束联机备份状态。

SQL> alter database datafile 'd:\demo\users01.dbf' end backup;

数据库已更改。

C. 通过使用RECOVER 命令结束数据文件的联机备份状态。

SQL> recover datafile 4;
完成介质恢复。

 

(4) 打开数据库。

SQL> alter database open;

数据库已更改。

 

4.2.4 备份只读表空间

因为只读有空间的数据文件不会发生任何变化,所以只需要备份一次。具体步骤如下:

(1) 确定处于READ ONLY 状态的表空间。

SQL> select tablespace_name from dba_tablespaces where status='READ ONLY';

TABLESPACE_NAME
------------------------------
QUERY

 

(2) 确定只读表空间包含的数据文件。

SQL> select file_name from dba_data_files where tablespace_name='QUERY';

FILE_NAME
--------------------------------------------------------------------------------
D:\DEMO\QUERY.DBF

 

(3) 复制只读表空间的数据文件。

SQL> host copy d:\demo\query.dbf d:\backup

 

4.3 备份控制文件

控制文件用于记录和维护数据库。当恢复数据库时,服务器进程和后台进程需要从控制文件中读取各种与备份相关的信息。如果控制文件损坏,则会导致这么备份信息的丢失。尽管通过多元化控制文件可以防止控制文件损坏,但因为控制文件的重要性,所以应该定期备份控制文件。当数据库配置发生改变时,一定要备份控制文件。涉及到数据库配置改变的命令如下:

  • ALTER DATABASE [ADD|DROP] LOGFILE
  • ALTER DATABASE [ADD|DROP] LOGFILE MEMBER
  • ALTER DATABASE [ADD|DROP] LOGFILE GROUP
  • ALTER DATABASE [NOARCHIVELOG|ARCHIVELOG]
  • ALTER DATABASE RENAME FILE
  • CREATE TABLESPACE
  • ALTER TABLESPACE [ADD|RERNAME] DATAFILE
  • ALTER TABLESPACE [READ WRITE|READ ONLY]
  • DROP TABLESPACE

当执行数据库一致性备份时,可以备份控制文件。当数据库处于OPEN 状态时,DBA 可以使用ALTER DATABASE 命令备份控制文件,使用该命令既可以建立控制文件副本,也可以将控制文件信息备份到跟踪文件。

4.3.1 建立控制文件副本

当使用ALTER DATABASE 命令建立控制文件副本时,ORACLE 会将当前控制文件的信息全部存放到控制文件副本中。通过使用控制文件副本,一方面可以执行基于控制文件的不完全恢复,另一方面可以生成控制文件的文件跟踪文件。注意,当数据处于OPEN 状态时,控制文件副本只能用ALTER DATABASE 命令生成,而不能用OS 命令直接复制。

SQL> alter database backup controlfile to 'd:\backup\demo.ctl';
alter database backup controlfile to 'd:\backup\demo.ctl'
*
第 1 行出现错误:
ORA-01580: 创建控制备份文件 d:\backup\demo.ctl 时出错
ORA-27038: 所创建的文件已存在
OSD-04010: 指定了 <create> 选项, 但文件已经存在

 

当建立控制文件副本时,如果控制文件副本已经存在,则会显示错误信息。通过使用REUSE 选项,可以覆盖原有控制文件副本。

SQL> alter database backup controlfile to 'd:\backup\demo.ctl' reuse;

数据库已更改。

 

4.3.2 备份到跟踪文件

假定数据库所有数据文件、重做日志都处于一致完好状态,而只有控制文件被意外删除或损坏,那么通过重新建立控制文件就可以恢复控制文件。建立控制文件是使用CREATE CONTROLFILE 命令来完成的,但是执行该命令要求DBA 必须清楚数据库所包含的数据文件、重做日志的详细清单。为了避免手工建立控制文件所带来的麻烦,DBA 可以使用ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令将控制文件所记载的物理信息备份到跟踪文件,然后使用该跟踪文件建立控制文件。

SQL> alter database backup controlfile to trace;

数据库已更改。

(1) 确定跟踪文件位置。跟踪文件被存放在初始化参数user_dump_dest 所对应的目录中。

SQL> show parameter user_dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      D:\ORACLE\PRODUCT\10.2.0\ADMIN\DEMO\UDUMP

 

(2) 确定跟踪文件名称。跟踪文件名称的格式为<SID>_ora_<SPID>.trc, 其中SID 为例程标识符,亦即环境变量ORACLE_SID的值;而SPID 是服务器进程所对应的操作系统进程号。
SQL> select a.spid from v$process a, v$session b where a.addr=b.paddr and b.username='SYS';

SPID
------------
1240

 

(3) 查看跟踪文件内容。
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "DEMO" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    'D:\DEMO\REDO01.LOG',
    'C:\DEMO\REDO01_2.LOG'
  ) SIZE 50M,
  GROUP 2 (
    'D:\DEMO\REDO02.LOG',
    'C:\DEMO\REDO02_2.LOG'
  ) SIZE 50M,
  GROUP 3 (
    'D:\DEMO\REDO03.LOG',
    'C:\DEMO\REDO03_2.LOG'
  ) SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  'D:\DEMO\SYSTEM01.DBF',
  'D:\DEMO\UNDOTBS01.DBF',
  'D:\DEMO\SYSAUX01.DBF',
  'D:\DEMO\USERS01.DBF'
CHARACTER SET ZHS16GBK
;
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER DATABASE RENAME FILE 'MISSING00005'
  TO 'D:\DEMO\QUERY.DBF';
ALTER TABLESPACE "QUERY" ONLINE;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\DEMO\TEMP01.DBF'
     SIZE 22020096  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "DEMO" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    'D:\DEMO\REDO01.LOG',
    'C:\DEMO\REDO01_2.LOG'
  ) SIZE 50M,
  GROUP 2 (
    'D:\DEMO\REDO02.LOG',
    'C:\DEMO\REDO02_2.LOG'
  ) SIZE 50M,
  GROUP 3 (
    'D:\DEMO\REDO03.LOG',
    'C:\DEMO\REDO03_2.LOG'
  ) SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  'D:\DEMO\SYSTEM01.DBF',
  'D:\DEMO\UNDOTBS01.DBF',
  'D:\DEMO\SYSAUX01.DBF',
  'D:\DEMO\USERS01.DBF'
CHARACTER SET ZHS16GBK
;
RECOVER DATABASE USING BACKUP CONTROLFILE
ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE RENAME FILE 'MISSING00005'
  TO 'D:\DEMO\QUERY.DBF';
ALTER TABLESPACE "QUERY" ONLINE;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\DEMO\TEMP01.DBF'
     SIZE 22020096  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
当将控制文件的说明信息、注释信息等无关信息去掉之后,剩余部分就是用于重新建立控制文件的全部内容。当控制文件出现介质损坏时,通过执行以上语句可以恢损坏的控制文件。

 

4.4 备份其他文件

在制定备份和恢复计划时,不仅需要制定数据文件和控制文件的备份恢复计划,还需要制定归档日志、参数文件和口令文件的备份和恢复计划。

1. 备份归档日志

当备份归档日志时,首先要确定要备份的归档日志,然后使用OS 命令直接复制归档日志文件到备份目录。

SQL> select name from v$archived_log where dest_id=1 and first_time>=sysdate-1;

NAME
--------------------------------------------------------------------------------
C:\DEMO\ARCHIVE\4_1_664374623.LOG
C:\DEMO\ARCHIVE\5_1_664374623.LOG
C:\DEMO\ARCHIVE\6_1_664374623.LOG
C:\DEMO\ARCHIVE\7_1_664374623.LOG
C:\DEMO\ARCHIVE\8_1_664374623.LOG
C:\DEMO\ARCHIVE\9_1_664374623.LOG

已选择6行。

SQL> host copy c:\demo\archive\4_1_664374623.LOG d:\backup

SQL> host copy C:\DEMO\ARCHIVE\5_1_664374623.LOG d:\backup

SQL> host copy C:\DEMO\ARCHIVE\6_1_664374623.LOG d:\backup

SQL> host copy C:\DEMO\ARCHIVE\7_1_664374623.LOG d:\backup

SQL> host copy C:\DEMO\ARCHIVE\8_1_664374623.LOG d:\backup

SQL> host copy C:\DEMO\ARCHIVE\9_1_664374623.LOG d:\backup

 

2. 备份参数文件

如果在启动例程时不能定位到参数文件,则会显示如下错误信息:

SQL> startup
ORA-01078: 处理系统参数失败
LRM-00109: 无法打开参数文件'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INITDEMO.ORA'

如果例程使用文件参数文件(PFILE),那么直接使用OS 命令复制其文件参数文件;如果例程使用服务器参数文件(SPFILE),那么使用CREATE PFILE 命令进行备份。

SQL> create pfile='d:\backup\demo.par' from spfile='%oracle_home%\dbs\spfiledemo.ora';

文件已创建。

 

3. 备份口令文件

SQL> conn sys/demo@democlient as sysdba
ERROR:
ORA-01031: 权限不足

口令文件可以使用OS 命令直接备份。

SQL> host copy %oracle_home%\database\pwddemo.ora d:\backup