执行用户管理(不依赖于RMAN)的备份和恢复_制作用户管理的数据库备份

本文详细介绍了如何使用V$视图来获取Oracle数据库的备份信息,包括数据文件、控制文件和联机/脱机表空间的备份。强调了在备份前检查数据库状态的重要性,以及制作用户管理的整个数据库、表空间和数据文件备份的步骤。同时,讨论了如何验证备份的完整性,并提到了与第三方快照技术结合进行备份的方法。此外,还涵盖了如何在不同情况下结束备份模式,以及在实例故障后的恢复策略。
摘要由CSDN通过智能技术生成

1.查询V$视图来获取备份信息

在制作备份之前,你必须确认数据库中的所有文件和决定哪些文件要备份。你可以使用V$视图来获取这个信息。

1.1.在备份之前列出数据库文件

使用V$DATAFILE和V$CONTROLFILE视图识别数据库的数据文件和控制文件。不管手动命名这些文件或让OMF命名它们,这个相同的步骤都可用。

警告:不要备份在线redo日志文件。

列出数据文件和控制文件:
1)启动SQL*Plus和查询V$DATAFILE来获取数据文件列表。
SELECT NAME FROM V$DATAFILE;

你也可以连接V$TABLESPACE和V$DATAFILE视图来与它们相关的表空间一起获取数据文件列表:
SELECT t.NAME “Tablespace”, f.NAME “Data File”
FROM V$TABLESPACE t, V$DATAFILE f
WHERE t.TS# = f.TS#
ORDER BY t.NAME;

2)查询视图V$CONTROLFILE获取当前控制文件的文件名称。
SELECT NAME FROM V$CONTROLFILE;

你只需要备份多路复用控制文件的一个副本。

3)如果你计划使用ALTER DATABASE BACKUP CONTROLFILE TO 'filename’语句执行控制文件备份,那么与控制文件备份一起保存所有数据文件和在线redo日志文件的列表。因为当前的数据库结构可能不匹配指定的控制文件备份创建时的数据库结构,保存记录在备份的控制文件中的文件列表可以协助恢复过程。


1.2.确认联机表空间备份的数据文件状态

查询视图V$BACKUP来检查数据文件是否是当前联机表空间备份的一部分。

这个视图只有对用户管理的联机表空间备份是有用的,因为RMAN备份或脱机表空间备份都不需要表空间的数据文件在备份模式中。某些用户管理的备份过程需要将表空间置于备份模式来避免断裂块的可能性。然而,在备份模式中对数据库的更新比平常创建更多数量的redo

当数据库在打开时,V$BACKUP视图是最有用的。它也在紧接着实例故障之后有用的,因为它显示故障时文件的备份状态。使用这个信息来确认你是否遗留任何表空间在备份模式

V$BACKUP不是有用的如果当前使用的控制文件是还原的备份或在介质故障发生之后创建的新的控制文件。还原的或重建的控制文件不包含数据库需要准确生成V$BACKUP的信息。同时,如果你已经还原文件的一个备份,这个文件在V$BACKUP的STATUS反映了更旧版本的文件的备份状态,不是当前版本的文件。因此,这个视图会包含关于还原的文件的误导信息。

例如,以下查询显示哪些数据文件当前包含在已经置于备份模式的表空间中:
SELECT t.name AS “TB_NAME”, d.file# as “DF#”, d.name AS “DF_NAME”, b.status
FROM V$DATAFILE d, V$TABLESPACE t, V$BACKUP b
WHERE d.TS#=t.TS#
AND b.FILE#=d.FILE#
AND b.STATUS=‘ACTIVE’;

以下输出显示表空间tools和users当前是ACTIVE状态:

TB_NAME						 DF# 				DF_NAME 			STATUS
---------------------- ---------- -------------------------------- ---------
TOOLS 						7 	/oracle/oradata/trgt/tools01.dbf 	 ACTIVE
USERS						8 	/oracle/oradata/trgt/users01.dbf	 ACTIVE

在STATUS列中,NOT ACTIVE表明文件当前不在备份模式中(也就是说,你没有执行ALTER TABLESPACE … BEGIN BACKUP或ALTER DATABASE BEGIN BACKUP语句),而ACTIVE表明文件当前在备份模式。


2.制作用户管理的整个数据库的备份

你可以在使用NORMAL,IMMEDIATE,或TRANSACTIONAL选项关闭数据库之后制作数据库中所有文件的一致的整个数据库备份。当数据库是打开的,或在实例故障之后,或在执行SHUTDOWN ABORT命令之后做的整个数据库备份是不一致的。在这些情况中,文件与数据库检查点SCN是不一致的。

