oracle之三目录库和辅助库

目录库和辅助库

10.1 创建目录库(Catalog database)的必要性

如果没有catalog,RMAN的存储库(元数据)保存在目标库的控制文件里,这样可能存在如下隐患

1)目标库上的控制文件损坏,造成该目标库上RMAN元数据丢失。尽管你做了数据备份,但如果没有autobackup,RMAN就很难找那些备
份集了。
2)RMAN元数据受控制文件参数control_file_record_keep_time限制,缺省是7天,超时可能被覆盖,即造成老化的元数据丢失。

对此,我们可以在另一台服务器上建立一个Catalog Database

优点是:
1)它不受时间限制,不会被覆盖,理论上是无限期的存储rman元数据历史信息。
2)它多了一份目标库的RMAN元数据副本。
3)使用一个catalog目录库就可以管理许多目标库,所谓集中管理多个目标库,这些目标库可以是不同平台,不同版本。
4)它可以使用脚本catalog script 这是catalog独有的功能,使RMAN的备份与恢复更加灵活,自动化。

10.2 Catalog database 的配置

catalog目录库在生产环境中一定要建在一台独立的Oracle server上, 不要建在同一台目标机上。

配置一个Catalog的简单操作:catalog :win-oracle-orcl target:linux-oracle-timran11g

1)创建Catalog所用表空间

SQL> create tablespace rman_ts datafile 'E:\rman.dbf' size 50m;

2)创建RMAN用户并授权

SQL> create user rman identified by rman default tablespace rman_ts;
SQL> grant resource,recovery_catalog_owner to rman;
SQL> exit

3)从RMAN客户端上同时连接target库和catalog库
C:>rman target sys/system@timran11g catalog rman/rman@orcl

连接到目标数据库:TIMRAN(DBID=4035750304)
连接到恢复目录数据库

4)创建catalog目录,(建了一大堆表)
RMAN>create catalog tablespace rman_ts;
恢复目录已创建

//这一步Oracle到底做了些什么?你可以使用rman用户登录catalog查看user_objects视图,比较显示结果。
xp下sqlplus rman/rman
SQL> select object_name,object_type from user_objects;

5)注册目标库,(登记你连接上的那个target,把target上控制文件中的rman信息同步到catalog里)
RMAN>register database;

注册在恢复目录中的数据库
正在启动全部恢复目录的resync
完成全部resync

至此创建Catalog过程完毕,可以测试一下结果。

一般而言,每次连接target和catalog时target库的控制文件都会自动刷新到Catalog库。但如果target库结构有改变,或在备份期间有大量online日志归档,Catalog这边可能没有自动更新,必要时做一下手动同步。这种同步是整体的刷新,也叫full resync.

RMAN> RESYNC CATALOG;

10.3 catalog连接targe方法,有三种方法:

第一种,我们前面已经用过,在连接catalog时同时连接target

第二种,先进入RMAN,再分别connect target|catalog

第三种,先进入catalog,然后再使用connect target命令连接target

演示一下第三种方法:
现在有两个target,一个是timran11g(linux), 另一个是orcl(xp), 看看catalog如何连他们(只能分别连)

1)使用rman连接到catalog
C:\Documents and Settings\timran>rman catalog rman/rman@orcl

连接到恢复目录数据库
2)连接到一个target,再连另一个target时报错
RMAN> connect target sys/system@timran11g

连接到目标数据库: TIMRAN11 (DBID=3439065160)

RMAN> connect target sys/system@orcl;

报错,原因是catalog一次只能连一个target(考点)

RMAN> exit
连接到orcl
RMAN> connect target sys/system@orcl;

连接到目标数据库: ORCL (DBID=1335748581)

RMAN> register database;

注册在恢复目录中的数据库
正在启动全部恢复目录的 resync
完成全部 resync

10.4 RMAN catalog 的存储脚本

非catalog的rman脚本可以作为操作系统文件来存储,比如:将下面的两个命令保存到一个名为timran.rcv文件中

run{
backup database plus archivelog delete all input;
delete obsolet;
}

那么可以在操作系统下调用该脚本

$rman target / catalog rman/rman@orcl @timran.rcv

但是如果有catalog目录的话,可以在rman catalog里存储脚本

有关脚本的命令有:

create [global] script
replace [global] script
print [global] script
list [global] script names
exectue [global] script
delete [global] script

