Hyper-V安装Oracle Linux6
本文记录在Windows Server 2012 R2上安装Oracle Enterprise Linux 6.4以及使用RMAN进行进行异机恢复的过程。Windows服务器增加Hyper-V功能
[*]打开服务器管理器
[*]在仪表板界面,添加角色和功能
[*]找到Hyper-V之后下一步直至安装完成
执行安装Linux
[*]打开Hyper-V管理器
[*]点击右边栏"虚拟交换机管理器",创建一个内部类型的虚拟交换机(相当于VMware的NAT)
[*]创建完成后,打开控制面板的网络连接,可以看到我们新建的虚拟机交换机。
[*]打开虚拟适配器的属性,将"Internet 协议版本4"的属性设置成固定地址。
[*]操作-> 新建 -> 虚拟机,将虚拟交换机选成上面新建的NAT,加载iso文件到光驱。
[*]配置项选完以后,重新启动就从光驱引导开始安装了,这里面的安装步骤就省略了。
[*]安装完成后,再次进入系统可能发现网卡硬件不存在,如果安装了桌面那么鼠标也不能使用。原因是HyperV相对其他虚拟机软件器驱动程序没有那么丰富。要实现这些虚拟硬件需要额外安装微软的Linux Integration Services,而且此软件对于6.4版本只支持Redhat和CentOS,幸好Oracle Enterprise Linux版本支持用Redhat内核启动。
[*]修改/boot/grub/grub.conf文件,配置default=1使默认从Redhat内核启动,同时可以参照另一篇文章关闭numa,避免启动时黑屏。如果是GUI界面的话,可以通过点操作-> 触发一个Ctrl+Alt+Delete到桌面,选择Cancel,然后就可以使用键盘按C打开Computer,后面可以打开一个路径并且选择File中的open in terminal从而打开shell终端进行修改了。配置完成以后重启一下系统。
[*]从微软的网站下载相应的Linux Integration Services,通过媒体-> DVD驱动器-> 插入下载的iso文件,用上文中的Ctrl+Alt+Delete方式使用键盘打开shell,进去光盘路径找到REDHAT64,使用./install.sh安装LIS,安装完成之后再重启一下系统。
[*] 再次进入系统后,就可以使用鼠标了,并且网卡硬件也加载了。然后配置/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"
[*]关闭防火墙和SELINUX,具体方法请搜索。
[*] 然后重启下网络,service network restart,使用putty测试是否能够使用ssh 192.168.5.2登陆。
增加硬盘
[*]在Hyper-V管理器右侧操作栏选择新建-> 硬盘,为了提高性能使用固定容量的硬盘
[*]关闭虚拟机,然后邮件虚拟机的设置项将硬盘添加到IDE控制器下面
[*]登录系统,可以使用fdisk -l查看到新挂载的硬盘
[*]格式化sdb成8e格式LVM形式
[*]解决'Partition 1 does not start on physical sector boundary.'参考问答
[*]使用partprobe使分区表生效
[*]使用pvcreate将分区转换为LVM可用的分区
[*]使用vgcreate创建卷组,后面可以使用vgextend进行扩展
[*]使用lvcreate创建逻辑分区,可用lvextend进行扩展,且使用-l一次添加所有的extend
[*]进行逻辑卷格式化并挂载。
可以发现Filesystem栏的命名方式都为"/dev/mapper"加上"-"。
[*]编辑/etc/fstab,使挂载持久化。
[*]可以通过touch一个文件,然后重启系统查看文件情况。
[*]因为发现后面发现硬盘空间不够,这里采用扩展方式增加硬盘空间。
[*]使用fdisk /dev/sdb将新增的容量分区到/dev/sdb2,按要求重启一次
[*]格式化为ext4格式mkfs -t ext4 /dev/sdb2
[*]使用vgextend将pv扩展到vg
[*]使用lvextend将新增容量都放到lv中
[*]使用resize2fs使新增空间可用
可以参考网上文档,Linux LVM硬盘管理及LVM扩容
安装Oracle 12C Database
[*]使用pscp将安装文件'linuxamd64_12102_database_1of2.zip'和'linuxamd64_12102_database_2of2.zip'上传至虚拟机
[*]依次解压两个zip文件,可以将所有的安装文件解压至database目录
[*] 先将NAT的地址放到/etc/hosts文件
# 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软件安装管理5 挂载本地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>
```
[*]因为是虚拟机,直接使用虚拟机管理连接登陆图形界面,使用oracle用户执行./runInstaller,就可以出现图形化安装界面。
[*]采用rman方式恢复数据库,所以只安装数据库软件。
[*]安装完成后可以通过"/u1/app/oraInventory/logs/installActions.log"查看安装日志
RMAN恢复数据库
准备备份文件
这部分内容参考"[三思笔记]RMAN管理ORACLE RAC数据库的备份与恢复"
[*] 因为生产的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.ziplinuxamd64_12102_database_2of2.ziplis4-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
$ rman target /
Recovery Manager:> 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>
Variable>
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
$ sqlplus / as sysdba
SQL*Plus:> Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition>
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>
Variable>
Database Buffers 771751936 bytes
Redo Buffers 13848576 bytes
```
[*]设置DBID,并恢复control文件
```sql
$ rman target /
Recovery Manager:> 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>>
Statement processed
released channel: ORA_DISK_1
```
[*]注册rman文件备份集,使用shell脚本快速生成catalog命令
``sqlfor 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 datafile1to '/u1/app/oracle/oradata/TESTDB/system01.dbf';
set newname for datafile2to '/u1/app/oracle/oradata/TESTDB/system02.dbf';
set newname for datafile3to '/u1/app/oracle/oradata/TESTDB/sysaux01.dbf';
set newname for datafile4to '/u1/app/oracle/oradata/TESTDB/undotbs01.dbf';
set newname for datafile5to '/u1/app/oracle/oradata/TESTDB/undotbs02.dbf';
set newname for datafile6to '/u1/app/oracle/oradata/TESTDB/users01.dbf';
set newname for tempfile1to '/u1/app/oracle/oradata/TESTDB/temp01.dbf';
set newname for tempfile2to '/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>>
Database> -- 从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:> -- 在新文件中修改下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'>
GROUP 2 '/u1/app/oracle/oradata/TESTDB/redo02.log'>
-- 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>>
2 group 3 '/u1/app/oracle/oradata/TESTDB/redo03.log'>
3 group 4 '/u1/app/oracle/oradata/TESTDB/redo04.log'>
```
[*]使用resetlogs打开数据库
```sql
SQL>>
Database>
```
[*]因为RMAN不会重建临时表空间,需要手动建一下临时表空间
```sql
SQL>>
Tablespace>
SQL>>
Tablespace>
```
[*]清除未使用的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 NOCURRENT
3 2 YES INACTIVE
4 2 YES INACTIVE
SQL>>
Database>
SQL>>
Database>
SQL>>
Database>
```
[*]删除多余的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--
页:
[1]