第10章优化备份和恢复过程
许多数据库管理员都对O r a c l e的备份和恢复技术有较深入了解。恢复操作本身并不难,然而它在系统中的实现可能限制你的选项且难以应用。O r a c l e提供一系列的备份过程和选项以帮助保护O r a c l e数据库。如果正确使用它们,这些选项会使你能高效地备份数据库—并且很容易将其恢复。
O r a c l e的备份特性包括逻辑备份和物理备份,各自都有许多选项。O r a c l e的文档资料已对每个可能的选项和恢复情况进行了详细介绍;因此本章的重点将放在以尽可能最高效方式使用最佳的选项上。下面你将看到如何使备份过程和操作系统备份最好地相结合。将侧重介绍在O r a c l e8引入的备份特性。
10.1 特性
备份一个O r a c l e数据库有三种标准方式:E x p o r t(导出)、脱机备份( o f fline backup)和联机( A R C H I V E L O G)备份(online backup)。导出方式是数据库的逻辑备份,其他两种备份方式都是物理文件备份。在下面一节中,将全面描述这些选项。
10.2 逻辑备份
数据库的逻辑备份包括读一个数据库记录集和将记录集写入一个文件中。这些记录的读出与其物理位置无关。在O r a c l e中,E x p o r t实用程序就是用来完成这样的数据库备份的。若要恢复使用由一个导出生成的文件,可使用O r a c l e的I m p o r t实用程序。
10.2.1 导出
O r a c l e的E x p o r t实用程序用来读取数据库(其中包括数据字典)和把输出写入一个叫作导出转储文件(export dump file)的二进制文件中。可以导出整个数据库、指定用户或指定表。在导出期间,可以选择是否导出与表相关的数据字典信息,如权限、索引和与其相关的约束条件。
E x p o r t所写的文件包括完全重建全部被选对象所需的命令。
可以对所有表执行全数据库导出(叫作Complete export)或者仅对上次导出后修改过的表执行全数据库导出。增量导出有两种不同类型:I n c r e m e n t a l(增量)型和C u m u l a t i v e(累积)型。
I n c r e m e n t a l导出将导出上次导出后修改过的全部表,而C u m u l a t i v e导出将导出上次全导出后修改过的表。
可使用E x p o r t实用程序来压缩数据段碎片的盘区(见第8章)。
10.2.2 导入
一旦数据已经导出,就可以通过O r a c l e的I m p o r t实用程序将其导入。I m p o r t实用程序读取由E x p o r t创建的二进制导出转储文件并执行在那里发现的命令。例如,这些命令可能包括一个create table命令,随后是一个将数据装入表内的i n s e r t命令。
已导出的数据不必导入到同一个数据库中,也不必导入到与生成导出转储文件相同的模式中。可以使用导出转储文件来创建一个导出对象的复制集,其环境可以是不同的模式或独立的数据库。
可以导入全部或部分已导出的数据。如果导入一个全导出的整个导出转储文件,则所有数据库对象—其中包括表空间、数据文件和用户—都会在导入时创建。不过,为了在数据库中指定对象的物理分配,通常预先创建表空间和用户。
如果只打算从导出转储文件中导入部分数据,那么表空间、数据文件和将拥有并存储那些数据的用户必须在导入前设置好。
数据也可以导入到在高版本O r a c l e内核下创建的数据库中。可以使用O r a c l e相邻主要版本(如从O r a c l e7到O r a c l e8.0或从O r a c l e8.0到Oracle 8i )之间的这种数据迁移策略。虽然支持反向能力—从更加新的主要版本创建的一个导出文件中导入,但是需要一个附加操作。当数据从O r a c l e8迁移到O r a c l e7时,必须在O r a c l e8数据库中运行一次脚本文件c a t e x p7.s q l,以便使Oracle7 Export和I m p o r t实用程序可以正确操作。
当在不相邻的主要版本之间迁移数据(例如,从O r a c l e6到O r a c l e8)时,应先将数据导入到中间版本(本例中是O r a c l e7),然后再从这个版本的数据库导入更新的主要版本( O r a c l e8)。
10.3 物理备份
物理备份是拷贝构成数据库的文件而不管其逻辑内容如何。由于使用操作系统的文件备份命令,所以这些备份也被称作文件系统备份(file system backup)。
O r a c l e支持两种不同类型的物理文件备份:脱机( o f fline) 备份和联机(online) 备份(也叫作“h o t”(热)或“A R C H I V E L O G”备份)。
10.3.1 脱机备份
当数据库已经正常关闭(不包括由失败引起的关闭)时使用脱机备份。当数据库处于“o f f l i n e”时,要备
份下列文件:
• 所有数据文件。
• 所有控制文件。
• 所有联机重做日志。
• a文件(可选择)。
如果数据库文件结构使用一致的目录结构,备份数据文件就非常容易。第4章4 .1节“数据库文件设计”中的例子就是这样的结构。
当数据库关闭时,对所有这些文件进行备份可以提供一个数据库关闭时的完整镜像。以后可以从备份中获取整个文件集并恢复数据库的功能。除非正在执行一个联机备份,否则当数据库打开时不允许对数据库执行文件系统备份。
10.3.2 联机备份
可以为正在A R C H I V E L O G方式下运行的数据库使用联机备份。在这种方式下,联机重做日志被归档,在数据库内创建一个所有事务的完整记录。
O r a c l e以循环方式写入联机重做日志文件:在填满第一个日志文件后,开始写第二个文件,
直到填满;然后开始写第三个文件……。当最后一个联机重做日志文件填满后,L G W R(L o g Wr i t e r)后台进程开始重写第一个重做日志文件。
当以A R C H I V E L O G方式运行O r a c l e时,A R C H(A r c h i v e r)后台进程在写入前将每个重做日志文件做一个拷贝。这些归档的重做日志文件通常写入一个磁盘设备。也可以直接写入磁带,但这样势必要操作员参与。
假若是运行在A R C H I V E L O G方式下,数据库打开时就可以执行一个文件系统备份。联机备份包括将每一个表空间设为备份状态,接着备份其数据文件,然后再将表空间恢复为正常状态。
注意使用O r a c l e提供的Recovery Manager(RMAN)实用程序时,就不必将每个表空
间都置于备份状态。该实用程序将自动把表空间带进或带出备份状态。
数据库可从一个联机备份中完全恢复,并且可以通过归档的重做日志,前滚到任一时刻。只要数据库
是打开的,当时在数据库中任一提交的事务都将被恢复,任何未提交的事务都将被回滚。
数据库打开时,就备份以下文件:
• 所有数据文件。
• 所有归档的重做日志文件。
• 一个控制文件,通过alter database命令进行。
联机备份过程具备强有力功能的原因有两个。第一,提供了完全的时间点( p o i n t-i n-t i m e)恢复。第二,在文件系统备份时允许数据库保持打开状态。因此,即使在用户要求数据库不能关闭时也能备份文件系统。保持数据库打开状态也就可以避免数据库的System Global A r e a(S G A)被重新设置。避免内存重新设置可减少数据库对物理I /O数量的要求,从而改善数据库的性能。
10.4 实现
在本节中,除了使用Oracle Enterprise Manager(OEM)和Recovery Manager(RMAN)的命令文件样本及例子外,还将描述使用每种备份方式所需要的命令和过程。
10.4.1 导出
E x p o r t实用程序具有三种功能:
F u l l方式、U s e r方式和Ta b l e方式。可以通过一个修改的Ta b l e方式来导出分区。
在F u l l方式中,导出整个数据库。读取整个数据字典,重建整个数据库需要的D D L被写入导出转储文件中。这个文件包括对其模式下所有表空间、全部用户、全部对象、数据及权限的定义。
在U s e r方式,导出一个用户的某些对象及其本身的数据。由用户在其对象上创建的权限和索引也同时被导出。由用户(不是拥有者)创建的权限和索引不能通过这种方式导出。
在Ta b l e方式中,导出一个指定的表。表的结构、索引及权限与其数据(或不与数据)一并导出。Ta b l e方式也可以导出用户拥有的一个表集(由方式的拥有者指定而不是表名指定)。也可以指定表的部分导出。
E x p o r t可以通过O E M或R M A N(或者通过命令文件)交互式运行。表1 0-1列出了可以为E x p o r t指定的运行期选项。
表10-1 Export选项
关键字描述
u s e r i d执行导出的帐户的用户名/口令,如果这是e x p命令后的第一个参数,则关键字
u s e r i d就不必指定
b u f f e r用于获取数据行的缓冲区尺寸,缺省值随系统而定,通常设为一个高值( >64000)
f i l e导出转储文件的名字
f i l e s i z e一个导出转储文件的最大尺寸。如果f i l e条目中列出了多个文件,将根据f i l e s i z e
设置值导出这些文件
c o m p r e s s一个Y /N标志,用于指定导出是否应把碎片段压缩成单个盘区。这个标志影响
将存储到导出文件中的s t o r a g e子句
g r a n t s一个Y /N标志,用于指定数据库对象的权限是否导出
i n d e x e s一个Y /N标志,用于指示表上的索引是否导出
r o w s一个Y /N标志,用于指示行是否导出。如果设置为N,在导出文件中将只创建数
据库对象的D D L
c o n s t r a i n t s一个Y /N标志,用于指示表上的约束条件是否导出。
f u l l若设为Y,执行F u l l数据库导出
o w n e r导出数据库帐户的清单;可以执行这些账户的U s e r导出
t a b l e s导出表的清单,可以执行这些表的Ta b l e导出
r e c o r d l e n g t h导出转储文件记录的长度,以字节为单位。除非是在不同的操作系统间转换导
出文件,否则就使用缺省值
i n c t y p e要执行的导出类型(允许值为C O M P L E T E (缺省)、C U M U L A T I V E和
I N C R E M E N T A L),导出类型将在下几节描述
d i r
e c t一个Y /N标志,用于指示是否执行D i r e c t导出。D i r e c t导出在导出期间绕过缓冲
区,从而大大提高导出处理的效率
r e c o r d用于I n c r e m e n t a l导出,这个Y /N标志指示一个记录是否存储在记录导出的数据
字典表中
p a r f i l e传递给E x p o r t的一个参数文件名。这个文件可以包含这里列出的全部参数条目s t a t i s t i c s这个参数指示导出对象的a n a l y z e命令是否应写到导出转储文件上。其有效值是
C O M P U T E、E S T I M A T E(缺省)和N。在较早的O r a c l e版本中,这个参数叫作
A N A L Y Z E
c o n s i s t e n t一个Y /N标志,用于指示是否应保留全部导出对象的读一致版本。在E x p o r t处理
期间,当相关的表被用户修改时需要这个标志
l o g一个要写导出日志的文件名
f e e d b a c k表导出时显示进度的行数。缺省值是0,所以在一个表全部导出前没有反馈显示
p o i n t_i n_t i m e_r e c o v e r一个Y /N标志,用于向O r a c l e指示,是否正在导出用于表空间时间点恢复的元数
oracle 时间转换据。这是个高级恢复技术,见本章1 0.6节
r e c o v e r_t a b l e s p a c e s在表空间时间点恢复期间,其元数据应被导出的表空间
q u e r y导出时用于每个表的w h e r e子句
t r a n s p o r t_t a b l e s p a c e如果正在使用O r a c l e8i的可移动表空间选项,就设置成Y。和关键字t a b l e s p a c e一
起使用
t a b l e s p a c e s移动一个表空间时应导出其元数据的表空间
一系列的参数相互冲突会造成E x p o r t的指令不一致。例如,设置F U L L=Y且O W N E R=H R 就会失败,这是因为F U L L参数调用F u l l导出,而O W N E R参数指定U s e r导出。
O r a c l e8i的这些关键字的缺省值示于表1 0-2。最后两个参数T R A N S P O R T _T A B L E S P A C E 和TA B L E S P A C E S只用于可移植表空间,而P O I N T_I N_T I M E_R E C O V E R和R E C O V E R Y _ TA B L E S P A C E S只用于表空间时间点恢复。
表10-2 Export的参数缺省值
可以通过下列命令联机显示这些参数:
exp help=Y
对于有多个盘区的数据段,C O M P R E S S=Y选项可修改s t o r a g e子句的i n i t i a l参数。因此,该段的总分配空间应压缩到一个盘区。这里应着重注意两点:
• 第一,压缩的空间是分配的( a l l o c a t e d)空间而不是使用的( u s e d)空间。一个分配有3个
1 00M B盘区的3 00M B空表,将压缩成一个3 00M B的空盘区。不会回收空间。
• 第二,若表空间具有多个数据文件,一个数据段可以分配的空间可能会大于最大的那个数据文件。在这种情况下,使用C O M P R E S S将改变s t o r a g e子句使i n i t i a l盘区大于任何一个数据文件尺寸。由于一个盘区不能跨越多个数据文件,所以在导入时创建对象将失败。
当导出H R和T H U M P E R拥有者时,在下面的例子中使用了C O M P R E S S=Y选项:
本章后面将描述用Oracle Enterprise Manager工具执行一个导出的每一步过程。
1. 完全导出与增量/累积导出
当使用F U L L参数时,INCTYPE 参数允许数据库管理员仅导出前次导出后修改过的表。若表中的任一行修改过,则表的每一行通过I n c r e m e n t a l或C u m u l a t i v e导出来导出。表1 0-3描述了I N C T Y P E有效选项。
表10-3 导出的I N C T Y P E选项
选项描述
C O M P L E T E缺省值。导出所有指定的表
C U M U L A T I V E如果F U L L=Y,就可以指定这个选项。仅导出前次任何类型的F U L L导出后修
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论