oracle学习3

本篇我们运用Oracle的rman备份 & 恢复方法进行实战。

1. 小明去出差

上篇讲到,小明学会了Oracle数据库的物理备份 & 恢复,离迎娶白富美又近了一步。

不久后,领导就派小明去出差了。

在实战场景里,小明是否能够经受得住考验,顺利完成任务呢?

我们拭目以待。

2. 查明数据库状况

小明到了客户现场,在客户的帮助下登录进了数据库主机。

他不知道这台数据库主机上有多少个Oracle数据库。

于是,小明敲下了如下的操作系统命令:

ps -ef | grep ora_

然后他看见了

ora11g 5882 1 0 Nov21 ?00:00:04 ora_q002_test

ora11g 20851 1 0 05:59 ?00:02:34 ora_vkrm_test

……

oracle 23565 1 0 11:52 ?00:00:04 ora_pmon_new

oracle 23567 1 0 11:52 ?00:00:07 ora_psp0_new

……

oracle 23583 1 0 11:52 ?00:00:01 ora_dbw0_old

oracle 23585 1 0 11:52 ?00:00:00 ora_lgwr_old

……

解释如下:

1.   左边第一列,是运行Oracle软件的用户名。它们是操作系统上的用户名。

2.   最后一列,是Oracle软件的进程名。进程的名字,被"_"切割为了3部分,最后一部分是数据库名(此处database=instance)

 

然后,小明开始了与客户的沟通。

你有两个用户运行Oracle数据库啊?小明怯生生地问。

是啊。用户回答。

“ora11g用户运行了test数据库。oracle用户运行了两个数据库,newold小明小心地说到。

是这样的,那就搬吧。用户下命令了。

3. 有什么不同

3.1 进入用户ora11g的操作界面

3.1.1 test数据库的SQL界面

su - ora11g

export ORACLE_SID=test

sqlplus "/ as sysdba"

3.1.2 test数据库的rman界面

su - ora11g

export ORACLE_SID=test

rman target /

3.2 进入用户oracle的操作界面

3.2.1 new数据库的SQL界面

su - oracle

export ORACLE_SID=new

sqlplus "/ as sysdba"

3.2.2 new数据库的rman界面

su - oracle

export ORACLE_SID=new

rman target /

3.2.3 old数据库的SQL界面

su - oracle

export ORACLE_SID=old

sqlplus "/ as sysdba"

3.2.4 old数据库的rman界面

su - oracle

export ORACLE_SID=old

rman target /

3.3 下一步

剩下的事情,我们在《Oracle初级篇2》里已经讲过了。

没有什么不同。

3.4 小结

我们来做一个小结:

1.   哪个操作系统用户运行的数据库,就su到哪个操作用户;

2.   通过设定环境变量ORACLE_SID的值来指定操作的数据库对象。

3.   严格地说,每次进入SQLrman界面以前,都应该检查ORACLE_SID的值是否满足要求。

小明似懂非懂地点了点,然后问到:为什么上一篇里,没这么复杂啊?

我答道:

1.   方便起见,一般用oracle用户来安装Oracle数据库,但这不排除有例外啊,所以我们需要检查确认。

2.   安装Oracle数据库时,我们通常会在系统环境变量里设定ORACLE_SID的值,所以单数据库情况往往不需要再设置这个环境变量。

3.   这是一个好的习惯。

查看ORACLE_SID环境变量的方法

echo $ORACLE_SID

设定的方法,我们上面已经讲了。

4. rman关键优化

4.1 指定备份文件的保存位置

在《Oracle初级篇2》第3章里,我们的备份文件都保存在默认位置。

我们通常希望能够保存在指定的目录。请看以下命令,我们把备份保存在/disk1目录里。

要求:

1.   /disk1目录已经存在。

2.   当前运行Oracle数据库的用户对/disk1目录有写权限。

注意,一行一行地输入,> 符号及它以前的字符无需输入。

RMAN> run{

2> allocate channel ch00 type disk format '/disk1/bk_%s_%p_%t';

3> backup database plus archivelog;

4> backup current controlfile;

5> release channel ch00;

6> }

注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志、控制文件生成的备份文件名字。

4.2 拆分备份文件

如果你有留意,你会发现,上述备份几乎是把所有的数据文件打包成1个备份文件,把归档日志文件打包成1个备份文件。

没有考虑备份文件是否过大,是否会备份时间过长,哪怕中间出个小问题也要前功尽弃、重新再来。

所以,我们需要限制每个备份文件里包含的原始文件(数据文件、归档日志文件数量),减小备份文件大小、缩短单个备份文件的生成时间。

我们使用filesperset参数。

注意,一行一行地输入,> 符号及它以前的字符无需输入。

RMAN> run{

2> allocate channel ch00 type disk format '/disk1/bk_%s_%p_%t';

3> backup

4> filesperset 2

5> database plus archivelog;

6> backup current controlfile;

7> release channel ch00;

8> }

注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志、控制文件生成的备份文件名字。

小结:

1.   根据数据文件的数量,决定filesperset后面的参数值,建议值为10

2.   本例中的filesperset参数值为2,是为了大家能在测试环境里验证。

3. 一条rman命令的结束符是分号,为了方便阅读,写成几行也是可以的。

4.3 多线程备份

我们注意到,上述每一条备份命令都是单线程执行的。

对于比较大的数据库,将会耗费比较多的时间。

我们希望能够多线程同时并行备份。

注意,一行一行地输入,> 符号及它以前的字符无需输入。

RMAN> run{

2> allocate channel ch00 type disk format '/disk1/bk_%s_%p_%t';

3> allocate channel ch01 type disk format '/disk1/bk_%s_%p_%t';

4> backup database plus archivelog;

5> backup current controlfile;

6> release channel ch00;

7> release channel ch01;

8> }

注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志、控制文件生成的备份文件名字。

小结:

1.   allocate channelrelease channel成对出现;

2.   每多1allocate channel,则多1个线程。

3.   并不是线程越多,备份速度越快,请综合考虑。

4.4 多线程恢复

同理可得,多线程恢复的命令。

注意,一行一行地输入,> 符号及它以前的字符无需输入。

RMAN> run{

2> allocate channel ch00 type disk;

3> allocate channel ch01 type disk;

4> restore database;

5> recover database;

6> release channel ch00;

7> release channel ch01;

8> }

注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志、控制文件生成的备份文件名字。


5.生成rman脚本

小明向我抱怨,一行一行地输入,太累了;而且只要一行输错了,就要重头开始,太麻烦了。

他问我,有没有简单的方法。

答案是有的。我们以4.1节为例来说明。

把以下内容保存在1个名为dong的文件,假设它的全路径为/test/dong

run{ 
allocate channel ch00 type disk format '/disk1/bk_%s_%p_%t'; 
backup database plus archivelog; 
backup current controlfile; 
release channel ch00; 
} 

然后,我们执行如下命令

注意,> 符号及它以前的字符无需输入。

RMAN> @/test/dong 

就等同于4.1节的效果。

6. 总结

小明经受住了考验,顺利地完成了出差任务,他已经是一名战士。小明加油!人生巅峰!

通过本篇的学习,我们进一步理解了上一篇的内容,把个人能力提高到了实战水平。

在将来,小明将会接受更多地挑战。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值