签到成功

知道了

CNDBA社区CNDBA社区

RMAN Catalog备份及恢复

2018-06-02 15:23 3779 0 原创 RMAN备份
作者: Marvinn

RMAN Catalog备份及恢复

参考官方链接:https://docs.oracle.com/cd/B28359_01/backup.111/b28270/rcmcatdb.htm#BRADV8015http://www.cndba.cn/Marvinn/article/2831

CATALOG与NOCATALOG区别,参考群主大大文章链接:https://blog.csdn.net/tianlesoftware/article/details/5641763http://www.cndba.cn/Marvinn/article/2831

Catalog恢复目录(即catalog方式)支持如下的命令
{CREATE|UPGRADE|DROP} CATALOG 
{CREATE|DELETE|REPLACE|PRINT} SCRIPT. 
LIST INCARNATION 
REGISTER DATABASE 
REPORT SCHEMA AT TIME 
RESET DATABASE 
RESYNC CATALOG 

1、Resync命令 
Resync可以同步数据库控制文件与恢复目录之间的相关备份信息,在实际情况下,rman一般可以自动同步(即使用Catalog恢复目录不管是backup备份还是restore恢复都会自动同步) 
在如下情况下需要同步 
·数据库物理结构的改变 
·数据文件增加或者是改变大小 
·表空间删除 
·回滚段的创建与删除 
·nocatalog与catalog结合使用时,需要先nocatalog备份,再catalog恢复目录备份,这样就不用手动同步(备份顺序反过来就需要手动同步)

2、Reset 命令 
目标数据库不完全恢复resetlogs 之后,需要重新设置恢复目录。Reset命令就用来重新设置恢复目录

目录 总结说明一、创建数据库catadb 1.1 官档建库脚本1.2 修改建库脚本1.3 创建目录并授权1.4 脚本建库1.4.1 声明ORACLE_SID1.4.2 编辑初始化参数文件1.4.3 创建服务器参数文件并启动实例1.4.4 运行脚本建库1.4.5 配置监听以及Tnsnames.ora二、配置catadb为catalog数据库2.1、创建表空间2.2、创建用户2.3、创建CATALOG2.4、目标数据库注册CATALOG三、管理CATALOG数据库3.1、创建和管理VPC3.2、创建和管理存储脚本3.2.1、创建存储脚本3.2.2 存储脚本管理四、脚本备份执行五、恢复验证

总结说明

    1、CATALOG恢复目录数据库是可以备份恢复管理多个数据库的,即 一个 CATALOG恢复目录数据库 可以注册多个数据库,而注册多个 Target  数据库以后,可以分给不同的虚拟用户目录进行管理,即VPC< virtual private catalog >虚拟用户目录
    2、当前实验环境是一个CATALOG恢复目录,注册管理多个Target,并使用VPC虚拟用户进行分开管理

总结:
    1、NOCATALOG 备份信息存在在数据库控制文件,受参数control_file__record_keep_time影响,设置备份信息保存时间,到规定时间就自动清除以前的备份信息,可以理解为备份过期,所以,nocatalog时利用controlfile存放备份信息,建议将Oracle参数文件中的CONTROL_FILE_RECORD_KEEP_TIME值加大(缺省为7天),保证几天的恢复量,必须大于RMAN 保留策略RECOVERY WINDOW OF 7 days,所以,对于控制文件的备份很重要,这也是为什么backup database 最好加上include current controlfile原因
    2、CATALOG单独存储备份信息,为此,我们只要确保CATALOG恢复目录数据库正常,也就相当于间接备份数据库控制文件
    3、备份CATALOG数据库:因为CATALOG数据库包含了所有的备份信息,所以该数据库本身也是需要通过某种方法进行备份,但因为该数据库很小(一年内可能才增加十几二十兆),所以既可以对它进行冷备份,也可以进行逻辑的输出(EXPORT)
    4、对于DBA管理多个数据库时,备份恢复的管理,CATALOG不妨是个比较好的管理方式

一、创建数据库catadb http://www.cndba.cn/Marvinn/article/2831

其实关于创建数据库,可以不使用该方法创建,只是想熟悉下手工建库过程,直接DBCA创建数据库catalogdb即可,直接可以省略很多麻烦...

1.1 官档建库脚本

CREATE DATABASE mynewdb
   USER SYS IDENTIFIED BY sys_password
   USER SYSTEM IDENTIFIED BY system_password
   LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512,
           GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log') SIZE 100M BLOCKSIZE 512,
           GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/redo03b.log') SIZE 100M BLOCKSIZE 512
   MAXLOGFILES 5
   MAXLOGMEMBERS 5
   MAXLOGHISTORY 1
   MAXDATAFILES 100
   CHARACTER SET US7ASCII
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
   SYSAUX DATAFILE '/u01/app/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
   DEFAULT TABLESPACE users
      DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'
      SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'
      SIZE 20M REUSE
   UNDO TABLESPACE undotbs
      DATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

