阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hyper-V安装Oracle Linux6_4 Oracle db 12c并使用RMAN做异机恢复

245次阅读
没有评论

共计 16142 个字符,预计需要花费 41 分钟才能阅读完成。

本文记录在 Windows Server 2012 R2 上安装 Oracle Enterprise Linux 6.4 以及使用 RMAN 进行进行异机恢复的过程。

Windows 服务器增加 Hyper- V 功能

  1. 打开服务器管理器
  2. 在仪表板界面,添加角色和功能
  3. 找到 Hyper- V 之后下一步直至安装完成

执行安装 Linux

  1. 打开 Hyper- V 管理器
  2. 点击右边栏 ” 虚拟交换机管理器 ”,创建一个内部类型的虚拟交换机(相当于 VMware 的 NAT)
  3. 创建完成后,打开控制面板的网络连接,可以看到我们新建的虚拟机交换机。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 打开虚拟适配器的属性,将 ”Internet 协议版本 4 ″ 的属性设置成固定地址。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 操作 -> 新建 -> 虚拟机,将虚拟交换机选成上面新建的 NAT,加载 iso 文件到光驱。
  2. 配置项选完以后,重新启动就从光驱引导开始安装了,这里面的安装步骤就省略了。
  3. 安装完成后,再次进入系统可能发现网卡硬件不存在,如果安装了桌面那么鼠标也不能使用。原因是 HyperV 相对其他虚拟机软件器驱动程序没有那么丰富。要实现这些虚拟硬件需要额外安装微软的 Linux Integration Services,而且此软件对于 6.4 版本只支持 RedHat 和 CentOS,幸好 Oracle Enterprise Linux 版本支持用 Redhat 内核启动。
  4. 修改 /boot/grub/grub.conf 文件,配置 default=1 使默认从 Redhat 内核启动,同时可以参照另一篇文章关闭 numa,避免启动时黑屏。如果是 GUI 界面的话,可以通过点操作 -> 触发一个 Ctrl+Alt+Delete 到桌面,选择 Cancel,然后就可以使用键盘按 C 打开 Computer,后面可以打开一个路径并且选择 File 中的 open in terminal 从而打开 shell 终端进行修改了。配置完成以后重启一下系统。
  5. 从微软的网站下载相应的 Linux Integration Services,通过媒体 -> DVD 驱动器 -> 插入下载的 iso 文件,用上文中的 Ctrl+Alt+Delete 方式使用键盘打开 shell,进去光盘路径找到 REDHAT64,使用 ./install.sh 安装 LIS,安装完成之后再重启一下系统。
  6. 再次进入系统后,就可以使用鼠标了,并且网卡硬件也加载了。然后配置 /etc/sysconfig/network-scripts/ifcfg-eth1 文件(因为我配置了两块网卡,用 eth1 连接的 NAT 地址)。

    DEVICE=eth1
    TYPE=Ethernet
    UUID=9a98e87b-126d-4487-97ca-xxxxx15d7699
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    HWADDR=00:15:5D:58:09:04
    IPADDR=192.168.5.2
    NETMASK=255.255.255.0
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME="System eth1"
  7. 关闭防火墙和 SELINUX,具体方法请搜索。
  8. 然后重启下网络,service network restart,使用 putty 测试是否能够使用 ssh 192.168.5.2 登陆。

增加硬盘

  1. 在 Hyper- V 管理器右侧操作栏选择新建 -> 硬盘,为了提高性能使用固定容量的硬盘
  2. 关闭虚拟机,然后邮件虚拟机的设置项将硬盘添加到 IDE 控制器下面
  3. 登录系统,可以使用 fdisk -l 查看到新挂载的硬盘

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 格式化 sdb 成 8e 格式 LVM 形式

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 解决 ’Partition 1 does not start on physical sector boundary.’ 参考问答
  2. 使用 partprobe 使分区表生效
  3. 使用 pvcreate 将分区转换为 LVM 可用的分区

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 vgcreate 创建卷组,后面可以使用 vgextend 进行扩展

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 lvcreate 创建逻辑分区,可用 lvextend 进行扩展,且使用 - l 一次添加所有的 extend

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 进行逻辑卷格式化并挂载。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