10.5 导入catalog database(考点)(PPT-II-83)

可能有多个catalog的环境, 一些catalog针对来自不同Oracle版本的target,可以使用IMPORT CATALOG将这些目录合并为一个目录。默认时,
源catalog中注册的所有target的元数据导入到目标catalog, 也可以指定想要导入到目标catalog的target,而且默认的RMAN不注册从源
catalog导入的target,可以通过NO UNREGISTER子句添加到IMPORT CATALOG命令使这些target自动注册。

例:使用IMPORT CATALOG命令合并两个catalog(将10g版本的catalog合并到11g版本catalog)

$rman

第一步,连接到目标恢复目录,(11g版本)

RMAN> connect catalog rman/rman@rman11

第二步,发布import catalog命令,将源catalog(10g)与目标catalog(11g)连接,并将所有源catalog上的target database导入目标catalog

RMAN> import catalog rman1/rman1@rman10

也可以指定要导入的target database
RMAN> import catalog rman1/rman1@rman10 dbid=123456,1234557;

考点:
1)到目标库的RMAN连接通常是SYS用户,因为一般需要在RMAN里发出启动或关闭数据库,但是不需要指定AS SYSDBA。
2)创建catalog目录的版本必须高于或等于任何目标库的数据库版本,因此可以创建单个版本为11.1.0.6的目录加补丁集6。
3)使用create script建立本地脚本,它只让你连接单个目标库,使用create global script命令创建全局存储脚本,它适用于所有目标库,
但不能同时对多个目标库执行命令。 本地脚本和全局脚本都保存在RMAN catalog里。
4)迁移过来的global script如果有重名出现,RMAN会重命名它们。
5)使用exectue去执行脚本,它必须包含在RUN{}。可以参考笔记最后的附录部分,有《 Oracle一周备份计划范例》。

10.6 虚拟专用目录(PPT-II-84-86)

一个catalog可以注册你单位的所有数据库的详细信息,当target服务器比较多,如果让某个DBA只能查看CATALOG中某些元数据,那么可以
利用Oracle11提供的虚拟专用目录 (virtual private catalog),你可以通过只授予CATALOG目录中某个元数据子集的访问权,严格限制某个
DBA对CATALOG目录的访问。

与虚拟专用目录(virtual private catalog)概念相关的是基恢复目录( base recovery catalog)。使用虚拟专用目录的前提是必须有基目录。这两种类型的目录差别只是虚拟专用目录只能访问他们有访问权限的那些数据库,而基目录拥有者可以访问所有注册的数据库。(考点)

一道考题:考点是建立虚拟目录的步骤:
条件:
基目录(base catalog)下有数据库:PROD1, PROD2, PROD3
用户CATOWNER有基目录权限,希望让新用户VPC1仅仅管理PROD1
问:如何建立虚拟目录(virtual catalog)

1.SQL> GRANT recovery_catalog_owner TO vpc1; //为VPC1用户授权
2.RMAN> CONNECT CATALOG catowner/password@catdb; //CATOWNER用户登录catalog server
3.RMAN> GRANT CATALOG FOR DATABASE prod1 TO vpc1; //为VPC1指定PROD1的管理权限
4.RMAN> CONNECT CATALOG vpc1/password@catdb; //VPC1用户登录catalog server
5.RMAN> CREATE VIRTUAL CATALOG; //VPC1用户建立 virtual catalog

10.7 复制数据库 Duplicate Database

10.8.1 名词定义:
Source Database (或source host)源数据库
Duplicate Database (或new host)新复制的数据库
Catalog Database (或catalog host) 目录库

10.8.2 Duplicate Database有手工方法和RMAN方法,RMAN Duplicate可以有两个用途:

1)用于测试的Database

就是source host的一个copy, RMAN通过不完全恢复复制出来一个new host,如果source和new host都在一个平台上,文件路径命名不能相同,
如果是两个平台(不支持异构),文件路径命名可同也可不同。 无论如何new host有唯一的DBID。

2)Standby用途Database
典型的就是Data Guard, Standby Database的主要功能是可以提供Failover, 所以Primary database会将log输送到Standy Database.使其不断更新数据。

10.8.3 RMAN使用Duplicate命令又有两种模式:

1)Backup-Based Duplication

基于RMAN备份的,利用RMAN备份创建辅助库