1.2 修改建库脚本http://www.cndba.cn/Marvinn/article/2831

sys_password -> marvinn                 --更换SYS用户密码
system_password -> marvinn             --更换SYSTEM用户密码
US7ASCII -> AL32UTF8
mynewdb -> catadb
/u01/logs/my -> /u01/redo/
/u02/logs/my -> /u01/redo/
/u01/app/oracle/oradata -> /u01/oradata

可以vi批量替换,比如:%s#/u01/logs/my#/u01/redologs/a#g替换所有/u01/logs/my为/u01/redo/

修改完如下:

vi /u01/create_db.sql

注意:数据库库名不能超过8字符,否则报错,起库报错:

ORA-01127: database name ‘catalogdb’ exceeds size limit of 8 characters

CREATE DATABASE catadb
   USER SYS IDENTIFIED BY marvinn
   USER SYSTEM IDENTIFIED BY marvinn
   LOGFILE GROUP 1 ('/u01/redo/redo01a.log','/u01/redo/redo01b.log') SIZE 100M BLOCKSIZE 512,
           GROUP 2 ('/u01/redo/redo02a.log','/u01/redo/redo02b.log') SIZE 100M BLOCKSIZE 512,
           GROUP 3 ('/u01/redo/redo03a.log','/u01/redo/redo03b.log') SIZE 100M BLOCKSIZE 512
   MAXLOGFILES 5
   MAXLOGMEMBERS 5
   MAXLOGHISTORY 1
   MAXDATAFILES 100 
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/u01/oradata/catalogdb/system01.dbf' SIZE 325M REUSE
   SYSAUX DATAFILE '/u01/oradata/catalogdb/sysaux01.dbf' SIZE 325M REUSE
   DEFAULT TABLESPACE users
      DATAFILE '/u01/oradata/catalogdb/users01.dbf'
      SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/u01/oradata/catalogdb/temp01.dbf'
      SIZE 20M REUSE
   UNDO TABLESPACE undotbs
      DATAFILE '/u01/oradata/catalogdb/undotbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

1.3 创建目录并授权

创建建库脚本中的指定目录…并授权

http://www.cndba.cn/Marvinn/article/2831

#redologs和datafiles

mkdir -p /u01/redo/ && mkdir -p /u01/oradata/catalogdb
chown oracle:oinstall /u01/redo/  /u01/oradata/catalogdb

#controlfiles
mkdir -p /u01/oradata/controlfile/ 
chown oracle:oinstall /u01/oradata/controlfile/

1.4 脚本建库

1.4.1 声明ORACLE_SIDhttp://www.cndba.cn/Marvinn/article/2831

export ORACLE_SID=catadb

1.4.2 编辑初始化参数文件

查看物理内存大小,当前物理内存4G左右
oracle@catalog:/home/oracle>free -m
             total       used       free     shared    buffers     cached
Mem:          3832        283       3549          0         90        103
-/+ buffers/cache:         90       3742
Swap:         4031          0       4031
oracle@catalog:/home/oracle>                               

编辑初始化参数文案进
vi $ORACLE_HOME/dbs/init$ORACLE_SID.ora

编辑添加如下:
DB_NAME=catadb
CONTROL_FILES=('/u01/oradata/controlfile/control01.ctl','/u01/oradata/control02.ctl')
MEMORY_TARGET=2G

注意:
    1、MEMORY_TARGET 参数值不能大于系统物理内存大小,否则创建SPFILE会报错误
    2、参数文件编辑,可以参照已有正常数据库的PFILE,进行编辑修改,再创建SPFILE,也是可行的

1.4.3 创建服务器参数文件并启动实例

创建服务器参数文件,以服务器参数文件启动数据库

oracle@adam:/u01/oradata>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Mon May 28 18:26:46 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> create spfile from pfile;

File created.

SQL> startup nomount;
ORA-00845: MEMORY_TARGET not supported on this system
SQL> 

