BCV(业务连续性卷)是 EMC Symmetrix TimeFinder/Mirror 进程的目标卷。
当 BCV 与数据设备完全同步时,BCV 被分离或者拆分,从而可供主机备份或者其他主机进程使用。
简而言之,BCV 拆分是一种设备,可以克隆另一个设备。
在使用 BCV 拆分作为 Oracle 备份之前,我们需要缩小备份卷中包含的内容。
我们可以使用 BCV 拆分来仅备份 asm 磁盘以及 rdbms 数据文件、重做日志和控制文件。
GRID_HOME 的 BCV 拆分将不起作用。
无论何时使用 BCV 拆分,克隆过程都包含以下阶段:
- 在目标上安装 Grid Infrastructure 软件。
- 挂载 bcv 拆分卷并检查对磁盘的访问。
- 启动 asm 实例并挂载磁盘组。
- 启动 rdbms 实例并恢复数据库。
1. 在目标上安装网格基础结构软件
Oracle 版本应在源服务器和目标服务器上匹配。
即使我们在源端安装了 RAC,我们也可以在目标端安装独立的网格版本。
4. 启动 RDBMS 实例并恢复数据库
- ASM 已启动,磁盘组已挂载,现在我们已准备好打开数据库。
从 Grid 主页启动侦听器。
$ lsnrctl start $ lsnrctl status
- 将环境设置为指向数据库主目录(应该已经安装或者克隆):
$ export ORACLE_HOME=/oracle/ora11g/11.2.0/db_home $ export PATH=$ORACLE_HOME/bin:$PATH $ export ORACLE_SID=YOUR_DB_SID
或者
$ . oraenv ORACLE_SID = YOUR_DB_NAME
- 启动数据库。
$ sqlplus / as sysdba SQL> startup
- 检查前面的命令是否真的打开了数据库:
SQL> select name, open_mode from v$database; NAME OPEN_MODE --------- ------------------- YOUR_DB_NAME READ WRITE
3. 调出 ASM 实例并挂载磁盘组
以下是 11gR2 独立版(非 RAC)的示例。
请注意,CRS 和 ASM 在 11gR2 与 10g 或者 11gR1 中是一起的,因此必须首先启动集群件进程。
1.设置环境。
例如:
$ export ORACLE_HOME=/oracle/ora11g/11.2.0/grid $ export PATH=$ORACLE_HOME/bin:$PATH $ export ORACLE_SID=+ASM
或者
$ . oraenv ORACLE_SID = +ASM
- 检查集群资源是否以 root 身份启动:
# cd [Grid Home]/bin # ./crsctl status resource -t
如果有,ora.cssd 资源离线,手动启动。
# ./crsctl start has # ./crsctl start resource ora.cssd # ./crsctl status resource -t
- 启动ASM,挂载ORA_CRS磁盘组,其中ORA_CRS为磁盘组名。
使用 pfile 而不是 spfile 执行此操作的选项之一。
如果 CRS 已启动,我们可以使用存储在 asm 中的 spfile 启动。
SQL> startup nomount ; SQL> alter diskgroup ORA_CRS mount ;
作为 root 启动 crsd:
# crsctl start resource ora.crsd -init
启动它们后,尝试手动挂载当前在此服务器上可见的所有磁盘组。
SQL> alter diskgroup [DG] mount ;
- 如果出现 spile 错误,则需要为 ASM 创建/重新创建 SPFILE。
默认是启动asm,不带pfile或者spfile,所以是很常见的问题。
请特别注意 asm_diskstring 参数,因为它会影响投票磁盘的发现。
使用我们进行 BCV 拆分的源上的 ASM 警报日志验证先前的设置。
准备一个带有 ASM 启动参数的 pfile(例如 /tmp/asm_pfile.ora),这些参数可能与下面的示例有所不同。
如果有疑问,请查阅 ASM 警报日志,因为 ASM 实例启动应列出所有非默认参数值。
请注意 ASM 的最后一次启动(在第 2 步中通过 CRS 启动)不会使用 SPFILE,因此需要定位在 CRS 磁盘组丢失之前的启动。
*.asm_power_limit=1 *.diagnostic_dest='/u01/app/oragrid' *.instance_type='asm' *.large_pool_size=12M *.remote_login_passwordfile='EXCLUSIVE'
现在可以使用这个 PFILE 创建 SPFILE:
$ sqlplus / as sysasm SQL> create spfile='+CRS' from pfile='/YOUR_LOCATION/asm_pfile.ora'; File created. SQL> startup nomount ; SQL> alter diskgroup ORA_CRS mount ;
作为 root 启动 crsd:
# crsctl start resource ora.crsd -init
- 检查磁盘状态:
SQL> set linesize 200 SQL> column path format a45 SQL> column name format a20 SQL> column failgroup format a15 SQL> select group_number, disk_number, mount_status, header_status, state, failgroup, name, path from v$asm_disk;
如果磁盘显示为成员,那么我们应该能够挂载磁盘组。
- 一旦所有正确的磁盘都显示为 MEMBER,我们就可以挂载当前在此服务器上可见的磁盘组。
SQL> alter diskgroup <DG> mount ; SQL> select group_number, name, state, type, total_mb, free_mb from v$asm_diskgroup;
- 检查 asm 是否已启动,并且 asm_disksgroups 和 asm_diskstring 的值是否正确。
SQL> select * from v$instance; SQL> show parameter asm;
2. 安装 BCV 分割卷并检查磁盘的访问权限
- 如果我们在安装 BCV 分体时遇到问题,请联系 EMC。
http://www.emc.com
http://www.emc.com/collateral/software/white-papers/h5550-backup-oracle-symmetrix-netwrk-powernsap-wp.pdf
- 在目标上安装 BCV split 后,确保软件所有者(oracle 或者 grid,具体取决于版本)具有对磁盘的完全访问权限。
为此,请使用 kfod 实用程序。
我们可以使用工具 kfod 从操作系统级别模拟磁盘发现。
($ORACLE_HOME/bin)。
执行语法为:
$ kfod asm_diskstring='/dev/rdsk/*' disks=all
或者
$ kfod asm_diskstring='dev/oracleasm/disks/*' disks=all
或者
$ kfod asm_diskstring='ORCL:*' disks=all
语法示例:
$ cd $ORACLE_HOME/bin $ kfod disks=all $ kfod status=TRUE dscvgroup=TRUE asm_diskstring='/dev/xvd*' disks=all $ kfod status=TRUE dscvgroup=TRUE asm_diskstring='/dev/rhdisk*' disks=all $ kfod status=TRUE dscvgroup=TRUE asm_diskstring='/dev/emcpower*' disks=all
其中 asm_diskstring 是磁盘的有效路径。
检查磁盘权限,源和目标应匹配。
owner:克隆磁盘组需要为 ASM OS 用户所有。如果 kfod 输出收到下一个错误,表明候选原始设备不能被网格或者 oracle OS 用户在操作系统级别访问,因此在此问题解决之前,ASM 或者 ASM 工具将无法检测或者使用它:
ORA-15025: could not open disk "/dev/rdsk/c3t60080E500017CAA8000006954EEA57CDd0s0" SVR4 Error: 13: Permission denied
在这种情况下,请以 oracle 或者 grid OS 用户身份连接,并验证我们可以使用 dd OS 命令在原始设备上进行读写操作,如下所示:
$ id $ dd if=/dev/null of=/dev/rdsk/c3t60080E500017CAA8000006954EEA57CDd0s0 bs=8192 count=12800
如果 dd 报告了同样的问题,那么我们必须让操作系统和存储支持人员更正磁盘/原始设备对网格和 oracle 操作系统用户的访问。
在 kfod 实用程序返回对磁盘的正确访问之前,不要继续下一步。
输出将类似于以下内容(用户和组应在源和目标上匹配)
$ kfod asm_diskstring='/dev/rhdisk*' disks=all ------------------------------------------------------------------------------- Disk Size Path User Group ================================================================================ 1: 102400 Mb /dev/rhdisk2 grid asmadmin 2: 102400 Mb /dev/rhdisk3 grid asmadmin 3: 102400 Mb /dev/rhdisk4 grid asmadmin 4: 102400 Mb /dev/rhdisk5 grid asmadmin ------------------------------------------------------------------------------- ORACLE_SID ORACLE_HOME ================================================================================ +ASM /u01/app/grid/product/11.2.0/grid
或者
$ kfod asm_diskstring='/dev/rhdisk*' disks=all ------------------------------------------------------------------------------- Disk Size Path User Group ================================================================================ 1: 102400 Mb /dev/rhdisk2 oracle dba 2: 102400 Mb /dev/rhdisk3 oracle dba 3: 102400 Mb /dev/rhdisk4 oracle dba 4: 102400 Mb /dev/rhdisk5 oracle dba ------------------------------------------------------------------------------- ORACLE_SID ORACLE_HOME ================================================================================ +ASM /u01/app/grid/product/11.1.0/grid