2)Active Database Duplication

基于RMAN网络的,从源数据库通过网络(不使用RMAN备份)直接创建辅助库。


10.8.4 RMAN Duplicate( for Database or Standby Database)的基本框架(PPT-II-535)

一般步骤:

1)将辅助库上安装数据库软件,建立Oracle Home
2)为辅助库建立口令文件, Active方式下与源数据库口令相同。
3)确保到辅助实例的网络连通性 (建立静态监听)
4)为辅助实例创建参数文件
5)以nomount方式启动辅助实例 (启动静态监听)
6)在mount或open模式下启动目标数据库
7)创建备份或将备份和归档日志文件复制到辅助库实例可以访问的某个位置,除非正在使用活动(active)数据库复制
8)如果有必要分配辅助通道
9)运行rman duplicate命令
10)使用resetlogs打开辅助数据库 (体现了duplicate是个不完全恢复)

例1, Duplicating to a Host with the Same Directory Structure (Active)

DUPLICATE TARGET DATABASE TO dupdb
FROM ACTIVE DATABASE
PASSWORD FILE
SPFILE
NOFILENAMECHECK;

解析:
基于网络的复制数据库,此例是Active方式,source host和target host需要同样的一个PASSWORD FILE, SPFILE是复制
过去的(没有任何参数修改)。两个节点有着相同的目录结构及文件命名。NOFILENAMECHECK的意思是不检查文件是否
重名,因为source host和duplicate host 不是一个平台。

例2, Duplicating a Database Without a Target and Recovery Cataaflog Connection (Backup-Based)

DUPLICATE DATABASE TO dupdb
UNTIL TIME "TO_DATE('11/01/2007 14:00:00', 'MM/DD/YYYY HH24:MI:SS')"
SPFILE
BACKUP LOCATION '/prod_backups'
NOFILENAMECHECK;

解析:
基于备份的复制数据库,此例RMAN只连接了duplicate host(dupdb), source host的备份已经放在duplicate host能找的到的/prod_backups目录下。

例3, Duplicating a Standby Database to a Host with the Different Directory Structure (Active)

DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
PASSWORD FILE
SPFILE
PARAMETER_VALUE_CONVERT '/disk1', '/disk2'
SET DB_UNIQUE_NAME 'dup1'
SET DB_FILE_NAME_CONVERT '/disk1','/disk2'
SET LOG_FILE_NAME_CONVERT '/disk1','/disk2'
SET SGA_MAX_SIZE 200M
SET SGA_TARGET 125M;

解析:
基于网络的复制Standby数据库, RMAN并不是简单复制source host的spfile到duplicate host,它通过spfile子句做了一些参数指定及
修改,duplicate host这边必须指定一个新的DB_UNIQUE_NAME以区别source host(因为它们的db_name是相同的),duplicate host
使用新的spfile启动实例,然后通过网络(active方式)复制source host所有的datafile,archivelog到duplicate host的新的路径下。

考点:
1)duplicate目前还不支持跨平台的复制,如windows--linux就是两个平台。(windows32位和64位算是一个平台)。
2)必须保证RMAN的备份能使new host访问到(非active方式)。
3)Active模式要保证source host和duplicate host两端有同样的sys口令文件.
4)如果是复制test database,Oracle依靠不同的DBID区别source host和duplicate host。
如果是复制standby database,Oracle依靠db_unqiue_name区分 primary host和standby host。
5)基于backup的duplicate是由auxiliary channel工作,而基于active的duplicate是由target channel工作。
6)初始化参数DB_FILE_NAME_CONVERT指定数据文件和临时文件的映射名称。
初始化参数LOG_FILE_NAME_CONVERT指定联机重做日志文件的映射名称。
7)也可以通过duplicate database中的spfile子句指定上面两个参数。
8)duplicate是一个不完全恢复,因为rman不备份联机redo logfile。

范例,RMAN通过网络(active方式)在新节点上复制一个数据库名和路径都相同timran11数据库。

一)名词定义:
source database------->duplicate database //duplicate端只安装了Oracle软件,没有创建数据库。
db_name---->timran11 //source端的数据库名
instance_name---->timran11g //source端的实例名