1.初始化参数MEMORY_TARGET或MEMORY_MAX_TARGET不能大于共享内存(/dev/shm),为了解决这个问题,可以增大/dev/shm
[root@adam ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_adam-lv_root
                       35G   13G   21G  38% /
tmpfs                 1.0G     0  1.0G   0% /dev/shm
/dev/vda1             477M   28M  425M   7% /boot
shmfs                 2.0G     0  2.0G   0% /dev/shm
2.为了确保操作系统重启之后能生效,需要修改/etc/fstab文件
vi /etc/fstab
增加shm挂载大小
tmpfs                   /dev/shm                tmpfs   defaults,size=2g        0 0

重新mount,使之生效
[root@adam ~]# mount -o remount /dev/shm

重新起库nomount状态
SQL> startup nomount;
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size                  2260088 bytes
Variable Size             616563592 bytes
Database Buffers          444596224 bytes
Redo Buffers                5517312 bytes

1.4.4 运行脚本建库

SQL> @/u01/create_db.sql
   NATIONAL CHARACTER SET AL16UTF16
   *
ERROR at line 12:
ORA-12701: CREATE DATABASE character set is not known

报错:之前参考MOS文章:ORA-12701 When Creating a Database (文档 ID 1058400.6) export ORA_NLS10=$ORACLE_HOME/nls/data 未能解决,再次查看建库脚本 发现数据库字符集写错
   CHARACTER SET AL32UTFB
   NATIONAL CHARACTER SET AL16UTF16
修改成
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16

注意:若是建库失败,需要清理之前已经创建好的文件,比如:控制文件,日志文件等,重新建库,否则报错无法创建
SQL> @/u01/create_db.sql
CREATE DATABASE catadb
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-01501: CREATE DATABASE failed
ORA-00301: error in adding log file '/u01/redo/redo01a.log' - file cannot be
created
ORA-27038: created file already exists
Additional information: 1
Process ID: 9636
Session ID: 16 Serial number: 1

清理完毕,重新建库
oracle@adam:/u01/redo>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue May 29 09:48:57 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup nomount;
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size                  2260088 bytes
Variable Size             616563592 bytes
Database Buffers          444596224 bytes
Redo Buffers                5517312 bytes
SQL> @/u01/create_db.sql              ---建库需要一段时间....耐心等待,期间可以查看Alert告警日志,显示建库过程
Database created.

然后执行以下脚本:
这两个脚本,用于系统数据字典,包,相关组件以及Type等对象的重建
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql

这个脚本SYSTEM用户下生成PRODUCT_USER_PROFILE表,用于设置普通用户登录SQLPLUS的权限控制,若不执行该脚本,普通用户连接SQLPLUS登录,会一直报错:User Profile information not loaded类似的相关错误

conn system/marvinn
@?/sqlplus/admin/pupbld.sql

1.4.5 配置监听以及Tnsnames.ora

oracle@catalog:/home/oracle>cd /u01/oracle/12.2.0/network/admin/

编辑添加Listener.ora文件
oracle@catalog:/u01/oracle/12.2.0/network/admin>cat listener.ora 
LISTENER =
        (DESCRIPTION_LIST = 
        (DESCRIPTION =
                (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
        )
        (DESCRIPTION = 
                (ADDRESS = (PROTOCOL = TCP)(HOST=172.16.10.110)(PORT = 1521))
        )
        )
SID_LIST_LISTENER =
  (SID_LIST=
    (SID_DESC=
          (SERVICE_NAME=catadb)
          (SID_NAME= catadb)
          (ORACLE_HOME=/u01/oracle/12.2.0/)
           (PROGRAM = extproc)
           )
         )
ADR_BASE_LISTENER = /u01/app/oracle


编辑添加Tnsnames.ora文件
oracle@catalog:/u01/oracle/12.2.0/network/admin>vi tnsnames.ora
CATADB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.110)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = catadb)
    )
  )
  ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.53)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
  TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.115)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
  )


 注意:目标端(即生产数据库,需要catalog备份的数据库)数据库Tnsnames.ora参数文件,需要配置CATADB(CATALOG恢复目录数据库)数据库的TNS配置,简单一句话,相互配置TNS参数

目标端(生产数据库端)添加,有多少个生产数据库就需要添加多少个,因为CATALOG恢复目录数据库可以备份对应多个生产数据库
ORCL目标数据库:
vi tnsnames.ora 
编辑添加
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.53)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
CATADB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.110)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = catadb)
    )
  )

TEST目标数据库:
vi tnsnames.ora 
编辑添加
CATADB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.110)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = catadb)
    )
  )
  TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.115)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
  )

二、配置catadb为catalog数据库

2.1、创建表空间

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE                                    ---建库脚本跑完,可以看到catadb数据库已是可读写OPEN状态

SQL> CREATE TABLESPACE catadb DATAFILE '/u01/oradata/catalogdb/catalog.dbf' SIZE 15M AUTOEXTEND ON NEXT 15M;

Tablespace created.

2.2、创建用户

SQL> CREATE USER rman IDENTIFIED BY rman
      TEMPORARY TABLESPACE tempts1                  --取决于参数文件SPFILE中临时表空间名
      DEFAULT TABLESPACE catadb;

User created.

SQL> grant connect,resource to rman;

Grant succeeded.

SQL> GRANT RECOVERY_CATALOG_OWNER TO rman;

Grant succeeded.

2.3、创建CATALOG

oracle@catalog:/u01/oracle/12.2.0/network/admin>rman catalog rman/rman

Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 31 07:33:01 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN> create catalog;

recovery catalog created

2.4、目标数据库注册CATALOG http://www.cndba.cn/Marvinn/article/2831

