这次测试是在实际的生成环境,使用的是磁带库进行备份。然后根据时间点恢复,SCN恢复到源oracle数据库。
BE介质服务器是BAK01.
使用磁带库的import命令,导入10盒磁带。
扫面前的磁带,如下图,
扫面后的磁带,如下图,
扫描后的磁带还是不可识别的,如下图
在Robotic Libraries的slot上右键,运行Inventory,完成后,Online Media如下图:
其中BLP34,BLP038,BLP039的3盒磁带因为以前使用过,备份过数据,所以他们的Allocated Date与Media Label的图标都是不一样的。现在所有的磁带都是Blank Media。
这个步骤只有也只能在第一次加载磁带时做,因为磁带里没有数据。
将DB01, DB02上的数据备份到tape上。介质服务器是BAK01.
Step 1, 停止APP01,APP02上所有weblogic服务。
因为weblogic服务使用的数据库是DB01和DB02。
Step 2, 登陆DB01的sqlplus
安装:
1. copy //BAK01/C:/Program Files/Symantec/Backup Exec/Agents/RAWS32到DB01,DB02任意目录。
2. 运行RAWS32/SETUPAA.exe。
DB01的配置:
run agent
Change Settings
增加oracle实例,如下图
使用OS 系统登陆帐户,如下图
此策略对应的Selection List为BKSelDB01。
模板一:全备模板TplDB01Full
要求:1盒磁带做全备。
设备名称:ADIC 1。
介质集名称:MSDB01Full,附加周期为1天,覆盖周期为1天。
运行周期:每天2:00:00 PM开始运行,2:59:59 PM结束。
模板二:差异模板TplDB01Diff
要求:1盒磁带做差异备份。
设备名称:ADIC 1。
介质集名称:MSDB01Diff,附加周期为1天,覆盖周期为1天。
运行周期:每天2:30:00 PM开始运行,2:59:59 PM结束。
Menu: Tools -> Option –> Media Management
本案例的顺序为:
从暂存介质集搜索可以覆盖的介质。
从本介质集搜索可以覆盖的介质。
从其他介质集搜索可以覆盖的介质。
Menu: Network->Logon Accounts,添加以下帐户:
DB01 OS帐户与Oracle登陆帐户
略,见Policy设置。
全备Media Set,如下图
差异Media Set,如下图
这里我们可以选择的Device有ADIC 1,IBM 1,IBM 2。ADIC 1是磁带库,IBM1,IBM2是ADIC1的2个driver。如果选择ADIC 1,BE将自己选择driver,即使有1个driver发生故障,JOB也能够继续进行。
这里我们指定IBM1。
无,此为ORACLE备份。
Click Button “Edit Schedule Details”
Recurring Week days, click button “select all”
Time Window,
无,此备份无复制备份。
//Preferred source device就是要复制的对象。
//选择Run only according to rules for this template.
//查看rules
//点击Edit Ruels
无。
无。
新建选择项列表
Selections
Resource Credential 测试,
New jobs using policy
Moniter
作业建好后,2个作业开始等待运行。
Final error: 0xe0000340 - The Database script returned an error. Refer to the Database script output section in job logs for more details.
Final error category: Resource Errors
BE log info:
RMAN-12001: could not open channel ch0
RMAN-10008: could not create channel context
RMAN-10003: unable to connect to target database
ORA-12560: TNS:protocol adapter error
将数据库转为归档后,没有重启oracle服务。
打开service 管理器,重启OracleServiceEGOV01
重启监听器
Final error: 0xe0000340 - The Database script returned an error. Refer to the Database script output section in job logs for more details.
Final error category: Resource Errors
BE log info:
Starting backup at 25-APR-09
current log archived
channel ch0: starting archive log backupset
channel ch0: specifying archive log(s) in backup set
input archive log thread=1 sequence=357 recid=1 stamp=685118319
input archive log thread=1 sequence=358 recid=2 stamp=685118512
channel ch0: starting piece 1 at 25-APR-09
released channel: ch0
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup plus archivelog command at 04/25/2009 14:41:54
ORA-04030: out of process memory when trying to allocate 1049100 bytes (KSFQ heap,KSFQ Buffers)
1. 官方的描述如下
ORA-04030 out of process memory when trying to allocate string bytes (string,string)
Cause: Operating system process private memory has been exhausted.
Action: See the database administrator or operating system administrator to increase process memory quota. There may be a bug in the application that causes excessive allocations of process memory space.
这使我想起我当初在安装数据库时分配的内存可以过大,下图是我安装的配置:
安装后的oracle的内存分配如下图:(large_pool_size原来是0,后来修改到800M)
通过sql命令查看得知sga_target=1800M,pga_aggregate_target=600和我设置的一致,对于Share Memory Management设为automatic,oracle的说法是oracle会自己自行管理,看来是没有管理好,还得手动分配的好。
2. 网上搜的信息
现象:ORA-04030: 在尝试分配...字节 (hash-join subh,kllcqas:kllsltba) 时进程内存不足。
ORA-04030:out of process memory when trying to allocate string bytes
ORA-04030的出现原因及解决方法:
ORA-04030出现的基本都是过多的使用memory造成的
Oracle process使用的内存数量是有一定限制的:
A. 对于32 BIT系统,有SGA 1.7G限制
B. 某些OS系统本身也有一些内存参数限制
--运行 ulimit 看看
C. OS系统本身物理内存+Swap的限制
现在我们应该检查DB使用的SGA + PGA是否超过上面的限制。
SGA 包括 db_cache,shared_pool,large_pool,java_pool session的PGA包括sort_area_size/Hash_area_size/*_area_size 或者 pga_aggregate_target
还有执行的CODE以及一些data也会占用空间。
然后再根据情况降低里面的某些值了,比如db_cache,sort_area_size等等。
假如是OS系统的某Limited造成的,大家可以考虑放开限制man ulimit来观察如何放开限制……
根据以上的2点,确定需要调整内存大小小于1.7G。
1. 设置rman从SGA取内存
alter system set dbwr_io_slaves=2 scope=spfile;
alter system set backup_tape_io_slaves=true scope=spfile;
2. 调整SGA大小
alter system set sga_target=1200m;
alter system set sga_max_size=1200m scope=spfile;
3. 设置使用内存最大大小
alter system set large_pool_size=80m;
4. 重启oracle service。
5. 查看sga,pga,pool的大小。
全备
差异
登陆DB01,向数据库插入记录
登陆DB01,向数据库插入记录
手动运行差异JOB
注意此时的时间是11:17:57.
登陆DB01,向数据库插入记录
手动运行差异JOB
注意此时的时间是11:23:32.
登陆DB01,向数据库插入记录
手动运行差异JOB
注意此时的时间是11:33:32.
无。
介质服务器:BAK01。
DB服务器:DB01。
使用备份数据恢复到第3次备份时间点。
无。
无。
无。
无。
无。
无。
新建还原JOB,RestoreDB01NAST.
一定要从表空间还原。
解读上图:
从控制文件(Controll Files)看出,你可以恢复到列出的任何一个时间点。
从控制文件(Controll Files)看出,10:41:30是全备,11:04:14是第1次差异备份,11:19:53是第2次差异备份,11:25:47是第3次差异备份,11:36:04是第4次差异备份。
从控制文件(Controll Files)看出,可以恢复到的时间点比备份计划的时间点推迟了几分钟。
把鼠标放在任何一个表空间,便会有提示。
解读上图:
现在可以一目了然地看出哪个时间点的备份,而且是按备份的时间顺序排列的,一目了然,想怎么恢复就怎么恢复。
能看出源oracle的数据库文件的存放目录。
选中第3次备份时间点的控制文件。
解读上图:
1. 时间点或者SCN,在恢复时能够用到,让恢复时精确的恢复到这个点。
2. DatabaseID,在oracle Redirection还原时能够用到,目标数据库的ID要与源相同,否则无法恢复。
了解了以上的信息,那么我们就选择表空间进行恢复吧,如下图
这一步不能少,结果必须是成功的。
无。
选择第3次备份的SCN。
Monitor:
Step 1,登陆到目标oracle服务器DB01,打开cmd,输入SQLPLUS sys/password@SID as sysdba。
Step 2,检查数据。
因为还原到第3次备份的时间点,记录应该是400W。
呵呵,完全正确。
差异恢复是成功的,可以恢复到任何一个时间点。
介质服务器:BAK01。
DB服务器:DB01。
使用备份数据恢复到第2次备份时间点。
无。
直接双击作业RestoreDB01NAST.
查询第2次差异备份的SCN。
选择第2次备份的SCN。
Monitor:
遇到异常
Final error: 0xe0000340 - The Database script returned an error. Refer to the Database script output section in job logs for more details.
Final error category: Resource Errors
BE Log Info:
Starting recover at 26-APR-09
released channel: ch0
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 04/26/2009 00:36:55
RMAN-20208: UNTIL CHANGE is before RESETLOGS change
上一次的恢复,rman做了一次resetlogs,所以不可以恢复到resetlog之前的数据。
1. 直接恢复难以实现,据说oracle10g的rman可以还原到resetlogs之前的时间点,但是BE是不可以的,起码12.5这个版本不可以。
2. 删除DB01数据库,再重建相同的数据库,再做oracle Redirection恢复,这样肯定是可以的。
Step 1,登陆到目标oracle服务器DB01,打开cmd,输入SQLPLUS username/password@SID as sysdba。
Step 2,检查数据库是否正常。
由于最后一次恢复失败,导致数据库在关闭后,没有正常打开。
Step 3,rman登陆到DB01,rman target sys/password@sid.
运行命令:
>restore database;
>recover database;
>alter database open;
当完成命令后,数据库就有回到了最后一次归档状态,明显,最后一次归档的时间是第一次恢复的时间,所以现在的数据库数据应该是和第一次恢复时的一致。
Step 4,检查数据,SQLPLUS username/password@SID
同一个备份数据只能恢复一次,如果再次恢复只能做oracle Redirection恢复了。