复制数据库中需要注意的几点事项

任务简介:

此次复制的生产库数文件为9.18TB,实际分配的数据大小为5.16TB,使用RMAN压缩备份后为1.1TB。

复制端数据库采用单实例ASM存储方式管理,数据库版本为11.2.0.4. 数据文件目录为+DATA,14.5TB,归档日志目录为+ARCH,2TB。

生产库数据文件大小
SQL> select sum(bytes)/1024/1024/1024 GB from dba_segments;

        GB
----------
5287.02454

生产库实际分配的大小
SQL> select sum(bytes)/1024/1024/1024 GB from dba_data_files;

        GB
----------
9402.70592

注意事项一: 避免set newname脚本中出现同名文件

在rman中使用set newname时候为了保持文件名和生产库一致,可以采用手工命名的方式。例如:

set newname for datafile 1 to ‘+DATA/cmsdb/datafile/system01.dbf’;

这个方式出现了一个潜在的隐患,如果生产库中存在相同名字的数据文件存放在不同的目录中,在编写脚本时候容易出现重名的情况,导致RMAN restore出错。

select name from v$datafile where name like ‘%DATA_P008.dbf%’;
/sgpmdb/oradata/u01/DATA_P008.dbf
/sgpmdb/oradata/u06/DATA_P008.dbf

当我采用vi编辑命令将目录/sgpmdb/oradata/u01 统一改成+DATA/sgpmdb/datafile 就会自己创造出重名的文件。在好几百行的脚本中很难一眼看出这个问题。

:%s#/sgpmdb/oradata/u01/#+DATA/cmsdb/datafile/#g 

run{
...
set newname for datafile 1 to '+DATA/cmsdb/datafile/DATA_P008.dbf';
...
set newname for datafile 2 to '+DATA/cmsdb/datafile/DATA_P008.dbf';

}

执行RMAN restore 错误信息如下:

ORA-19504: failed to create file “+DATA/cmsdb/datafile/data_p008.dbf”
ORA-17502: ksfdcre:4 Failed to create file +DATA/cmsdb/datafile/data_p008.dbf
ORA-15005: name “cmsdb/datafile/data_p008.dbf” is already used by an existing alias

所以还是建议采用如下的方式让oracle来定义alias,保持文件名唯一。
run{
set newname for datafile 1 to '+DATA';
set newname for datafile 2 to '+DATA';
set newname for datafile 3 to '+DATA';
…...
}

注意事项二: 后台执行nohup的进程问题

vi编辑好RMAN脚本后,建议使用nohup命令在后台执行,避免执行过程中被以外干扰。

nohup ./rman_scripts.cmd &

rman在后台执行时,屏幕没有输出,可以通过tail -f ./nohup.out的方式来监控rman输出。

也可以通过ps -ef | grep 的方式来观察程序是否在后台执行。这里需要注意的是 ps -ef | grep 后要输入的是什么?

容易犯的错误是 ps -ef | grep nohup 

这个命令是没有返回结果的。如果错误的认为刚刚输入的命令没有起作用,而再次执行 nohup. /rman_scripts.cmd的话,悲剧产生了。该脚本被执行了2次!

如果是restore命令的话,并且采用了set newname for datafile 1 to '+DATA’;的写法数,+DATA磁盘组中就会存在两份数据文件,最终将磁盘空间撑爆。

正确的用法是 ps -ef | grep rman_scripts.cmd

以上总结都是在此次项目中出现的问题。在漫长的数据库恢复过程中,每一个错误都会耽误大量的时间,一定要小心谨慎。

时间: 2024-10-01 18:41:23

复制数据库中需要注意的几点事项的相关文章

HBase数据库中HTable和HTablePool使用注意事项

HTable和HTablePool都是HBase客户端API的一部分,可以使用它们对HBase表进行CRUD操作.下面结合在项目中的应用情况,对二者使用过程中的注意事项做一下概括总结. HTable HTable是HBase客户端与HBase服务端通讯的Java API对象,客户端可以通过HTable对象与服务端进行CRUD操作(增删改查).它的创建很简单: Configuration conf = HBaseConfiguration.create(); HTable table = new

oracle中如何通过RMAN复制数据库