注意:如果目标数据库(生产数据库)和CATADB恢复目录数据库,TNS配置并未相互配置写入到各自的tnsnames.ora文件中,否则报错,是无法进行访问的

CATADB恢复目录数据库上操作

1、注册目标端ORCL到CATALOG
oracle@catalog:/u01/oracle/12.2.0/network/admin>rman target sys/yunq111@orcl catalog rman/rman@catadb 

Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 31 07:55:20 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1487384610)
connected to recovery catalog database

RMAN> REGISTER DATABASE;                                    --注册DB到CATALOG恢复目录数据库CATADB

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

2、注册目标端TEST到CATALOG
oracle@catalog:/u01/oracle/12.2.0/network/admin>rman target sys/yunq111@test catalog rman/rman@catadb 

Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 31 08:33:56 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: TEST (DBID=2260953507)
connected to recovery catalog database

RMAN> create catalog;                 ---再次创建CATALOG,则报错CATALOG已经存在,说明,一个CATALOG,可以注册管理多个Target,无需再次创建

recovery catalog already exists

RMAN> REGISTER DATABASE;            --注册DB到CATALOG恢复目录数据库CATADB

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

三、管理CATALOG数据库http://www.cndba.cn/Marvinn/article/2831

3.1、创建和管理VPChttp://www.cndba.cn/Marvinn/article/2831

针对一个CATALOG注册多个Target,为便于管理,可以创建对应的VPC(虚拟用户目录)进行分开管理
    3.1.1、创建表空间、用户以及授权
创建管理目标端ORCL VPC用户:    
SQL> create tablespace vpcuser1 datafile '/u01/oradata/catalogdb/vpcuser1.dbf' size 30M autoextend on next 30m;

Tablespace created.

SQL> CREATE USER vpc_orcl IDENTIFIED BY vpc_orcl DEFAULT TABLESPACE vpcuser1 QUOTA UNLIMITED ON vpcuser1;

User created.

SQL>GRANT recovery_catalog_owner TO vpc_orcl;

Grant succeeded.

创建管理目标端TEST VPC用户:
SQL> create tablespace vpcuser2 datafile '/u01/oradata/catalogdb/vpcuser2.dbf' size 30M autoextend on next 30m;

Tablespace created.

SQL> CREATE USER vpc_test IDENTIFIED BY vpc_test DEFAULT TABLESPACE vpcuser2 QUOTA UNLIMITED ON vpcuser2;

User created.

SQL> GRANT recovery_catalog_owner TO vpc_test;

Grant succeeded

    3.1.2、恢复目录所有者rman用户登录授权虚拟用户VPC注册数据库权限以及虚拟用户访问某个数据库的权限
oracle@catalog:/u01/oracle/12.2.0/network/admin>rman catalog rman/rman@catadb

Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 31 08:54:28 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN> GRANT REGISTER DATABASE TO vpc_orcl;               --注册数据库权限

Grant succeeded.

RMAN> GRANT REGISTER DATABASE TO vpc_test;                --注册数据库权限

Grant succeeded.

RMAN> GRANT CATALOG FOR DATABASE orcl TO vpc_orcl;         --虚拟用户vpc_orcl访问orcl库的权限

Grant succeeded

RMAN> GRANT CATALOG FOR DATABASE test TO vpc_test;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "test": expecting one of: "double-quoted-string, identifier, integer, single-quoted-string"
RMAN-01007: at line 1 column 28 file: standard input

RMAN> GRANT CATALOG FOR DATABASE "test" TO vpc_test;            --虚拟用户vpc_test访问test库的权限

Grant succeeded.

    3.1.3、VPC虚拟用户登录创建CATALOG
VPC虚拟用户vpc_orcl登录:
oracle@catalog:/u01/>rman catalog vpc_orcl/vpc_orcl@catadb

Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 31 08:56:42 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN> CREATE VIRTUAL CATALOG;

found eligible base catalog owned by RMAN
created virtual catalog against base catalog owned by RMAN

RMAN> exit;

VPC虚拟用户vpc_test登录:
oracle@catalog:/u01/>rman catalog vpc_test/vpc_test@catadb

Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 31 08:59:50 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN> CREATE VIRTUAL CATALOG;

found eligible base catalog owned by RMAN
created virtual catalog against base catalog owned by RMAN

RMAN> exit;

注意:如果是10.2版本或更早,需要SQLPLUS下执行存储过程创建
PS:
1、登录SQLPLUS用户是对应的虚拟用户VPC,这样才会在其对应的虚拟用户下创建虚拟专用恢复目录
2、base_catalog_owner,该值对应的是CATALOG恢复目录所有者(即首次创建的恢复用户拥有者,当前环境是rman用户),而不是虚拟用户VPC
示例如下:sqlplus vpc_orcl/vpc_orcl@catadb
SQL>SQL> EXECUTE rman.DBMS_RCVCAT.CREATE_VIRTUAL_CATALOG;