可以发现 Filesystem 栏的命名方式都为 ”/dev/mapper” 加上 ”[vgname]-[lvname]”。

  1. 编辑 /etc/fstab,使挂载持久化。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 可以通过 touch 一个文件,然后重启系统查看文件情况。
  2. 因为发现后面发现硬盘空间不够,这里采用扩展方式增加硬盘空间。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 fdisk /dev/sdb 将新增的容量分区到 /dev/sdb2,按要求重启一次

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 格式化为 ext4 格式mkfs -t ext4 /dev/sdb2
  2. 使用 vgextend 将 pv 扩展到 vg

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 lvextend 将新增容量都放到 lv 中

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 resize2fs 使新增空间可用

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

可以参考文档,Linux LVM 硬盘管理及 LVM 扩容  http://www.linuxidc.com/Linux/2013-10/91268.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142085p2.htm

安装 Oracle 12C Database

  • 使用 pscp 将安装文件 ’linuxamd64_12102_database_1of2.zip’ 和 ’linuxamd64_12102_database_2of2.zip’ 上传至虚拟机
  • 依次解压两个 zip 文件,可以将所有的安装文件解压至 database 目录
  • 先将 NAT 的地址放到 /etc/hosts 文件

    [root@testbak u1]# vi /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.5.2 testbak.mytest.net testbak
  • 因为是内网环境,不能使用网络 yum 源,只能用安装光盘搭载一个本地的 yum 源。
    本地源的搭建方法,可以参考 Linux 软件安装管理:挂载本地 iso 光盘镜像、配置 yum 软件仓库
  • 修改 ”/etc/sysctl.conf” 文件,需要增加或者修改的参数如下。

    fs.file-max = 6815744
    kernel.sem = 250 32000 100 128
    kernel.shmmni = 4096
    kernel.shmall = 1073741824
    kernel.shmmax = 4398046511104
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576
    fs.aio-max-nr = 1048576
    net.ipv4.ip_local_port_range = 9000 65500
  • 使用 /sbin/sysctl -p 使设置生效。
  • 添加以下内容至 ”/etc/security/limits.conf”
  • 手工安装以下包

    yum install binutils -y
    yum install compat-libcap1 -y
    yum install compat-libstdc++-33 -y
    yum install compat-libstdc++-33.i686 -y
    yum install gcc -y
    yum install gcc-c++ -y
    yum install glibc -y
    yum install glibc.i686 -y
    yum install glibc-devel -y
    yum install glibc-devel.i686 -y
    yum install ksh -y
    yum install libgcc -y
    yum install libgcc.i686 -y
    yum install libstdc++ -y
    yum install libstdc++.i686 -y
    yum install libstdc++-devel -y
    yum install libstdc++-devel.i686 -y
    yum install libaio -y
    yum install libaio.i686 -y
    yum install libaio-devel -y
    yum install libaio-devel.i686 -y
    yum install libXext -y
    yum install libXext.i686 -y
    yum install libXtst -y
    yum install libXtst.i686 -y
    yum install libX11 -y
    yum install libX11.i686 -y
    yum install libXau -y
    yum install libXau.i686 -y
    yum install libxcb -y
    yum install libxcb.i686 -y
    yum install libXi -y
    yum install libXi.i686 -y
    yum install make -y
    yum install sysstat -y
    yum install unixODBC -y
    yum install unixODBC-devel -y
  • 创建用户和组

    groupadd -g 54321 oinstall
    groupadd -g 54322 dba
    groupadd -g 54323 oper
    useradd -u 54321 -g oinstall -G dba,oper oracle
  • 修改 ”/etc/security/limits.d/90-nproc.conf” 文件,修改后内容如下
    “`
    • nproc 16384
      root soft nproc unlimited
      “`
  • 创建安装路径

    mkdir -p /u1/app/oracle/product/12.1.0.2/db_1
    chown -R oracle:oinstall /u1
    chmod -R 775 /u1
  • 在 ”/home/oracle/.bash_profile” 中增加以下内容
    “`
    export TMP=/tmp
    export TMPDIR=$TMP

export ORACLE_HOSTNAME=testdb
export ORACLE_UNQNAME=TESTDB
export ORACLE_BASE=/u1/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0.2/db_1
export ORACLE_SID=TESTDB

export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
“`

  • 因为是虚拟机,直接使用虚拟机管理连接登陆图形界面,使用 oracle 用户执行./runInstaller,就可以出现图形化安装界面。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  • 采用 rman 方式恢复数据库,所以只安装数据库软件。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  • 安装完成后可以通过 ”/u1/app/oraInventory/logs/installActions[date].log” 查看安装日志

