- 浏览: 1100669 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:353680
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
将Oracle 数据库中某个用户迁移到另外一个库上,迁移的数据量大小约 120GB 。如果采用 expdp 导出的话时间会很长,再加上导出的 DMP 文件拷贝和 impdp 导入数据的时间,不能满足要求。
这里采用 RMAN 的 CONVERT 功能和 exp/expdp 的 transport_tablespace 的功能。前者将用户所在的表空间的数据文件从一个数据库所在的系统平台中拷贝到另外一个数据库系统上,后者将表空间对应的 metadata 数据拷贝出来。
测试过程虽然顺利,但最后想到一个问题, rman 中的 catalog 记录的 copy 的文件已经被数据库实例占用的情况下,该记录如何删除掉?
后来想到 rman convert 方法,它将文件系统文件拷贝到 ASM 磁盘组,不在 catalog 中留记录。同时,这个方法免去了文件名称修改的操作,更简洁高效。
使用 convert 可以实现跨平台的数据迁移,这点在环境复杂的项目中非常有用。
首先,介绍一下环境。
源库是 redhat linux as 5 ,单数据库实例,文件系统格式保存数据文件,数据库版本为 10.2.0.4 。
目标库是 redhat linux as 5 ,两节点的 RAC , ASM 格式保存数据文件,数据库版本为 10.2.0.4 。
可以使用 SELECT * FROM V$TRANSPORTABLE_PLATFORM; 检查这个版本上的表空间是否支持传输。结果当然是支持的。
其次,了解迁移的表空间和数据对象。
根据 dba_segments 查询到用户使用的哪些表空间,好决定要迁移的表空间。
在表空间确定了以后,如这里是 xxyy 。需要再根据表空间的 segment 都是哪些用户,如果不仅仅是要迁移的用户,还要将新的用户也找出来。
在目标库上提前将这些用户创建好。
这是因为我们采用的是表空间传输迁移数据,所以难免会有多的对象被迁移。根据实际情况权衡,决定是清理源头还是全部迁移。
表空间的 segment 的类型需要先分析一下。对于分区表、 IOT 表、 XMLType 对象等等不常见的,要先想想能不能用它迁移,这是第一点。
还有两点:一,目标库和源库的字符集要一致,否则请测试该方案;二、目标库不能有同名的表空间。
最后,开始正式迁移操作,步骤如下:
第一步,准备工作
校验表空间是否 self contained (注:不知道如何翻译,原文输出)
SQL> execute sys.dbms_tts.transport_set_check('XXYY', true);
SQL> select * from sys.transport_set_violations;
如果有记录,必须处理。
将表空间设置为只读状态。这点好理解,开始迁移了,就不能再写入数据到表空间了。
SQL> ALTER TABLESPACE XXYY READ ONLY;
第二步,使用 exp 导出表空间所有对象的 metadata
exp userid=\'sys/sys as sysdba\' file=tbs_exp.dmp log=tba_exp.log transport_tablespace=y tablespaces=XXYY
第三步,使用 rman 的 convert 将表空间的数据文件拷贝到文件系统上。
确定文件系统的平台名称
SQL> SELECT tp.platform_id,substr(d.PLATFORM_NAME,1,30), ENDIAN_FORMAT
2 FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
3 WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_ID SUBSTR(D.PLATFORM_NAME,1,30)
----------- ------------------------------------------------------------
ENDIAN_FORMAT
--------------
13 Linux x86 64-bit
Little
根据平台名称,拷贝出文件名称。
convert tablespace xxyy to platform="Linux x86 64-bit" FORMAT '/u01/oradata/servdb/%U';
测试操作过程如下
[oracle@xxtradedb1 servdb]$ rman target /
Recovery Manager: Release 10.2.0.4.0 - Production on Wed Apr 18 13:13:04 2012
Copyrigxx (c) 1982, 2007, Oracle. All rigxxs reserved.
connected to target database: SERVDB (DBID=3658273059)
RMAN> convert tablespace xxyy to platform="Linux x86 64-bit" FORMAT '/u01/oradata/servdb/%U';
Starting backup at 18-APR-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=347 devtype=DISK
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00035 name=/u01/oradata/servdb/datafile/xxyy01.dbf
^[converted datafile=/u01/oradata/servdb/data_D-SERVDB_I-3658273059_TS-XXYY_FNO-35_e1n8o3nc
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:10:55
Finished backup at 18-APR-12
第四步,将文件拷贝到目标库所在的系统上
这里使用 scp ,也可以使用 ftp ,那样会更快。
第五步,在目标库上建用户,导入数据
imp userid=\'sys/sys as sysdba\' file=tbs_exp.dmp log=tba_imp.log transport_tablespace=y datafiles='/dbbackup/servdb_rman/xxyy01.dbf'
第六步,检查表空间状态和调整表空间为读写
虽然目标库是 RAC ,文件又是保存在 ASM 上,但是也不是不能访问文件系统上的文件。
只是文件系统文件无法共享,所以,只能在一个节点上看到。
/dbbackup/servdb_rman@webdg1=>xxzq1$sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Wed Apr 18 16:39:56 2012
Copyrigxx (c) 1982, 2007, Oracle. All Rigxxs Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> set linesize 300
SQL> col name format a50
SQL> r
1* select file#,name,status from v$datafile
FILE# NAME STATUS
---------- -------------------------------------------------- -------
1 +LOGDG/xxzq/system01.dbf SYSTEM
2 +LOGDG/xxzq/undotbs01.dbf ONLINE
3 +LOGDG/xxzq/sysaux01.dbf ONLINE
4 +LOGDG/xxzq/users01.dbf ONLINE
5 +LOGDG/xxzq/undotbs02.dbf ONLINE
6 +LOGDG/xxzq/tbs_yy01.dbf ONLINE
7 /dbbackup/servdb_rman/xxyy01.dbf ONLINE
7 rows selected.
这个结果表空间的数据在其他实例上也操作了,将导致系统宕机,因为其他实例根本不能读写到这个系统上的文件。
我们正常将是设置为读写状态。这是为了将文件从文件系统上迁移到 ASM 上。
SQL> alter tablespace xxyy read write;
如果不将表空间设置为读写状态,则对此表空间文件的 COPY 将出错。开始我也没设置为读写,所以报错了。
RMAN> backup as copy datafile '/dbbackup/servdb_rman/xxyy01.dbf' format '+LOGDG/xxzq/xxyy01.dbf';
Starting backup at 18-APR-12
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 04/18/2012 16:45:25
RMAN-20201: datafile not found in the recovery catalog
RMAN-06010: error while looking up datafile: /dbbackup/servdb_rman/xxyy01.dbf
RMAN> exit
设置为读写后,正常将数据文件拷贝一份到了 ASM 上。
backup as copy datafile '/dbbackup/servdb_rman/xxyy01.dbf' format '+LOGDG/xxzq/xxyy01.dbf';
第七步,将文件离线,在重命名就可以了。
SQL> alter database datafile '/dbbackup/servdb_rman/xxyy01.dbf' offline;
Database altered.
SQL> alter database rename file '/dbbackup/servdb_rman/xxyy01.dbf' to '+LOGDG/xxzq/xxyy01.dbf';
Database altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+LOGDG/xxzq/system01.dbf
+LOGDG/xxzq/undotbs01.dbf
+LOGDG/xxzq/sysaux01.dbf
+LOGDG/xxzq/users01.dbf
+LOGDG/xxzq/undotbs02.dbf
+LOGDG/xxzq/tbs_yy01.dbf
+LOGDG/xxzq/xxyy01.dbf
7 rows selected.
SQL> alter database datafile 7 online;
alter database datafile 7 online
*
ERROR at line 1:
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: '+LOGDG/xxzq/xxyy01.dbf'
SQL> recover datafile 7;
Media recovery complete.
SQL> alter database datafile 7 online;
Database altered.
SQL> exit
迁移实际上到这步就结束了。
但最后想到一个问题。
我们将文件使用 copy 拷贝到了 asm 中,然后让实例使用了。
这时, rman 的 catalog 还是认为这个文件是它的一个拷贝,虽然不能删除,但始终是个芥蒂。
/dbbackup/servdb_rman@webdg1=>xxzq1$rman target /
Recovery Manager: Release 10.2.0.4.0 - Production on Wed Apr 18 16:20:36 2012
Copyrigxx (c) 1982, 2007, Oracle. All rigxxs reserved.
connected to target database: XXZQ (DBID=485623294)
RMAN> list copy;
using target database control file instead of recovery catalog
specification does not match any archive log in the recovery catalog
List of Datafile Copies
Key File S Completion Time Ckp SCN Ckp Time Name
------- ---- - --------------- ---------- --------------- ----
3 7 A 18-APR-12 98532714754 18-APR-12 +LOGDG/xxzq/xxyy01.dbf
尝试使用 RMAN 的 switch 作数据文件重命名,但 rman 中还是有这个记录,不能除掉。
RMAN> switch datafile '/dbbackup/servdb_rman/xxyy01.dbf' to copy;
最后,想到一个方法。使用 convert 代替 copy 将数据文件复制到 ASM 中。 convert 操作是不在 catalog 中留记录的。
上面列的操作步骤在第四步之后就进行跳转。
第四步中将文件传输到文件系统中后,使用 rman convert 将文件复制一份到 ASM 磁盘组中。
这个 convert 功能在 rman catalog 中不保留记录,可以实现 ASM 和文件系统的文件相互转移。
方法如下:
convert datafile '/dbbackup/servdb_rman/xxyy01.dbf' format '+LOGDG/xxzq/xxyy01.dbf';
这个文件约 5GB ,所用时间为 35 秒。
RMAN> convert datafile '/dbbackup/servdb_rman/xxyy01.dbf' format '+LOGDG/xxzq/xxyy01.dbf';
Starting backup at 19-APR-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=105 instance=xxzq1 devtype=DISK
channel ORA_DISK_1: starting datafile conversion
input filename=/dbbackup/servdb_rman/xxyy01.dbf
converted datafile=+LOGDG/xxzq/xxyy01.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:35
Finished backup at 19-APR-12
第五步,在目标库上建用户,导入数据
imp userid=\'sys/sys as sysdba\' file=tbs_exp.dmp log=tba_imp.log transport_tablespace=y datafiles='+LOGDG/xxzq/xxyy01.dbf'
这个步骤和上述用的差别就是文件名称的差别。
第六步,检查表空间状态和调整表空间为读写
因为数据文件本身就在 ASM 磁盘组上, RAC 的两个节点都能访问得到该文件,所以我们先查查文件状态。
SQL> set linesize 300
SQL> col name format a50
SQL> r
1* select file#,name,status from v$datafile
FILE# NAME STATUS
---------- -------------------------------------------------- -------
1 +LOGDG/xxzq/system01.dbf SYSTEM
2 +LOGDG/xxzq/undotbs01.dbf ONLINE
3 +LOGDG/xxzq/sysaux01.dbf ONLINE
4 +LOGDG/xxzq/users01.dbf ONLINE
5 +LOGDG/xxzq/undotbs02.dbf ONLINE
6 +LOGDG/xxzq/tbs_yy01.dbf ONLINE
7 +LOGDG/xxzq/xxyy01.dbf ONLINE
7 rows selected.
所有文件都是 ONLINE 的状态。
我们将其设置为读写状态,这样用户就可以读写迁移过来的表空间中的所有对象了。
SQL> alter tablespace xxyy read write;
我们回到 RMAN 中,使用 list copy 检查一下文件有没有拷贝记录。
/u01/oracle/home@webdg1=>xxzq1$rman target /
Recovery Manager: Release 10.2.0.4.0 - Production on Thu Apr 19 09:46:23 2012
Copyrigxx (c) 1982, 2007, Oracle. All rigxxs reserved.
connected to target database: XXZQ (DBID=485623294)
RMAN> list copy;
using target database control file instead of recovery catalog
specification does not match any archive log in the recovery catalog
结果和我们想的一样,在 rman catalog 中没有任何记录。因此该方法应该是首选。
总结
对已大数据量的迁移工作,使用表空间传输的方法实现是效率比较高的一种方法。
exp/expdp 迁移 metadata , rman convert 迁移数据文件。
他们的联合使用,可以支持跨平台、跨文件系统的迁移,这点在环境复杂的项目中非常有用。
发表评论
-
Oracle分区表的分区交互技术实现数据快速转移
2013-01-22 11:48 14836有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33304在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12994UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3818在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8712这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5295在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢 ... -
db block gets和consistent gets的分析
2012-12-26 18:09 0在Oracle的文档中有这样一段解释: db block g ... -
创建增量同步Oracle物化视图问题
2012-12-25 14:07 15337我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10797在O racle数据库中,通过v$archived_lo ... -
如何删掉临时表空间的文件
2012-12-18 15:40 0Unlike Oracle datafiles which m ... -
Oracle sql性能诊断暨event 10046和10053使用
2012-12-17 10:24 0早上em grid control监控显示数据库的负载增加,其 ... -
查LOB字段占用的空间大小
2012-12-13 16:00 4587查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4082这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4985Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4403Oracle的监听器服务注册 ... -
Deleting archivelog on physical standby with RMAN in Oracle 10g
2012-11-28 13:25 0Turns out to be quite easy ... -
to_char将number转成string的小技巧
2012-11-27 14:14 10646很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29329(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1925Oracle的data guard创建完成 ...
相关推荐
7. EXPDP/IMPDP工具:在使用可传输表空间特性时,EXPDP和IMPDP(Data Pump导出和导入)工具用于迁移表空间对象的元数据,它们是Oracle数据库进行大规模数据迁移的重要工具。 8. 注意事项:源和目标数据库的数据库...
### Oracle 数据库导出工具 exp 与 expdp 的使用...这种方法不仅可以显著减少导出的时间和存储空间的需求,还能够确保关键数据的安全性和完整性。在实际应用中,可以根据具体情况调整导出的范围,以达到最佳的效果。
Oracle数据库提供了强大的跨平台数据迁移功能,特别是通过RMAN(Recovery Manager)实现的可传输表空间技术。这个功能使得用户可以在不同字节序的平台上迁移数据库,从而实现硬件升级、操作系统更换或数据中心迁移等...
impdp 和 expdp 命令可以实现 Oracle 数据库之间的数据传输,例如从 Oracle 10g 到 Oracle 11g 的数据传输。 impdp 命令的基本格式为:impdp 用户名/密码@例程名 DUMPFILE=data.dmp version=Oracle 版本号 其中,...
需要注意的是,由于它们处理的数据量可能很大,因此在使用时应充分考虑性能和存储空间。同时,对于大型数据库,更推荐使用 RMAN(Recovery Manager)或 Data Pump(expdp/impdp)工具,因为它们提供了更高的性能和更...
根据上述知识点,可以总结出文档详细说明了Oracle中使用RMAN和TTS在不同操作系统平台之间传输表空间的方法,强调了对相关技术要点的理解,如平台字节序和自包含概念,同时也提到了expdp/impdp工具在数据迁移中的应用...
使用可传输表空间的特性复制数据 知识点一:什么是可传输表空间(Transportable Tablespaces) 可传输表空间是 Oracle 提供的一种特性,用于进行库对库的表空间复制。要使用可传输表空间的特性,oracle 至少是 8i ...
相比于传统的数据导出导入方式,表空间传输不仅效率更高,而且更加可靠,尤其适用于大数据量的迁移场景。不过,在实际操作过程中还需要仔细规划,确保所有前提条件都得到满足,以避免迁移过程中的各种潜在问题。
oracle expdp impdp 分区表重映射导出导入 数据迁移方案,以SI01用户为例子,将用户分区表导出后,将分区表重映射到新的表空间,完成数据迁移和检查。照方案例子按步去做,一定能成功。
本文详细讲解了 RMAN 的备份机制以及如何备份,涵盖了数据库备份和 RMAN 备份的概念、RMAN 备份的类型、备份集和镜像副本、备份路径、备份限制等知识点。 一、数据库备份与 RMAN 备份的概念 数据库备份是指将...
数据泵是Oracle提供的一个强大的数据迁移工具,它支持数据和元数据的快速高效传输。本文档《【数据泵】EXPDP导出表结构(真实案例).pdf》记录了作者在使用数据泵导出表结构的实践经验,并详细列出了关键知识点和操作...
在实际应用中,数据泵 expdp/impdp 工具可以用于各种数据迁移场景,例如将某用户所有数据导入另一个用户,并转换表空间;或者将某个表空间中的所有对象导入到另一个表空间中。 oracle 数据迁移是指将 oracle 数据库...
6. 局部数据迁移,如在广域网环境下,小数据量推荐使用PL/SQL Developer,而大数据量则推荐使用`exp`导出压缩包,通过网络传输后再用`imp`导入。在局域网内,有更多的选择,如`imp/exp`、`impdp/expdp`和`dblink`。 ...
通过对 Oracle 表空间创建命令的分析以及对 exp/imp2 导入导出工具的介绍,我们可以看到,在 Oracle 数据库管理中,合理配置表空间属性和灵活运用备份恢复工具对于保障数据的安全性和可靠性至关重要。希望本文能帮助...
- **expdp/impdp**:得益于直接路径模式和并行处理的支持,性能表现更佳,尤其是在大规模数据处理场景下优势明显。 #### 四、使用中的一些优化事项 **1. exp/imp 的优化** - **合理选择模式**:根据实际情况选择...
因此,我们建议使用 EXPDP 或传输表空间方式来进行迁移。另外,我们还需要注意参数文件的转换和数据库的兼容性问题。 本文档详细介绍了 Oracle RMAN 32位到64位迁移的步骤和注意事项,为用户提供了一个详细的迁移...
6. expdp/impdp的应用:expdp和impdp是Oracle的Data Pump工具中用于数据的导出(export)和导入(import)的命令。Data Pump提供了比传统exp/imp工具更高的性能和更多高级选项,特别是在处理大量数据时。 7. 实施...
【传输表空间】是Oracle数据库系统中的一种特性,允许用户在不同的数据库实例间移动表空间,这在数据库迁移、灾难恢复或系统整合等场景中非常有用。本篇内容主要介绍了如何在Linux和AIX操作系统之间,利用RMAN...