语法如下:
SQL> EXECUTE base_catalog_owner.DBMS_RCVCAT.CREATE_VIRTUAL_CATALOG;

3.2、创建和管理存储脚本

 rman的备份恢复命令写成脚本并保存在恢复目录内,恢复目录内的脚本可用性及通用性高于基于文件系统的脚本,客户端只要能够登录到RMAN恢复目录,则这些脚本可用,尤其对于global脚本,可以被任意注册的数据库调度

脚本的分类:http://www.cndba.cn/Marvinn/article/2831

local 本地存储脚本: 在rman连接的目标数据库下创建的脚本,此类脚本仅仅适用于当前目标数据库。即是针对特定的数据库创建的rman脚本

global 全局存储脚本 : 能够在恢复目录注册的任意目标数据库中执行

3.2.1、创建存储脚本

1、创建备份存放路径
Target 目标端ORCL:
mkdir -p /u01/bakcup
mkdir -p /u01/bakcup/full_db/orcl
mkdir -p /u01/bakcup/leveldb_1/orcl
mkdir -p /u01/bakcup/leveldb_2/orcl
mkdir -p /u01/bakcup/archivelog/orcl

Target 目标端TEST:
mkdir -p /u01/bakcup
mkdir -p /u01/bakcup/full_db/test
mkdir -p /u01/bakcup/leveldb_1/test
mkdir -p /u01/bakcup/leveldb_2/test
mkdir -p /u01/bakcup/archivelog/test

2、RMAN任意连接某个目标数据库以及恢复目录(catadb操作)  
注意:考虑,后续方便管理查看,以及变更,故采用本地存储脚本方式备份

Target 目标端数据库ORCL: 虚拟专用用户VPC_ORCL连接
oracle@catalog:/u01>rman target sys/yunq111@orcl catalog vpc_orcl/vpc_orcl

Recovery Manager: Release 11.2.0.4.0 - Production on Fri Jun 1 02:17:29 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1487384610)
connected to recovery catalog database
创建0级全库备份
RMAN> CREATE SCRIPT local_fulldb_orcl
 COMMENT 'A script for full backup to be used with current Target database'
 {
 ALLOCATE CHANNEL D1 TYPE DISK MAXPIECESIZE=100M;
 ALLOCATE CHANNEL D2 TYPE DISK MAXPIECESIZE=100M;
 ALLOCATE CHANNEL D3 TYPE DISK MAXPIECESIZE=100M;
 BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE TAG='ORCL_LEVEL_0' INCLUDE CURRENT CONTROLFILE
 FORMAT '/u01/bakcup/full_db/orcl/fulldb_%d_%T_%s_%p'
 PLUS ARCHIVELOG FORMAT '/u01/bakcup/archivelog/orcl/arch_%d_%T_%s_%p'
 DELETE ALL INPUT;
 DELETE NOPROMPT OBSOLETE recovery window of 7 days;                                     --保证7天的可恢复量
 RELEASE CHANNEL D1;
 RELEASE CHANNEL D2;
 RELEASE CHANNEL D3;
 }

created script local_fulldb_orcl

注意:0级全库备份,使用CATALOG恢复目录,
创建1级增量:
RMAN>CREATE SCRIPT local_level1_orcl
COMMENT 'A script for Incremental level 1 backup to be used with current Target database'
{
     ALLOCATE CHANNEL D1 TYPE DISK MAXPIECESIZE=100M;
     ALLOCATE CHANNEL D2 TYPE DISK MAXPIECESIZE=100M;
     ALLOCATE CHANNEL D3 TYPE DISK MAXPIECESIZE=100M;
    CROSSCHECK ARCHIVELOG ALL;
    DELETE NOPROMPT expired archivelog ALL;
    sql 'alter system archive log current';
    BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE TAG='ORCL_LEVEL_1' INCLUDE CURRENT CONTROLFILE
    FORMAT '/u01/bakcup/leveldb_1/orcl/leveldb1_%d_%T_%s_%p'
    PLUS ARCHIVELOG FORMAT '/u01/bakcup/archivelog/orcl/leveldb1_%d_%T_%s_%p'
    DELETE ALL INPUT;
     RELEASE CHANNEL D1;
     RELEASE CHANNEL D2;
     RELEASE CHANNEL D3;    
}

created script local_level1_orcl

创建2级增量:
RMAN>CREATE SCRIPT local_level2_orcl
COMMENT 'A script for Incremental level 2 backup to be used with current Target database'
{
     ALLOCATE CHANNEL D1 TYPE DISK MAXPIECESIZE=100M;
     ALLOCATE CHANNEL D2 TYPE DISK MAXPIECESIZE=100M;
     ALLOCATE CHANNEL D3 TYPE DISK MAXPIECESIZE=100M;
    CROSSCHECK ARCHIVELOG ALL;
    DELETE NOPROMPT expired archivelog ALL;
    BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 2 DATABASE TAG='ORCL_LEVEL_2' INCLUDE CURRENT CONTROLFILE
    FORMAT '/u01/bakcup/leveldb_2/orcl/leveldb2_%d_%T_%s_%p'
    PLUS ARCHIVELOG FORMAT '/u01/bakcup/archivelog/orcl/leveldb2_%d_%T_%s_%p'
    DELETE ALL INPUT;
     RELEASE CHANNEL D1;
     RELEASE CHANNEL D2;
     RELEASE CHANNEL D3;
}