本文记录在 Windows Server 2012 R2 上安装 Oracle Enterprise Linux 6.4 以及使用 RMAN 进行进行异机恢复的过程。

Windows 服务器增加 Hyper- V 功能

  1. 打开服务器管理器
  2. 在仪表板界面,添加角色和功能
  3. 找到 Hyper- V 之后下一步直至安装完成

执行安装 Linux

  1. 打开 Hyper- V 管理器
  2. 点击右边栏 ” 虚拟交换机管理器 ”,创建一个内部类型的虚拟交换机(相当于 VMware 的 NAT)
  3. 创建完成后,打开控制面板的网络连接,可以看到我们新建的虚拟机交换机。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 打开虚拟适配器的属性,将 ”Internet 协议版本 4 ″ 的属性设置成固定地址。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 操作 -> 新建 -> 虚拟机,将虚拟交换机选成上面新建的 NAT,加载 iso 文件到光驱。
  2. 配置项选完以后,重新启动就从光驱引导开始安装了,这里面的安装步骤就省略了。
  3. 安装完成后,再次进入系统可能发现网卡硬件不存在,如果安装了桌面那么鼠标也不能使用。原因是 HyperV 相对其他虚拟机软件器驱动程序没有那么丰富。要实现这些虚拟硬件需要额外安装微软的 Linux Integration Services,而且此软件对于 6.4 版本只支持 RedHat 和 CentOS,幸好 Oracle Enterprise Linux 版本支持用 Redhat 内核启动。
  4. 修改 /boot/grub/grub.conf 文件,配置 default=1 使默认从 Redhat 内核启动,同时可以参照另一篇文章关闭 numa,避免启动时黑屏。如果是 GUI 界面的话,可以通过点操作 -> 触发一个 Ctrl+Alt+Delete 到桌面,选择 Cancel,然后就可以使用键盘按 C 打开 Computer,后面可以打开一个路径并且选择 File 中的 open in terminal 从而打开 shell 终端进行修改了。配置完成以后重启一下系统。
  5. 从微软的网站下载相应的 Linux Integration Services,通过媒体 -> DVD 驱动器 -> 插入下载的 iso 文件,用上文中的 Ctrl+Alt+Delete 方式使用键盘打开 shell,进去光盘路径找到 REDHAT64,使用 ./install.sh 安装 LIS,安装完成之后再重启一下系统。
  6. 再次进入系统后,就可以使用鼠标了,并且网卡硬件也加载了。然后配置 /etc/sysconfig/network-scripts/ifcfg-eth1 文件(因为我配置了两块网卡,用 eth1 连接的 NAT 地址)。

    DEVICE=eth1
    TYPE=Ethernet
    UUID=9a98e87b-126d-4487-97ca-xxxxx15d7699
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    HWADDR=00:15:5D:58:09:04
    IPADDR=192.168.5.2
    NETMASK=255.255.255.0
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME="System eth1"
  7. 关闭防火墙和 SELINUX,具体方法请搜索。
  8. 然后重启下网络,service network restart,使用 putty 测试是否能够使用 ssh 192.168.5.2 登陆。