可以做整个数据库的备份如果数据库运行在ARCHIVELOG或NOARCHIVELOG模式。然而,如果数据库运行在NOARCHIVELOG模式,备份必须是一致的;也就是说,你必须在备份之前干净地关闭数据库。

来自一致的整个数据库备份的备份文件组是一致的,因为所有文件的检查点都是相同的SCN。你可以还原一致的数据库备份而不需要进一步恢复。在还原备份文件之后,如果数据库在ARCHIVELOG模式运行,你可以执行额外的恢复步骤来恢复数据库到更近的时间。同时,你可以做不一致的整个数据库备份如果数据库是在ARCHIVELOG模式。

控制文件在数据库还原和恢复中发挥着关键的角色。对于运行在ARCHIVELOG模式中的数据库,Oracle建议你使用ALTER DATABASE BACKUP CONTROLFILE TO 'filename’语句来备份控制文件。

制作一致的整个数据库备份
本章节描述如何使用操作系统工具备份数据库。
1)如果数据库是打开的,那么使用SQL*Plus和NORMAL,IMMEDIATE,或TRANSACTIONAL选项关闭数据库。

2)使用操作系统工具备份所有数据文件和初始化参数文件的CONTROL_FILES参数指定的所有控制文件。同时,备份初始化参数文件和其它Oracle产品初始化文件。为了找到这些文件,搜索Oracle Home目录和所有子目录中的*.ora文件。
% cp $ORACLE_HOME/oradata/trgt/.dbf /disk2/backup
% cp $ORACLE_HOME/oradata/trgt/arch/
/disk2/backup/arch

3)在SQL*Plus中使用STARTUP命令重新启动数据库。


3.制作用户管理的表空间和数据文件备份

制作用户管理的表空间和数据文件备份的技术取决于文件是脱机还是联机。

3.1.制作脱机表空间和数据文件的用户管理的备份

当备份脱机表空间时注意以下准则:
1)不能将SYSTEM表空间或具有活动undo段的表空间脱机。以下技术不能用于这些表空间。
2)假设表在表空间Primary和它的索引在表空间Index。将表空间Index脱机而将表空间Primary留在联机状态,当对位于Primary中建立了索引的表发出数据操作语言(DML)时会导致错误。这个问题只有当优化器选择的访问方法必须访问Index表空间中的索引时才会出现。

备份脱机表空间:
1)在备份表空间开始之前,查询视图DBA_DATA_FILES识别表空间的数据文件。例如,假设你想备份users表空间。
SELECT TABLESPACE_NAME, FILE_NAME
FROM SYS.DBA_DATA_FILES
WHERE TABLESPACE_NAME = ‘USERS’;

TABLESPACE_NAME                         FILE_NAME
--------------------------  --------------------------------
USERS                        /oracle/oradata/trgt/users01.dbf

2)如果可能使用正常优先级将表空间脱机,因为这保证你接下来可以不需要恢复它来将表空间联机。
SQL> ALTER TABLESPACE users OFFLINE NORMAL;

3)备份脱机的数据文件。
% cp /oracle/oradata/trgt/users01.dbf /d2/users01_‘date “+%m_%d_%y”’.dbf

4)将表空间联机
ALTER TABLESPACE users ONLINE;

注:如果你使用临时或立即优先级将表空间脱机,那么你不能将表空间联机除非你执行表空间恢复。

5)归档未归档的redo日志以便需要用来恢复表空间备份的redo被归档。
ALTER SYSTEM ARCHIVE LOG CURRENT;


3.2.制作联机表空间和数据文件的用户管理的备份

当数据库打开时你可以备份联机表空间的所有或只是特定的数据文件。取决于联机表空间是读写还是只读模式,过程会不同。

注:不要备份临时表空间。

3.2.1.制作联机可读写表空间的用户管理备份

当数据库打开和表空间联机时,你必须将可读写表空间置于备份模式来制作用户管理的数据文件备份。ALTER TABLESPACE … BEGIN BACKUP语句将表空间置于备份模式。在备份模式中,数据库拷贝整个更改过的数据块到redo流中。使用ATLER TABLESPACE … END BACKUP或ALTER DATABASE END BACKUP语句将表空间从备份模式退出后,数据库将数据文件检查点SCN向前移动到当前的数据库检查点SCN。

当还原以这种方式备份的数据文件时,如果需要恢复,数据库询问合适的redo日志文件组来应用。Redo日志包含恢复数据文件需要的所有更改和使它们一致。