created script local_level2_orcl

修改存储脚本:REPLACE命令,增加备份参数文件SPFILE
RMAN>REPLACE SCRIPT local_fulldb_orcl
 COMMENT 'A script for full backup to be used with current Target database'
 {
      ALLOCATE CHANNEL D1 TYPE DISK MAXPIECESIZE=100M;
     ALLOCATE CHANNEL D2 TYPE DISK MAXPIECESIZE=100M;
     ALLOCATE CHANNEL D3 TYPE DISK MAXPIECESIZE=100M;
     BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE TAG='ORCL_LEVEL_0' INCLUDE CURRENT CONTROLFILE
     FORMAT '/u01/bakcup/full_db/orcl/fulldb_%d_%T_%s_%p'
     PLUS ARCHIVELOG FORMAT '/u01/bakcup/archivelog/orcl/arch_%d_%T_%s_%p'
     DELETE ALL INPUT;
     BACKUP SPFILE FORMAT '/u01/bakcup/full_db/orcl/spfile_%d_%T_%s_%p';
     DELETE NOPROMPT OBSOLETE recovery window of 7 days;
     RELEASE CHANNEL D1;
     RELEASE CHANNEL D2;
     RELEASE CHANNEL D3;
 }

 replaced script local_fulldb_orcl

至此....当前Target目标数据库ORCL存储脚本创建完毕

另外一个Target目标数据库TEST过程省略,只需要修改备份路径,存储脚本名,TAG以及RMAN链接的目标Target数据库(这点尤为重要)即可...另外关于,全局存储脚本的大同小异省略
链接Target DB TEST串:$ rman target sys/yunq111@test catalog rman/rman@catadb 

注意:
使用EXECUTE SCRIPT, DELETE SCRIPT ,PRINT SCRIPT等命令时,如果一个本地的脚本未找到,则寻找全局的脚本来代替。
因此应当注意命名规范,尽可能的不使用重名的脚本名,当DELETE SCRIPT 找不到本地脚本,而找到同样名字的全局脚本,则全局
脚本被删除



---------------------------------------------------------------------------------------------------------------------------当前环境未使用的脚本创建语法以及管理更新,删除脚本语法
--------------------------------------------------------------------------------------------------------------------------
全局存储脚本语法: 
注意:创建全局存储脚本 不能使用虚拟用户VPC登录,需要使用CATALOG恢复目录用户所有者登录,即当前用户是rman用户登陆创建,至于链接哪个目标端可随意
CREATE GLOBAL SCRIPT global_full_backup
COMMENT 'A script for full backup to be used with any database'                   --COMMENT注释
{     
  BACKUP DATABASE PLUS ARCHIVELOG;
  DELETE OBSOLETE;
}

注意:
Rman提供plus archivelog选项,极大的简化了Rman备份的操作。

当你定义plus archivelog语句时,RMAN执行如下步骤的操作:
1。运行一个ALTER SYSTEM ARCHIVELOG CURRENT命令
2。运行BACKUP ARCHIVELOG ALL命令。注意如果目标端备份优化被启用,RMAN只会备份未备份过的日志
3。备份BACKUP命令中定义的文件
4。运行ALTER SYSTEM ARCHIVELOG CURRENT命令
5。备份所有的剩下的归档日志

也可以从系统文本文件创建存储脚本,语法如下:(当前环境省略...)
--从文本文件创建脚本
[oracle@oradb bk]$ cat backup_ctl_spfile   --注意文本文件必须以"{" 开头,以"}" 结尾
        {
          allocate channel ch1 device type disk;
          backup current controlfile
          tag='ctl_spfile'
          format '/u01/oracle/bk/rmbk/ctl_spfile_%d_%U';
          release channel ch1;
        }
RMAN> create script ctl_spfile_bk from file '/u01/oracle/bk/rmbk/backup_ctl_spfile';
script commands will be loaded from file /u01/oracle/bk/rmbk/backup_ctl_spfile

created script ctl_spfile_bk
----------------------------------------------------------------------------------------------------------------

3.2.2 存储脚本管理

RMAN恢复目录连接任意一个目标Target数据库,使用如下管理命令:如:$rman target sys/yunq111@test catalog rman/rman@catadb

查看当前恢复目录内的脚本
list [global | all] script names          参数ALL,表明查看恢复目录内所有的存储脚本,不管是本地还是全局