增加硬盘

  1. 在 Hyper- V 管理器右侧操作栏选择新建 -> 硬盘,为了提高性能使用固定容量的硬盘
  2. 关闭虚拟机,然后邮件虚拟机的设置项将硬盘添加到 IDE 控制器下面
  3. 登录系统,可以使用 fdisk -l 查看到新挂载的硬盘

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 格式化 sdb 成 8e 格式 LVM 形式

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 解决 ’Partition 1 does not start on physical sector boundary.’ 参考问答
  2. 使用 partprobe 使分区表生效
  3. 使用 pvcreate 将分区转换为 LVM 可用的分区

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 vgcreate 创建卷组,后面可以使用 vgextend 进行扩展

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 lvcreate 创建逻辑分区,可用 lvextend 进行扩展,且使用 - l 一次添加所有的 extend

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 进行逻辑卷格式化并挂载。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

可以发现 Filesystem 栏的命名方式都为 ”/dev/mapper” 加上 ”[vgname]-[lvname]”。

  1. 编辑 /etc/fstab,使挂载持久化。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 可以通过 touch 一个文件,然后重启系统查看文件情况。
  2. 因为发现后面发现硬盘空间不够,这里采用扩展方式增加硬盘空间。

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 fdisk /dev/sdb 将新增的容量分区到 /dev/sdb2,按要求重启一次

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 格式化为 ext4 格式mkfs -t ext4 /dev/sdb2
  2. 使用 vgextend 将 pv 扩展到 vg

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 lvextend 将新增容量都放到 lv 中

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

  1. 使用 resize2fs 使新增空间可用

Hyper- V 安装 Oracle Linux6_4 Oracle db 12c 并使用 RMAN 做异机恢复

可以参考文档,Linux LVM 硬盘管理及 LVM 扩容  http://www.linuxidc.com/Linux/2013-10/91268.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-03/142085p2.htm

RMAN 恢复数据库

准备备份文件

这部分内容参考 ”[三思笔记]RMAN 管理 Oracle RAC 数据库的备份与恢复 ” http://www.linuxidc.com/Linux/2016-06/132478.htm

  • 因为生产的 RMAN 备份在 Linux 服务器上,可以在 Linux 上 mount 本地 windows 的共享目录,然后把 rman 备份传输过来

    # mount -t cifs -o username="administrator",password="test" //192.168.1.90/iso /db/windows
    # cd /db/windows
    # ls
    linuxamd64_12102_database_1of2.zip  linuxamd64_12102_database_2of2.zip  lis4-0-11.iso
  • 使用 find 命令将指定时间范围内的备份文件拷贝到 windows 上,然后再用 pscp 上传至虚拟机

    find ./ -mtime -6 -exec cp -f {} /db/windows/ \;
  • 使用 awk 和 sort 查看备份文件是否缺失

    ls -l | awk -F"_" '{print $NF}' | sort