备份打开数据库中的可读写表空间:
1)在开始表空间备份之前,使用DBA_DATA_FILES数据字典视图识别表空间中的所有数据文件。例如,假设你想备份users表空间。
SELECT TABLESPACE_NAME, FILE_NAME
FROM SYS.DBA_DATA_FILES
WHERE TABLESPACE_NAME = ‘USERS’;

TABLESPACE_NAME                    FILE_NAME
-------------- -------------------------------------------
USERS          /oracle/oradata/trgt/users01.dbf
USERS          /oracle/oradata/trgt/users02.dbf

2)标记联机表空间备份的开始。例如,以下语句标记表空间users在线备份的开始。
SQL> ALTER TABLESPACE users BEGIN BACKUP;

警告:如果你在开始联机表空间拷贝之前不使用BEGIN BACKUP标记联机表空间备份的开始和等待语句完成,那么产生的数据文件副本不可用于后来的恢复操作。尝试恢复这样一个备份是有风险的,可能会返回错误导致不一致的数据。例如,尝试的恢复操作可能会报失真文件(fuzzy file)警告,导致不可以打开的不一致的数据库。

3)使用操作系统命令备份联机表空间的联机数据文件。例如,Linux和UNIX用户输入:
% cp /oracle/oradata/trgt/users01.dbf /d2/users01_‘date “+%m_%d_%y”’.dbf
% cp /oracle/oradata/trgt/users02.dbf /d2/users02_‘date “+%m_%d_%y”’.dbf

4)在备份联机表空间的数据文件之后,运行以下SQL语句ALTER TABLESPACE和END BACKUP选项。例如,以下语句结束表空间users的联机备份:
SQL> ALTER TABLESPACE users END BACKUP;

5)归档未归档的redo日志以便需要用来恢复表空间备份的redo被归档。
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

警告:如果你没有将表空间退出备份模式,那么Oracle数据库继续将这个表空间中的数据块的副本写到在线redo日志,导致性能问题。同时,你会收到ORA-01149错误,如果你在表空间仍然在备份模式时尝试关闭数据库。


3.2.2.制作多个联机可读写表空间的用户管理备份

当备份几个联机表空间时,你可以顺序或并行备份它们。

3.2.2.1.并行备份联机表空间

可以在备份模式中同时创建多个需要备份的表空间的数据文件副本。然而,注意,将所有表空间一起置于备份模式,如果在受影响的表空间上有繁忙的更新活动,可能会生成大量的redo日志,因为redo必须包含每个更改的数据文件中的每个更改的数据块的副本。在使用这里概述的过程之前,确保考虑了可能的redo大小。

并行备份联机表空间:
1)一起执行所有必要的ALTER TABLESPACE语句为备份准备联机表空间。例如,将表空间users,tools和indx置于备份模式:
SQL> ALTER TABLESPACE users BEGIN BACKUP;
SQL> ALTER TABLESPACE tools BEGIN BACKUP;
SQL> ALTER TABLESPACE indx BEGIN BACKUP;

如果备份所有表空间,可以使用这个命令:
SQL> ALTER DATABASE BEGIN BACKUP;