RMAN> list script names;              --查看本地存储脚本

List of Stored Scripts in Recovery Catalog
    Scripts of Target Database TEST

       Script Name
       Description
       -----------------------------------------------------------------------
       local_fulldb_test
       A script for full backup to be used with current Target database

       local_level1_test
       A script for Incremental level 1 backup to be used with current Target database

       local_level2_test
       A script for Incremental level 2 backup to be used with current Target database

RMAN> list all script names;    --查看所有存储脚本
List of Stored Scripts in Recovery Catalog
    Scripts of Target Database ORCL
       Script Name
       Description
       -----------------------------------------------------------------------
       local_fulldb_orcl
       A script for full backup to be used with current Target database

       local_level1_orcl
       A script for Incremental level 1 backup to be used with current Target database

       local_level2_orcl
       A script for Incremental level 2 backup to be used with current Target database


    Scripts of Target Database TEST

       Script Name
       Description
       -----------------------------------------------------------------------
       local_fulldb_test
       A script for full backup to be used with current Target database

       local_level1_test
       A script for Incremental level 1 backup to be used with current Target database

       local_level2_test
       A script for Incremental level 2 backup to be used with current Target database


查看脚本的内容
    print [global] script script_name
    print [global] script script_name to file '<dir>'   --将RMAN存储脚本转换到文件系统可读文件

    RMAN> print script ctl_spfile_bk;

    RMAN> print script ctl_spfile_bk to file '/u01/oracle/bk/rmbk/backup_ctl_spfile2';

更新脚本

    replace [global] script scrip_name {....}
    replace [global] script script_name from file '<dir>'  --从文件更新脚本

    RMAN> replace global script global_full_backup
    2> {
    3>   backup as compressed backupset database plus archivelog
    4>   tag='whole_db_bk';
    5>   delete obsolete;
    6> }
    replaced global script global_full_backup

执行脚本

    方法:RUN { EXECUTE [global] SCRIPT script_name; }
    从rman客户端直接执行恢复目录内的脚本

   $rman target sys/redhat@orcl catalog rman/rman@asmdb script 'script_name';

    RMAN> run { execute global script global_full_backup;}
    executing global script: global_full_backup

删除脚本
    delete [global] script script_name

    RMAN> delete script ctl_spfile_bk;
    deleted script: ctl_spfile_bk

删除恢复目录      --该操作不需要用CATALOG才用来操作
链接CATALOG,执行删除(两次确认)
$RMAN catalog rman/rman@catadb

RMAN>DROP CATALOG;
RMAN>DROP CATALOG;

更新恢复目录      
注意:
比如RMAN恢复目录版本是10g,而目标端升级到了11g版本的RMAN客户端,则需要升级更新恢复目录本地包和模式。
如果你10gR1版本之前创建的恢复目录, 并且RECOVERY_CATALOG_OWNER角色不包含CREATE TYPE权限,那么需要赋予CREATE TYPE的权限给恢复目录所有者。
SQL>GRANT CREATE TYPE TO rman;

升级更新CATLOG(两次确认)
RMAN>upgrade catalog;
RMAN>upgrade catalog;

四、脚本备份执行

备份Target ORCL:
0级:
$rman target sys/yunq111@orcl catalog vpc_orcl/vpc_orcl@catadb script 'local_fulldb_orcl'

创建测试数据
SQL> create table marvin(id number,name varchar2(10));

Table created.

SQL> insert into marvin values(1,'dd');

1 row created.

SQL> commit;

Commit complete.

1级:
$rman target sys/yunq111@orcl catalog vpc_orcl/vpc_orcl@catadb script 'local_level1_orcl'   --2级备份就不测试了

备份Target TEST:
0级:
$rman target sys/yunq111@test catalog vpc_test/vpc_test@catadb script 'local_fulldb_test'

创建测试数据
SQL> create table marvin(id number,name varchar2(10));

Table created.

SQL> insert into marvin values(1,'dd');

1 row created.

SQL> commit;

Commit complete.

2级:
$rman target sys/yunq111@test catalog vpc_test/vpc_test@catadb script 'local_level2_test'

再插入测试数据:
SQL> insert into marvin values(1,'ss');

1 row created.

SQL> insert into marvin values(1,'nn');

1 row created.

SQL> commit;

Commit complete.

SQL> select count(*) from marvin;

  COUNT(*)
----------
         3
1级:
$rman target sys/yunq111@test catalog vpc_test/vpc_test@catadb script 'local_level1_test'

五、恢复验证

Target 目标数据库TEST:

查看表Marvin位于哪个表空间
SQL> select table_name,tablespace_name from dba_tables where table_name='MARVIN';

TABLE_NAME
------------------------------------------------------------
TABLESPACE_NAME
------------------------------------------------------------
MARVIN
SYSTEM