RMAN 恢复

  • 连接 rman 并启动实例,首次可以在没有 Pfile 的情况下启动。
    “`sql
    [oracle@testbak oracle]$ rman target /

Recovery Manager: Release 12.1.0.2.0 – Production on Thu Aug 11 09:19:54 2016

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

connected to target database (not started)

RMAN> startup nomount

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file ‘/u1/app/oracle/product/12.1.0.2/db_1/dbs/initTESTDB.ora’

starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started

Total System Global Area 1073741824 bytes

Fixed Size 2932632 bytes
Variable Size 293601384 bytes
Database Buffers 771751936 bytes
Redo Buffers 5455872 bytes
“`

  • 创建一个数据路径 ”$ORACLE_BASE/oradata/TESTDB”,从备份集中恢复 spfile 并保存成 pfile

    restore spfile to pfile '/u1/app/oracle/oradata/pfile.ora' from '/u1/rmanbak/ctl_file_919512140_1_8223';
  • 手动修改导出的 pfile 文件,删除不符合单实例的内容。同时新建 ”/u1/app/oracle/fast_recovery_area/TESTDB/archivelog” 和 ”/u1/app/oracle/admin/TESTDB/adump” 目录

    留下所有的 * 开头的行,其余的删除
    另外删除 *.cluster_database=TRUE
    *.audit_file_dest='/u1/app/oracle/admin/TESTDB/adump'
    *.audit_trail='db'
    *.compatible='12.1.0.2.0'
    *.control_files='/u1/app/oracle/oradata/TESTDB/control01.ctl','/u1/app/oracle/oradata/TESTDB/control02.ctl'#Restore Controlfile
    *.db_block_size=8192
    *.db_domain=''
    *.db_files=2000
    *.db_name='TESTDB'
    *.db_recovery_file_dest='/u1/app/oracle/fast_recovery_area'
    *.db_recovery_file_dest_size=21474836480
    *.diagnostic_dest='/u1/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTDBXDB)'
    *.instance_number=2
    *.log_archive_dest_1='LOCATION=/u1/app/oracle/fast_recovery_area/TESTDB/archivelog'
    *.log_archive_format='%t_%s_%r.dbf'
    *.open_cursors=15000
    *.pga_aggregate_target=500m
    *.processes=1000
    *.remote_login_passwordfile='exclusive'
    *.sga_target=1500m
  • 使用 sqlplus 环境,通过上面的 pfile 创建 spfile,并重启 oracle 到 nomount 状态
    “`sql
    [oracle@testbak oracle]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Aug 11 10:47:07 2016

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> create spfile from pfile=’/u1/pfile.ora’;

File created.

SQL> startup nomount
ORACLE instance started.

Total System Global Area 1577058304 bytes
Fixed Size 2924832 bytes
Variable Size 788532960 bytes
Database Buffers 771751936 bytes
Redo Buffers 13848576 bytes
“`

  • 设置 DBID,并恢复 control 文件
    “`sql
    [oracle@testbak oracle]$ rman target /

Recovery Manager: Release 12.1.0.2.0 – Production on Thu Aug 11 11:11:48 2016

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

connected to target database: TESTDB (not mounted)

RMAN> set dbid=1234567890

executing command: SET DBID

RMAN> restore controlfile from ‘/u1/rmanbak/ctl_file_919512140_1_8223’;

Starting restore at 11-AUG-16
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u1/app/oracle/oradata/TESTDB/control01.ctl
output file name=/u1/app/oracle/oradata/TESTDB/control02.ctl
Finished restore at 11-AUG-16
“`

  • 将数据库启动到 mount 状态
    “`sql
    RMAN> alter database mount;

Statement processed
released channel: ORA_DISK_1
“`

  • 注册 rman 文件备份集,使用 shell 脚本快速生成 catalog 命令
    sql for file inls -1`; do echo ” catalog backuppiece ‘/u1/rmanbak/${file}’;”; done

例子:
RMAN>
cataloged backup piece
backup piece handle=/u1/rmanbak/db_bak_lev1_919512113_1_8214 RECID=8305 STAMP=919597658
“`

  • 删除之前配置的默认通道
    “`sql
    RMAN> configure channel 1 device type disk clear;

using target database control file instead of recovery catalog
old RMAN configuration parameters are successfully deleted

RMAN> configure channel 2 device type disk clear;

old RMAN configuration parameters are successfully deleted

RMAN> configure device type disk clear;

RMAN configuration parameters are successfully reset to default value
“`

  • 获取源数据库中数据文件的路径
    “`sql
    SQL> select file#,name from v$datafile;

FILE# NAME
—– ————————————————————
1 +DATADG/TESTDB/system01.dbf
2 +DATADG/TESTDB/system02.dbf
3 +DATADG/TESTDB/sysaux01.dbf
4 +DATADG/TESTDB/undotbs01.dbf
5 +DATADG/TESTDB/undotbs02.dbf
6 +DATADG/TESTDB/users01.dbf

SQL> select FILE#,NAME from v$tempfile;

FILE# NAME
—– ————————————————————
1 +DATADG/TESTDB/temp01.dbf
2 +DATADG/TESTDB/testtemp_01.dbf

SQL> select member from v$logfile;

MEMBER

+DATADG/TESTDB/redo02.log
+DATADG/TESTDB/redo01.log
+DATADG/TESTDB/redo03.log
+DATADG/TESTDB/redo04.log
“`

  • 使用 awk 生成 set newname 命令

    cat filenatest.txt | awk -F"[/+]" '{print"set newname for datafile "$1" to '\''/u1/app/oracle/oradata/TESTDB/"$NF"'\'';"}'
  • 编写如下脚本,然后执行数据还原。

    rman cmdfile=restore.rman
    restore.rman 内容:connect target sys/oracle
    run{set newname for datafile  1  to '/u1/app/oracle/oradata/TESTDB/system01.dbf';
    set newname for datafile  2  to '/u1/app/oracle/oradata/TESTDB/system02.dbf';
    set newname for datafile  3  to '/u1/app/oracle/oradata/TESTDB/sysaux01.dbf';
    set newname for datafile  4  to '/u1/app/oracle/oradata/TESTDB/undotbs01.dbf';
    set newname for datafile  5  to '/u1/app/oracle/oradata/TESTDB/undotbs02.dbf';
    set newname for datafile  6  to '/u1/app/oracle/oradata/TESTDB/users01.dbf';
    set newname for tempfile  1  to '/u1/app/oracle/oradata/TESTDB/temp01.dbf';
    set newname for tempfile  2  to '/u1/app/oracle/oradata/TESTDB/testtemp_01.dbf';
    restore database;
    switch datafile all;
    switch tempfile all;
    }