二)准备工作(duplicate 端)
1)首先要说明的是,我们当前的控制文件是来自一个备份的控制文件(在范例2恢复了一个误删除的表空间)。而复制数据库是一个
不完全恢复过程,因为它不复制当前日志,但为了尽可能接近完全恢复,duplicate命令生成恢复脚本时会自动将当前日志归档,
测试表明: 11gR1版本在RMAN基于网络复制技术时,如果使用一个老控制文件可能无法顺利穿越incarnation,进而造成复制过程中断。如提示:
RMAN-20242: specification does not match any archived log in the recovery catalog
解决的办法是在source端使用 trace脚本重建控制文件,如果你的生产系统的当前控制文件不是来自一个备份的控制文件,则不需要这一步骤。
2)建立duplicate 端的静态参数文件,使用了一个哑参文件,其中只有一个db_name参数的描述
3)建立或复制一个和source端一样的远程口令文件。
[oracle@timran dbs]$ more dummy.ora
db_name='timran11'

[oracle@timran dbs]$ scp 192.168.0.88:/u01/oracle/dbs/orapwtimran11g ./
[oracle@timran dbs]$ ll
总计 9548
-rw-rw-r-- 1 oracle oracle 17 05-31 21:21 dummy.ora
-rw-r----- 1 oracle oracle 1536 05-31 22:10 orapwtimran

三)检查duplicate数据库需要的几个空目录:

1)/u01/admin/timran11g/admin子目录已存在(审计参数audit_file_dest指定的)
2)/u01/flash_recovery_area已存在
3)/u01/disk1/timran指定的归档目录已存在
4)/u01/oracle/dbs下的两个文件要建立
一个是静态参数文件(哑参)-----dummy.ora
一个是source database 的远程口令文件副本---orapwtimran11g
5)/u01/oradata/timran11g目录已存在

四)source端和duplicate端之间的oracle net一定要配置好

网络复制是通过source端和duplicate端之间的oracle net, 必须保证两端的监听都能启动,duplicate端用的是静态监听,source端使用静态/动态两可。

下面是duplicate 端的静态监听配置文件

[oracle@timran dbs]$ more /u01/oracle/network/admin/listener.ora

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.99)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME= timran11g)
(ORACLE_HOME = /u01/oracle)
(SID_NAME = timran11g)
)
)

下面source和duplicate两端的tnsnames.ora, 两端都必须配置,两端内容相同即可。

[oracle@timran dbs]$ more /u01/oracle/network/admin/tnsnames.ora
vbox88 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.88)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = timran11g)
)
)

vbox99 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.99)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = timran11g)
)
)

五)开始复制
1)先将两端监听都启动,source端数据库在open下, duplicate端还没有数据库呢,所以是未启动状态。

2)duplicate端使用静态监听启动到nomount下
SQL> startup nomount pfile=/u01/oracle/dbs/dummy.ora

3) 检查source和duplicate之间的Oracle net连通性。
99端:
[oracle@timran ~]$ tnsping vbox88
88端:
[oracle@timran ~]$ tnsping vbox99

4)在duplicate端使用rman同时连接 source和duplicate
[oracle@timran dbs]$ rman target sys/system@vbox88 auxiliary sys/system@vbox99

连接到目标数据库: TIMRAN11 (DBID=4110732772)
已连接到辅助数据库: TIMRAN11 (未装载)

5) 开始RMAN通过网络复制数据库
RMAN> duplicate target database to timran11 from active database spfile nofilenamecheck;
......

---------------------------
上例复制的target和source的dbid是不同的,但它们有相同的db_name和数据库文件路径,如果要复制一个新的db_name, 且路径与source不同的auxiliary该如何描述

DUPLICATE TARGET DATABASE
TO auxtim
FROM ACTIVE DATABASE
SPFILE
SET DB_NAME 'auxtim'
SET LOG_ARCHIVE_DEST_1='location=/u01/disk1/auxtim'
SET CONTROL_FILES=
'/u01/oradata/auxtim/control01.ctl',
'/u01/oradata/auxtim/control02.ctl',
'/u01/oradata/auxtim/control03.ctl'
SET DB_FILE_NAME_CONVERT '/u01/oradata/timran','/u01/oradata/auxtim'
SET LOG_FILE_NAME_CONVERT '/u01/oradata/timran','/u01/oradata/auxtim'
NOFILENAMECHECK;

posted on 2018-06-12 08:28  小孩没穿鞋  阅读(268)  评论(0编辑  收藏  举报

导航