2)备份联机表空间的所有文件。例如,Linux或UNIX用户可能备份使用*.dbf后缀的数据文件:
% cp $ORACLE_HOME/oradata/trgt/*.dbf /disk2/backup/

3)将表空间退出备份模式。
SQL> ALTER TABLESPACE users END BACKUP;
SQL> ALTER TABLESPACE tools END BACKUP;
SQL> ALTER TABLESPACE indx END BACKUP;

同样,如果你一起处理所有数据文件,你可以使用ALTER DATABASE命令而不是ALTER TABLESPACE:
SQL> ALTER DATABASE END BACKUP;

4)归档在线redo日志以便需要恢复表空间备份的redo对以后的介质恢复是可用的。
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;


3.2.2.2.串行备份联机表空间

可以将所有需要在线备份的表空间逐个置于备份模式。Oracle建议串行备份选项因为它最小化ALTER TABLESPACE … BEGIN/END BACKUP语句之间的时间。在联机备份期间,会为表空间生成更多的redo信息因为整个数据块被拷贝到redo日志。

串行备份联机表空间:
1)为联机备份准备表空间。例如,将表空间users置于备份模式:
SQL> ALTER TABLESPACE users BEGIN BACKUP;

在这种情况中,你或许不想使用ALTER DATABASE BEGIN BACKUP将所有表空间同时置于备份模式,因为会为其它表空间生成不必要的redo日志信息数量。

2)备份联机表空间中的文件。例如,Linux或UNIX用户可能备份使用*.dbf后缀的数据文件:
% cp /oracle/oradata/trgt/users01.dbf /d2/users01_‘date “+%m_%d_%y”’.dbf

3)将表空间退出备份模式。
SQL> ALTER TABLESPACE users END BACKUP;

4)为每个剩余的表空间重复这个过程。

5)归档未归档的redo日志以便恢复表空间备份需要的redo被归档。
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;


3.2.3.在实例故障或SHUT DOWN ABORT之后结束备份

以下情形会造成表空间备份失败和不完整:
1)备份完成了,但没有运行ALTER TABLESPACE … END BACKUP语句。
2)实例故障或SHUTDOWN ABORT中断了备份。

无论何时需要从故障中恢复,当尝试打开一个在备份模式中的数据文件时,数据库都不会打开数据文件直到执行恢复命令或数据文件从备份模式中退出。

例如,数据库可能在启动时显示一条比如以下的信息:
ORA-01113: file 12 needs media recovery
ORA-01110: data file 12: ‘/oracle/dbs/tbs_41.f’

如果数据库指示多个表空间的数据文件需要介质恢复因为你忘记终止这些表空间的在线备份,那么只要数据库是挂载的,运行ALTER DATABASE END BACKUP语句同时将所有数据文件退出备份模式。

在高可用和当没有数据库管理员监控数据库的情形中,要求用户介入是不可忍受的。因此,可以写一个故障恢复脚本做以下事情:
1)挂载数据库
2)运行ALTER DATABASE END BACKUP语句
3)运行ALTER DATABAES OPEN,让系统自动启动

包含ALTER DATABASE END BACKUP的自动崩溃恢复脚本在以下情况中是非常有用的:
1) Oracle RAC配置中的所有节点故障。
2)冷故障切换集群(集群不是Oracle RAC配置,当第一个节点故障时,第二个节点必须挂载和恢复数据库)中的一个节点故障。

或者,在系统有表空间在备份模式中时出现故障之后,可以采取以下手动措施:
1)恢复数据库和避免一起执行END BACKUP语句。
2)挂载数据库,然后为每个仍然在备份模式中的表空间运行ALTER TABLESPACE … END BACKUP语句。


3.2.3.1.使用ALTER DATABASE END BACKUP语句结束备份模式

当你有多个表空间仍然在备份模式时,可以运行ALTER DATABASE END BACKUP语句。这个命令的主要目的是允许崩溃恢复脚本重启故障系统而不需要DBA介入。也可以手动执行以下步骤。

同时将表空间退出备份模式:
1)挂载但不打开数据库。
SQL> STARTUP MOUNT

2)如果你手动执行这个步骤(也就是说,不是作为故障恢复脚本的一部分),在数据库重新启动之前查询V$BACKUP视图列出正在备份的表空间的数据文件:
SQL> SELECT * FROM V$BACKUP WHERE STATUS = ‘ACTIVE’;

FILE#     STATUS     CHANGE#    TIME    CON_ID
------- ---------- ---------- --------- -------
12 		 ACTIVE     20863     25-NOV-02   0
13 		 ACTIVE     20863     25-NOV-02   0
20 		 ACTIVE     20863     25-NOV-02   0

3)执行ALTER DATABASE END BACKUP语句将当前在备份模式中的所有数据文件退出备份模式。
SQL> ALTER DATABASE END BACKUP;

只有当数据库是挂载但没有打开时使用这个语句。如果数据库是打开的,那么对每个受影响的表空间或数据文件使用ALTER TABLESPACE … END BACKUP或ALTER DATABASE DATAFILE … END BACKUP。

警告:如果你已经从备份中还原任何受影响的文件,不要使用ALTER DATABASE END BACKUP。


3.2.3.2.使用SQL*Plus RECOVER命令结束备份模式

ALTER DATABASE END BACKUP语句不是唯一的应对失败的在线备份的方法。你也可以运行SQL*Plus RECOVER命令。当你不确定是否有人已经还原备份时这个方法是有用的,因为如果有人确实已经还原了备份,那么RECOVER命令将备份恢复至最新。只有你确定文件是当前的时候,运行ALTER DATABASE END BACKUP或ALTER TABLESPACE … END BACKUP 语句。

注:RECOVER命令的方法比较缓慢,因为数据库必须扫描从在线备份开始时生成的redo。

使用RECOVER命令将表空间退出备份模式:
1)挂载数据库。
SQL> STARTUP MOUNT

2)如平常一样恢复数据库。
SQL> RECOVER DATABASE

3)使用视图V$BACKUP确认不存在活动的数据文件:
SQL> SELECT * FROM V$BACKUP WHERE STATUS = ‘ACTIVE’;


3.2.4.制作联机只读表空间的用户管理备份

当备份联机只读表空间时,你可以简单地备份联机数据文件。你不需要将表空间置于备份模式,因为数据库不允许对数据文件进行更改。

如果只读表空间组是自包含的,那么除了使用操作系统命令备份表空间之外,你也可以使用可传输的表空间功能导出表空间的元数据。如果介质错误或用户错误发生(比如意外删除了只读表空间中的表),你可以传输表空间回到数据库。

备份打开的数据库中的联机只读表空间:
1)查询DBA_TABLESPACES视图来确认哪些表空间是只读的。
SELECT TABLESPACE_NAME, STATUS
FROM DBA_TABLESPACES
WHERE STATUS = ‘READ ONLY’;

2)在只读表空间备份开始之前,查询DBA_DATA_FILES数据字典视图识别表空间的所有数据文件。例如,假设你想备份history表空间:
SELECT TABLESPACE_NAME, FILE_NAME
FROM SYS.DBA_DATA_FILES
WHERE TABLESPACE_NAME = ‘HISTORY’;

TABLESPACE_NAME          FILE_NAME
--------------- -----------------------------------
HISTORY          /oracle/oradata/trgt/history01.dbf
HISTORY          /oracle/oradata/trgt/history02.dbf

3)使用操作系统命令备份只读表空间的联机数据文件。你不需要将表空间脱机或将表空间置于备份模式,因为用户会自动被阻止更改只读表空间。
% cp $ORACLE_HOME/oradata/trgt/history*.dbf /disk2/backup/

注:当还原只读表空间的备份时,将表空间脱机,还原数据文件,然后将表空间联机。如果只读表空间在备份之后改为可读写,只读表空间的备份仍然可用的,但还原的备份需要恢复。

4)可选地,导出只读表空间的元数据。通过使用可传输的表空间特性,你可以在出现介质故障或用户错误的情况时快速还原数据文件和导入元数据。例如,如下导出表空间history的元数据:
% expdp DIRECTORY=dpump_dir1 DUMPFILE=hs.dmp TRANSPORT_TABLESPACES=history
LOGFILE=tts.log


4.制作用户管理的控制文件备份

对在ARCHIVELOG模式中运行的数据库做了结构更改之后备份数据库的控制文件。为了备份数据库的控制文件,你必须具有ALTER DATABASE系统权限。

4.1.备份控制文件到二进制文件

备份控制文件的主要方法是使用SQL语句生成二进制文件。二进制备份比trace文件备份更好,因为它包含额外的信息比如归档日志记录,只读和脱机表空间的脱机范围,备份集和副本(如果使用RMAN)。如果COMPATIBLE是10.2或更高,二进制控制文件备份包括临时文件条目。

在结构性更改之后备份控制文件:
1)对数据库做期望的更改。例如,你可能创建了一个表空间:
CREATE TABLESPACE tbs_1 DATAFILE ‘file_1.f’ SIZE 10M;

2)备份数据库的控制文件,指定输出二进制文件的文件名称。
ALTER DATABASE BACKUP CONTROLFILE TO ‘/disk1/backup/cf.bak’ REUSE;

指定RESUE让新的控制文件覆盖当前存在的控制文件。


4.2.备份控制文件到trace文件

你可以备份控制文件到包含CREATE CONTROLFILE语句的文本文件。你可以编辑trace文件来创建一个脚本,脚本基于当创建trace文件时是当前的控制文件创建新的控制文件。

如果你没有在SQL语句中指定RESETLOGS或NORESETLOGS选项,那么产生的trace文件包含RESETLOGS和NORESETLOGS两个选项的控制文件版本。使用ALTER TABLESPACE … ADD TEMPFILE语句时,在输出中也包含临时文件条目。

为了避免恢复脱机正常的或只读表空间,编辑它们从CREATE CONTROLFILE语句中移出。当你使用重建的控制文件打开数据库时,数据库标记这些省去的文件为MISSING。你可以运行ALTER DATABASE RENAME FILE语句重命名它们到它们原始的文件名称。

包含CREATE CONTROLFILE语句的trace文件存储在DIAGNOSTIC_DEST初始化参数中确定的子目录中。可以在数据库alert日志中查找trace文件的名称和位置。
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_20297.trc

备份控制文件到trace文件:
1)挂载或打开数据库
2)执行以下SQL语句:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;


5.制作用户管理的归档redo日志备份

为了节省主归档位置的磁盘空间,你可能想备份归档日志到磁带或到备选的磁盘位置。如果你归档到多个位置,那么只备份每个日志序列号的一个副本。

备份归档redo日志:
1)查询V$ARCHIVED_LOG确认数据库已经生成哪些归档redo日志。
SELECT THREAD#,SEQUENCE#,NAME
FROM V$ARCHIVED_LOG;

2)使用操作系统工具备份每个日志序列号的一个副本。以下示例备份主归档位置中的所有日志到一个用于日志备份的磁盘:
% cp $ORACLE_HOME/oracle/trgt/arch/* /disk2/backup/arch


6.在SUSPEND模式制作用户管理的备份

6.1.关于Suspend/Resume特性

某些第三方工具允许你镜像磁盘或逻辑设备组,也就是说,在其它位置维护主数据的一个精确的复制,然后拆分镜像。拆分镜像涉及分离副本以便独立使用它们。

使用SUSPEND/RESUME功能,你可以挂起到数据库的I/O,然后拆分镜像,对拆分的镜像做备份。通过使用这个特性来补充备份模式功能,你可以挂起数据库I/O从而不执行新的I/O。然后你可以访问挂起的数据库来做备份而不需要I/O干预。

通常,你不需要使用SUSPEND/RESUME来做拆分镜像备份,虽然这是必要的,如果你的系统要求数据库在卷可以被拆分前缓存中没有脏缓冲区。当拆分操作在发生时,某些RAID设备从挂起写中受益;你的RAID供应商可以告知你的系统是否从这个特性受益。

ALTER SYSTEM SUSPEND语句通过停止到数据文件头部,数据文件和控制文件的I/O来挂起数据库。当数据库被挂起时,所有预先存在的I/O操作可以完成;然而,任何新的数据库I/O访问尝试将排队。

ALTER SYSTEM SUSPEND和ALTER SYSTEM RESUME语句在数据库上运行而不只是实例。如果ATLTER SYSTEM SUSPEND语句在Oracle RAC配置中的一个系统上执行,那么内部的锁机制跨实例传播停止的请求,因此为指定的集群中所有活动的实例挂起I/O操作。


6.2.在挂起数据库中制作备份

在成功挂起数据库之后,你可以备份数据库到磁盘或中断镜像。因为挂起数据库不保证立即中止I/O,Oracle建议你在ALTER SYSTEM SUSPEND语句之前执行BEGIN BACKUP语句以便将表空间置于备份模式中。

你必须使用传统的用户管理的备份方法来备份拆分的镜像。RMAN不能做数据库备份或拷贝因为这些操作要求读取数据文件头。在数据库备份完成或镜像重新同步(resilver)之后,你可以使用ALTER SYSTEM RESUME恢复正常的数据库操作。

备份挂起的数据库而不拆分镜像会导致延长的数据库中断,因为数据库在这个期间是不可访问的。如果通过拆分镜像来备份,那么中断是名义上的。中断时间取决于刷新缓存的大小,数据文件的数量和需要中断镜像的时间。

注意SUSPEND/RESUME特性的以下限制:
1)在Oracle RAC配置中,当原始的节点被挂起时不要启动新实例。
2)ALTER SYSTEM SUSPEND或ALTER SYSTEM RESUME语句不发起检查点。
3)当数据库挂起时,不能执行SHUTDOWN与IMMEDIATE,NORMAL,或TRANSACTIONAL选项。
4)在挂起的数据库上执行SHUTDOWN ABORT命令会重新激活数据库。这阻止介质恢复或故障恢复进入无响应状态。

在SUSPEND模式制作拆分镜像备份:
1)将数据库表空间置于备份模式。例如,将表空间users置于备份模式。
ALTER TABLESPACE users BEGIN BACKUP;

如果你在备份数据库所有的表空间,可以使用以下语句替代:
ALTER DATABASE BEGIN BACKUP;

警告:不要使用ALTER SYSTEM SUSPEND语句取代将表空间置于备份模式。

2)如果镜像系统在磁盘写发生时拆分镜像有问题,那么挂起数据库。
ALTER SYSTEM SUSPEND;

3)查询V$INSTANCE视图确认数据库已经被挂起。在一个不同的SQL会话中运行这个查询。
SELECT DATABASE_STATUS FROM V$INSTANCE;

DATABASE_STATUS
-----------------
SUSPENDED

4)在操作系统或硬件层拆分镜像。

5)结束数据库挂起。
ALTER SYSTEM RESUME;

6)查询V$INSTANCE视图确定数据库是活动的。
SELECT DATABASE_STATUS FROM V$INSTANCE;

DATABASE_STATUS
-----------------
ACTIVE

7) 将指定的表空间退出备份模式。例如,将表空间users退出备份模式:
ALTER TABLESPACE users END BACKUP;

8)像平常备份一样拷贝控制文件和归档在线redo日志文件。


7.制作用户管理的备份到裸设备

裸设备是一个没有文件系统的磁盘或分区。裸设备只包含一个文件。在裸设备上备份文件提出操作系统特定的问题。

7.1.在Linux和UNIX上备份到裸设备

在Linux和UNIX上的dd命令是备份到裸设备或备份来自裸设备的最常用的备份工具。

有效使用dd要求你基于数据库指定正确的选项。下表列出了关于数据库影响dd使用的选项的详情。

数据解释
Block size(块大小)可以指定dd用来拷贝数据的缓冲区大小。例如,你可以指定dd以8KB或64KB为单位拷贝数据。dd的块大小不需要对应Oracle的块大小或操作系统块大小:它只是dd用来拷贝数据的缓冲区大小。
Raw offset(裸偏移)在某些系统上,裸设备上的文件的开始部分被保留给操作系统使用。这个存储空间称为裸偏移。Oracle数据库不备份或还原这些字节。
Oracle数据库块0的大小在每个Oracle数据库文件的开头,操作系统特定的代码放置一个Oracle块称为块0。一般的Oracle代码不识别这个块,但块被包含在操作系统上的文件的大小中。通常,这个块是与文件中其它Oracle块一样的大小。

上表中的信息让你可以设置下表中指定的dd选项。

选项指定
if输入文件的名称,即你正在读取的文件
of输出文件的名称,即你正在写入的文件
bsdd用来拷贝数据的缓冲区大小
skip如果裸偏移存在,在输入的裸设备上跳过的dd缓冲区数量。例如,如果你备份裸设备上的文件有64KB裸偏移和dd的缓冲区大小是8KB,那么你可以指定skip=8以便拷贝从偏移量64KB开始。
seek如果裸偏移存在,在输出裸设备上跳过的dd缓冲区的数量。例如,如果你备份一个文件到64KB裸偏移的裸设备和dd的缓冲区大小是8KB,那么你可以指定seek=8以便输出从偏移量64KB开始。
countdd在输入裸设备上拷贝的块的数量。当从裸设备拷贝到文件系统时最好指定要拷贝的块的精确的数量;否则在裸卷尾部不被Oracle数据文件使用的额外空间会被拷贝到文件系统。
记得包含块0在输入文件的总大小中。例如,如果dd的块大小是8KB,你正在拷贝一个30720KB的数据文件,那么你可以设置count=3841。Count的这个值实际上备份30728KB:额外的8KB是用于Oracle块0。

由于裸设备可以是备份的输入或输出设备,你有4个可能的场景用于备份。dd的可能选项取决于选择了哪个场景,如下表中的描述。

备份来源备份目的地dd命令指定的选项
裸设备裸设备if, of, bs, skip, seek, count
裸设备文件系统if, of, bs, skip, count
文件系统裸设备if, of, bs, seek
文件系统文件系统if, of, bs

dd使用的这些示例,假设以下:
1)你正在备份一个30720KB的数据文件。
2)数据文件的开头有一个8KB的块0。
3)裸偏移是64KB。
4)当拷贝时涉及裸设备时设置dd的块大小为8KB。

从裸设备备份到另外一个裸设备的示例:
% dd if=/dev/rsd1b of=/dev/rsd2b bs=8k skip=8 seek=8 count=3841

从裸设备备份到文件系统的示例:
% dd if=/dev/rsd1b of=/backup/df1.dbf bs=8k skip=8 count=3841

从文件系统备份到裸设备的示例:
% dd if=/backup/df1.dbf of=/dev/rsd2b bs=8k seek=8

从文件系统备份到文件系统,设置块大小为更高的值来提升I/O性能:
% dd if=/oracle/dbs/df1.dbf of=/backup/df1.dbf bs=1024k


7.2.在Windows上备份到裸设备

像Linux和UNIX,Windows支持裸磁盘分区,数据库可以在其上存储数据文件,在线日志和控制文件。每个裸分区被分配一个盘符或物理驱动器号和不包含文件系统。如Linux和UNIX中一样,Windows上的每个裸分区映射为一个单一的文件。

Windows在为Oracle文件的命名惯例上与Linux和UNIX不一样。在Windows上,裸设备文件名称的格式如下:
\.\drive_letter:
\.\PHYSICALDRIVEdrive_number

例如,以下是可能的裸文件名称:
\.\G:
\.\PHYSICALDRIVE3

制作裸数据文件的用户管理的备份的过程基本上与在Windows文件系统上拷贝文件相同,除了使用Oracle OCOPY工具而不是Windows提供的copy.exe或ntbackup.exe工具。OCOPY支持64位的文件I/O,物理裸驱动器和裸文件。OCOPY工具不能直接备份到磁带。

在Windows提示符下输入OCOPY,将显示它的在线文档:
Usage of OCOPY:
ocopy from_file [to_file [a | size_1 [size_n]]]
ocopy -b from_file to_drive
ocopy -r from_drive to_dir

-b,分隔输入文件到多个输出文件。对于备份到比输入文件更小的设备,这个选项有用。
-r,合并多个输入文件和写到一个单一的输出文件。对于还原使用-b选项创建的备份,这个选项有用。

在以下示例中,假设以下:
1)数据文件12被挂载在\.\G:裸分区。
2)C:驱动器挂载一个文件系统。
3)数据库是打开的。

备份裸分区\.\G:上的数据文件到本地文件系统,可以在将数据文件12置于备份模式之后在提示符下运行以下命令:
OCOPY “\.G:” C:\backup\datafile12.bak

在以下示例中,假设以下:
1)\.\G: 是包含数据文件7的裸分区。
2)E: 驱动器是可移除的磁盘驱动器。
3)数据库是打开的。

为了备份数据文件到驱动器E:,你可以在将数据文件7置于备份模式之后在Windows提示符执行以下命令:
# first argument is file name, second argument is drive
OCOPY -b “\.\G:” E:\

当驱动器E:装满之后,可以使用其他磁盘。在这种方式中,可以分割数据文件7的备份为多个文件。

类似地,为了还原备份,将包含数据文件7的表空间脱机和运行以下命令:
# first argument is drive, second argument is directory
OCOPY -r E:\ “\.\G:”


8.与第三方快照技术结合制作备份

你可以使用存储快照优化来对数据库做第三方快照,而不用将数据库置于备份模式。快照必须遵循本章节中描述的要求。

存储快照优化提供以下好处:
1)消除将数据库置于备份模式相关的复杂性和消耗。
2)通过使用RECOVER … SNAPSHOT TIME命令在一个单一的步骤中执行恢复。你可以恢复到当前的时间点或做快照之后的时间点。

为了使用快照存储优化,第三方快照技术必须遵循以下要求:
1)数据库在快照期间是崩溃一致的。
2)快照为每个文件保持写顺序。
3)快照技术存储快照完成时的时间。

如果供应商不能保证遵守这些要求,那么你必须使用ALTER DATABASE或ALTER TABLESPACE语句与BEGIN BACKUP子语句将数据文件置于备份模式。就在创建快照之前将数据文件置于备份模式。当表空间在备份模式中时,数据库在更改块之前将整个数据块之前的映像写到redo流。数据库同时将对数据块的更改记录在在线redo日志中。备份模式同时也冻结数据文件检查点直到文件从备份模式中移除。Oracle数据库执行这个防卫因为它不能保证第三方备份工具在拷贝数据块之前拷贝文件头部。紧接在快照创建之后,使用ALTER DATABASE或ALTER TABLESPACE命令与END BACKUP子语句将数据文件退出备份模式。你不需要等待直到快照实际上被拷贝到备份介质来结束备份模式。

注:当被备份的数据库驻留在Oracle ASM上时,RMAN不支持基于存储的复制技术

卷影子拷贝服务(VSS)是一组Windows API让程序可以创建称为影子副本(shadow copy)的一致的快照。Oracle VSS writer在Windows系统上作为一个服务运行,与VSS启用的应用程序集成。你可以使用这些应用程序创建通过Oracle实例管理的数据库文件的快照。例如,当数据库以读写打开时,你可以制作Oracle数据库的影子副本。


9.验证用户管理的数据文件备份

你必须定期验证备份来确保它们可用于恢复。

测试数据文件备份的还原
测试数据文件备份的可用性的最好方式是还原它们到不同的主机和尝试打开数据库,如果必要执行介质恢复。这个选项要求你有不同的主机可用于还原过程。

运行DBVERIFY工具
DBVERIFY程序是一个外部的命令行工具,它对脱机数据文件执行物理数据结构完整性检查。使用DBVERIFY来确保用户管理的数据文件备份在被还原前是有效的,或当遇到数据损坏问题时作为辅助诊断手段。

DBVERIFY的名称和位置取决于操作系统。例如,在Linux或UNIX上对数据文件users01.dbf执行完整性检查:
% dbv file=users01.dbf




来源:《Oracle Database Backup and Recovery User’s Guide,19c》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值