通过使用数据库备份,DBA可以在同一服务器或其它服务器上建立副本数据库.这个副本数据库可以和主数据库有相同的名称(拷贝)或与主数据库名称不同(克隆). ORACLE在数据库拷贝和数据库克隆之间惟一不同的是拷贝的数据库不能更改名称.使用RMAN的复制数据库特性,可以从RMAN备份创建一个新的数据库,并为这个副本数据库保留已有的数据库名称或者赋予新的名称. RMAN术语和命令: A. 辅助数据库(Auxiliary database):RMAN将目标数据库复制到该数据库实例.要创建该数据库的参数文件

复制数据库表中两个字段数据的SQL语句

复制数据库表中两个字段数据的SQL语句 今天为表新添加一个字段,但又想与表中的另一个字段值相同,由于数据过多想通过sql语句实现,经测试下面的这句话确实很好用.   复制代码 代码如下: update jb51_temp set B=A jb51_temp 代表表明 A是有数值的字段,B是新添加的字段 ,记住空值表放到前面,如果set a=b,那么你的数值都为空了,就麻烦了,建议操作前备份数据库. 如何将一个字段里的值复制添加到另一个字段中 比如,有二个字段A和B,A字段是值是"我",

sql-将一个数据库中的所有表复制到另一个数据库中

问题描述 将一个数据库中的所有表复制到另一个数据库中 两个数据库不在一个服务器上!!! 比如我本机的ip地址为11.12.13.15 数据库名称为sqljiang 登陆名和密码分别为sa和sa123 服务器的ip为22.33.55.66 数据库名称为sqlfwqsjl 服务器中的数据库是空的 现在我想将本机sqljiang中的所有信息完整复制到服务器中,包括表结构. 表中的数据.视图.存储过程等,如何通过脚本实现. 由于服务器没有这么大的权限,因此不能通过直接还原数据库备份的方法... 解决方案

android-oracle同一数据库中怎样将一个用户下的表导入或复制到另一个 用户中

问题描述 oracle同一数据库中怎样将一个用户下的表导入或复制到另一个 用户中 ** oracle同一数据库中怎样将一个用户下的表导入或复制到另一个 用户中** 解决方案 oracle把一个用户的表数据复制到另一个用户oracle把一个用户下数据库对象的某个权限赋给另一个用户Oracle当前数据库用户访问另一个用户的表 解决方案二: exp owner=a imp fromuser=a touser=b 解决方案三: exp file=路径 full=y owner=用户1 imp fromu

VC ADO 怎么实现复制一个数据库中一个表的某些字段到另一个数据库的表中?

问题描述 VC ADO 怎么实现复制一个数据库中一个表的某些字段到另一个数据库的表中? 想从一个Access数据库中的a表中提取需要的字段复制到另一个数据库的b表中,有大神知道怎么弄吗 解决方案 循环读取第一个表的内容,然后插入第二个表.http://www.cnblogs.com/spatial/archive/2009/07/18/1526255.html 解决方案二: 循环复制,但是需要考虑a与b表是否一样,有什么对应关系,不能乱复制 解决方案三: 如何从一个数据库复制表的结构到另一个数据

vba-我想在VBA中将一个任意对象复制到一块内存里,或存入数据库中,咋办?

问题描述 我想在VBA中将一个任意对象复制到一块内存里,或存入数据库中,咋办? 比如,我在EXCEL中,写了如下: private sub test() dim temp() as byte '如下一句是我想象的,我想将thisWorkBook.Sheet1对象复制到temp数组 Redim temp(对象长度) CopyMemory ptr(temp(0)), ptr(sheet1), 对象长度 '如此这般,我就可以将这个对象写入数据库中了 end sub 但应该怎么做呢,C++用久了我觉得这

oracle 数据库复制到另一个数据库中

问题描述 oracle 数据库复制到另一个数据库中 现有oracle数据库test,要求将test中数据复制一份到test1,请问需要怎么操作,需要数据全部都在 解决方案 数据库导出,再导入test1 就行了 解决方案二: 数据库可视化工具 里面都有复制数据库的功能吧 实在不行 你可以导出表数据 再导入到新库里 解决方案三: 工具里面有导出表,然后在导进去好了 解决方案四: 网上搜一下用数据泵导出数据库 解决方案五: 可视化的工具可以直接进行复制吧.例如:Navicat for Oracle 解

嵌入Office,打开保存在数据库中存取,能控制复制粘贴

问题描述 嵌入Office,能打开Word与Excel.打开和保存文件时,不在本地存取,读写数据库方式.直接保存到数据库,打开也从数据库中打开.控制复制粘贴,不能将内部复制出去.也不能粘贴进来.有特权的人才可以.不能插入文件.