查看SYSTEM表空间位置,系统层面手动备份下
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='SYSTEM';

FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------------------------------------
/u01/oracle/oradata/TEST/datafile/o1_mf_system_f36tmgd6_.dbf
SYSTEM

oracle@test:/home/oracle>cp /u01/oracle/oradata/TEST/datafile/o1_mf_system_f36tmgd6_.dbf /u01/oracle/oradata/TEST/datafile/o1_mf_system_f36tmgd6_.dbf.bak

手动删除SYSTEM表空间
oracle@test:/home/oracle>rm -rf /u01/oracle/oradata/TEST/datafile/o1_mf_system_f36tmgd6_.dbf
oracle@test:/home/oracle>

重启数据库,报错
SQL> startup force;
ORACLE instance started.

Total System Global Area  221331456 bytes
Fixed Size                  2251856 bytes
Variable Size             163578800 bytes
Database Buffers           50331648 bytes
Redo Buffers                5169152 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1:
'/u01/oracle/oradata/TEST/datafile/o1_mf_system_f36tmgd6_.dbf'

恢复过程(Target 目标端操作)
oracle@test:/home/oracle>rman target / catalog vpc_test/vpc_test@catadb

Recovery Manager: Release 11.2.0.4.0 - Production on Sat Jun 2 12:19:20 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database (not started)
connected to recovery catalog database

RMAN> startup mount;                                                            --从这里可以看出,根本不用像NOCATALOG还得NOMOUNT状态,恢复控制文件,在MOUNT,再恢复数据文件,因为CATALOG,相当于控制文件备份了 (当然这里没有删除控制文件测试,有兴趣可以自己去试) 

Oracle instance started
database mounted

Total System Global Area     221331456 bytes

Fixed Size                     2251856 bytes
Variable Size                163578800 bytes
Database Buffers              50331648 bytes
Redo Buffers                   5169152 bytes

RMAN> restore tablespace system;

Starting restore at 2018-06-02 12:20:01
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/oracle/oradata/TEST/datafile/o1_mf_system_f36tmgd6_.dbf
channel ORA_DISK_1: reading from backup piece /u01/bakcup/full_db/test/fulldb_TEST_20180601_17_1
channel ORA_DISK_1: piece handle=/u01/bakcup/full_db/test/fulldb_TEST_20180601_17_1 tag=TEST_LEVEL_0
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: reading from backup piece /u01/bakcup/full_db/test/fulldb_TEST_20180601_17_2
channel ORA_DISK_1: piece handle=/u01/bakcup/full_db/test/fulldb_TEST_20180601_17_2 tag=TEST_LEVEL_0
channel ORA_DISK_1: restored backup piece 2
channel ORA_DISK_1: reading from backup piece /u01/bakcup/full_db/test/fulldb_TEST_20180601_17_3
channel ORA_DISK_1: piece handle=/u01/bakcup/full_db/test/fulldb_TEST_20180601_17_3 tag=TEST_LEVEL_0
channel ORA_DISK_1: restored backup piece 3
channel ORA_DISK_1: restore complete, elapsed time: 00:00:34
Finished restore at 2018-06-02 12:20:39
starting full resync of recovery catalog
full resync complete

RMAN> recover tablespace system;

Starting recover at 2018-06-02 12:21:28
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00001: /u01/oracle/oradata/TEST/datafile/o1_mf_system_fk46qoqx_.dbf
channel ORA_DISK_1: reading from backup piece /u01/bakcup/leveldb_1/test/leveldb1_TEST_20180601_33_1
channel ORA_DISK_1: piece handle=/u01/bakcup/leveldb_1/test/leveldb1_TEST_20180601_33_1 tag=TEST_LEVEL_1
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

starting media recovery

archived log for thread 1 with sequence 314 is already on disk as file /u01/oracle/11.2.0/dbs/arch/1_314_962807076.dbf
archived log for thread 1 with sequence 315 is already on disk as file /u01/oracle/11.2.0/dbs/arch/1_315_962807076.dbf
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=313
channel ORA_DISK_1: reading from backup piece /u01/bakcup/archivelog/test/leveldb1_TEST_20180601_37_1
channel ORA_DISK_1: piece handle=/u01/bakcup/archivelog/test/leveldb1_TEST_20180601_37_1 tag=TAG20180601T145743
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/u01/oracle/11.2.0/dbs/arch/1_313_962807076.dbf thread=1 sequence=313
media recovery complete, elapsed time: 00:00:08
Finished recover at 2018-06-02 12:21:40                                          --说明是完全恢复

RMAN> alter database open;                                                    --数据库正常打开

database opened

RMAN> 

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Marvinn

Marvinn

关注

路漫漫其修远兮、吾将上下而求索

  • 99
    原创
  • 0
    翻译
  • 2
    转载
  • 36
    评论
  • 访问:458435次
  • 积分:449
  • 等级:中级会员
  • 排名:第12名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