switch 命令作用是将新的数据文件路径写入 control 文件,用法可以参考 rman 备份恢复命令之 switch
命令执行过程中会有如下提示:
input datafile copy RECID=56 STAMP=919619004 file name=/u1/app/oracle/oradata/TESTDB/system01.dbf
renamed tempfile 1 to /u1/app/oracle/oradata/TESTDB/temp01.dbf in control file

  • 然后使用 recover database 命令进行完全恢复

    $ rman target /
    RMAN > recover database;
    -- 可以看到在使用 lev1 备份进行增量恢复
    channel ORA_DISK_1: reading from backup piece /u1/rmanbak/db_bak_lev1_919512036_1_8202
    channel ORA_DISK_1: piece handle=/u1/rmanbak/db_bak_lev1_919512036_1_8202 tag=DB_BAK_LEV1
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
    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 00012: /u1/app/oracle/oradata/TESTDB/testdata_l1_02.dbf
    destination for restore of datafile 00024: /u1/app/oracle/oradata/TESTDB/testdata_t30_01.dbf
    destination for restore of datafile 00036: /u1/app/oracle/oradata/TESTDB/test_idx_t10_01
    destination for restore of datafile 00038: /u1/app/oracle/oradata/TESTDB/testidx_t30_01.dbf
  • 过程中遇到错误,原因是只复制了备份机,没有应用源数据库的最新归档和 Online redo 文件,只能进行不完全恢复

    unable to find archived log
    archived log thread=2 sequence=7201
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR TESTSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 08/11/2016 20:27:33
    RMAN-06054: media recovery requesting unknown archived log for thread 2 with sequence 7201 and starting SCN of 816203242
  • 现在数据文件和临时文件已经通过 rman switch 更新了位置,还有重做日志文件需要修改 controlfile 修改日志文件的路径
    “`sql
    SQL> select member from v$logfile;

MEMBER

+DATADG/TESTDB/redo02.log
+DATADG/TESTDB/redo01.log
+DATADG/TESTDB/redo03.log
+DATADG/TESTDB/redo04.log

SQL> alter database backup controlfile to trace;

Database altered.

— 从 alert_TESTDB.log 可以获取 trace 文件的位置
Fri Aug 12 08:49:26 2016
alter database backup controlfile to trace
Fri Aug 12 08:49:26 2016
Backup controlfile written to trace file /u1/app/oracle/diag/rdbms/testdb/TESTDB/trace/TESTDB_ora_9049.trc
Completed: alter database backup controlfile to trace

— 在新文件中修改下 LOGFILE 的位置,并去除 RMAN 的信息即可。
SQL> CREATE CONTROLFILE REUSE DATABASE “TESTDB” RESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 4672
2 3 4 LOGFILE
GROUP 1 ‘/u1/app/oracle/oradata/TESTDB/redo01.log’ SIZE 50M BLOCKSIZE 512,
GROUP 2 ‘/u1/app/oracle/oradata/TESTDB/redo02.log’ SIZE 50M BLOCKSIZE 512
— STANDBY LOGFILE
DATAFILE
‘/u1/app/oracle/oradata/TESTDB/system01.dbf’,
‘/u1/app/oracle/oradata/TESTDB/system02.dbf’,
‘/u1/app/oracle/oradata/TESTDB/sysaux01.dbf’,
‘/u1/app/oracle/oradata/TESTDB/undotbs01.dbf’,
‘/u1/app/oracle/oradata/TESTDB/undotbs02.dbf’,
‘/u1/app/oracle/oradata/TESTDB/users01.dbf’,
CHARACTER SET AL32UTF8
;
64 65 66
Control file created.

— 新增一组日志文件
SQL> alter database add logfile thread 2
2 group 3 ‘/u1/app/oracle/oradata/TESTDB/redo03.log’ size 50m,
3 group 4 ‘/u1/app/oracle/oradata/TESTDB/redo04.log’ size 50m;
“`

  • 使用 resetlogs 打开数据库
    “`sql
    SQL> alter database open resetlogs;

Database altered.
“`

  • 因为 RMAN 不会重建临时表空间,需要手动建一下临时表空间
    “`sql
    SQL> alter tablespace temp add tempfile ‘/u1/app/oracle/oradata/TESTDB/temp01.dbf’ size 50m;

Tablespace altered.

SQL> alter tablespace TESTTEMP add tempfile ‘/u1/app/oracle/oradata/TESTDB/testtemp_01.dbf’ size 50m;

Tablespace altered.
“`

  • 清除未使用的 redo 日志组,其实正好是上面添加的 redo 文件
    “`sql
    SQL> select thread#,status,enabled from v$thread;

THREAD# STATUS ENABLED
——- ———- ———-
1 OPEN PUBLIC
2 CLOSED PUBLIC

SQL> col group for 99
SQL> select group#,thread#,archived,status from v$log;

GROUP# THREAD# ARC STATUS

     1       1 YES INACTIVE
     2       1 NO  CURRENT
     3       2 YES INACTIVE
     4       2 YES INACTIVE

SQL> alter database disable thread 2;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.

SQL> alter database drop logfile group 4;

Database altered.
“`

  • 删除多余的 undo 文件
    “`sql
    SQL> select name from v$tablespace where name like ‘UNDO%’;

NAME

UNDOTBS1
UNDOTBS2

SQL> show parameter undo_tablespace;

NAME TYPE VALUE
———————————— ———– ——————————
undo_tablespace string UNDOTBS1
SQL> drop tablespace undotbs2 including contents and datafiles;

Tablespace dropped.
“`

至此整套数据库环境搭建和数据恢复完成

–EOF–

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142085.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计16142字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中