Oracle 可传输表空间的特性复制数据


[三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 [[[ [ 三思 笔 记 ]]] ] 使用Oracle Oracle Oracle Oracle 可传 输表 空 间 的特 性 复制 数 据 本系 列中 涉及 到不 少初 级概 念, 比 如 不完 全恢 复啦 , Catalog 啦, 通 道 啦, 辅 助 实例 之类 , 如 果 兄台 对一 些 基础 概念 仍有 不解 ,建 议先 参阅 我之 前写 的 “一步 一步学 RMAN”及“duplicate 复制 数据 库 ”系列 。 另注 :本 篇文 章已投 itpub 并发 表, 请勿 转载 ~~~ ----君三 思 junsansi@sina.com 第一篇基础概念.................................................................................................................................... ............................................ 2007.10.232007.10.232007.10.23 2007.10.23 第二篇操作步骤.................................................................................................................................... ............................................ 2007.10.262007.10.262007.10.26 2007.10.26 第三篇跨平台的传输实践.................................................................................... ............................ 2007.10.302007.10.302007.10.30 2007.10.30 第四篇转换字节顺序-CONVERT-CONVERT-CONVERT -CONVERT ................................................ ................ 2007.11.32007.11.32007.11.3 2007.11.3 第五篇实战CONVERT CONVERT CONVERT CONVERT 跨平台传输数据库2007.11.132007.11.132007.11.13 2007.11.13 第六篇通过RMAN RMAN RMAN RMAN 备份创建可传输表空间集介绍2007.11.72007.11.72007.11.7 2007.11.7 第七篇实战RMAN RMAN RMAN RMAN 备份传输表空间........................... ......... 2007.11.172007.11.172007.11.17 2007.11.17 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 第一篇基础概念2007.10.232007.10.232007.10.23 2007.10.23 一、关 于可传输表空间 (Transportable(Transportable(Transportable (Transportable Tablespaces)Tablespaces)Tablespaces) Tablespaces) 可传 输表 空间 的 特性 主要 用于 进行 库对 库的 表空 间复 制 ,要进 行传 输的表 空间 必须 置于 read-only 模式 。 如 果生 产库 不允 许 表空 间置 为 只读 模式 , 没关 系, 方法 还是 有的 ,通过 RMAN 备份 也可 以创 建可 传输 表空 间集 。 要使 用 可传 输表 空间 的 特性 , oracle 至少是 8i 企业 版或 更高 版本 。 如 果 是相 同操 作系 统平 台相 互导 入, 则 8i 及 以上 版本 均可支持,但如果是不同操作系统平台,数据库版本至少10g。被 传 输 的 表 空 间 即 可 以 是 字 典 管 理, 也可 以是 本地 管理 。并 且自 oracle9i 开始 ,被 传输 表空 间的 block size 可以 与目 标数 据库的 block size 不同 。 可传输表空间 (还有个集 )最大的优势是其速度比 export/import 或unload/load 要快的多。因为 可传输表空间 主要是复制数据文件到目标路径,然后再使用 export/import 或Data Pump export/import 等应用仅导出 /导入表空 间对 象的 元数 据到 新数 据库 。 提示 : 本 节 中 将完 全 采 用 Data Pump(数据 泵 )做为 导 入 导 出 的 工 具 。(什么 是 Data Pump,说 来 话 短 , Data Pump。。。。。其命令形式是impdp/expdp 分别对应导入 /导出 功能,是 自oracle10g 开始提供的一种新的应用。功 能和 命 令 形 式 都 与 imp/exp 极其 类似,但其相互之间的导出文件并不兼容)不过 , Data Pump 和常 规 的 imp/exp 同样 都能 够被 transportable tablespaces 特性 支持 。 但 是 如果 被传 输的 表空 间包含 XMLTypes,就必须 使用 imp/exp。 通常 有两 种方 式传 输表 空间 :  手工 操作 。按 本节 中的 步骤 操作 ,含 SQL*Plus, RMAN, IMP/EXP 或Data Pump 等各种指令操作。  使用 OEM 中的 传送 表空 间向 导。 要运 行传 送表 空间 向导 : 1、使 用具有 EXP_FULL_DATABASE 角色 的用 户登 陆到 OEM中; 2、点 击维 护 (Maintenance)链接 ; 3、点 击标 题下 方的 "Transport Tablespaces"。 二、关 于跨平台传输表空间 从oracle10g 开始 ,你 终于 可以 实现 跨平 台传 输表 空间 了。 无数的 dba 欢呼着,雀跃着。。。。 尽管仍非全部,但已经有很多平台可以支持跨平台的传送。可以通过查询 V$TRANSPORTABLE_PLATFORM 视图来确认哪些平台可以支持,该视图同时也可以获取各平台的 ENDIAN_FORMAT(字节 顺序 byte ordering) SQL> SELECTSELECTSELECT SELECT *** * FROMFROMFROM FROM V$TRANSPORTABLE_PLATFORMV$TRANSPORTABLE_PLATFORMV$TRANSPORTABLE_PLATFORM V$TRANSPORTABLE_PLATFORM ORDERORDERORDER ORDER BYBYBY BY PLATFORM_ID;PLATFORM_ID;PLATFORM_ID; PLATFORM_ID; PLATFORM_IDPLATFORM_NAMEENDIAN_FORMAT ----------------------------------------------------------------- 1 Solaris[tm] OE(32-bit) Big 2 Solaris[tm] OE(64-bit) Big 3 HP-UX(64-bit) Big 4 HP-UXIA(64-bit) Big [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 5 HP Tru64 UNIX Little 6 AIX-Based Systems (64-bit) Big 7 Microsoft Windows IA(32-bit) Little 8 Microsoft Windows IA(64-bit) Little 9 IBM zSeries Based Linux Big 10 Linux IA(32-bit) Little 11 Linux IA(64-bit) Little 12 Microsoft Windows 64-bit for AMD Little 13 Linux 64-bit for AMD Little 15 HP Open VMS Little 16 Apple Mac OS Big 17 Solaris Operating System (x86) Little 18 IBM Power Based Linux Big 已选择 17 行。 提示 :关 于字 节顺 序 (byte ordering) 一些 操作 系统 ( 包 括 Windows) 在 低 位内 存地 址中 用最 低有 效字 节存 储多 字节 二进 制数 据; 因 此 这种 系 统 被称 为低 地址 低字 节序 。 相 反, 其 它 的操 作系 统 ( 包括 Solaris) 将 最高 有效 字节 存储 在低 位内 存地 址中 , 因 此 这种 系统 被称 为低 地址 高字 节序 。当 一个 低地 址高 字节 序的 系统 试图 从一 个低 地址 低字 节序 的系 统中 读取 数据 时, 需 要 一个 转换 过程 — 否则 , 字 节 顺序 将导 致不 能正 确解 释读 取的 数据 。 不 过 , 当 在相 同字 节顺 序的 平台 之 间传 输表 空间 时, 不需 要任 何转 换。 如果 平台 间的 endian 不同 , 那么 在执 行导 入操 作之 之前 必须 首先 转换 源平 台的 表空 间到 目标 格式 , 如果 平 台间 endian format 相同 ,则 可以 跳过 转换 的步 骤, 即使 是不 同平 台。 当然 前提 是各 平台 的数 据库 版本 都不 低于 10g。 在表空间可被传输到不同平台之前,数据文件的文件头必须能够识别其所属的原平台是什么,对于 oracle 数据 库初 始化 参数中 COMPATIBLE 置为 10.0.0 或更 高之 后, 你 必 须至 少将 表空 间置为 read-write 一次 , 这 点 非 常重 要, 你现 在还 不知 道我 在说 什么 ?没 关系 ,很 快就 会知 道的 。 1、当你 计划 进行 传输 表空 间之 前, 你有 必要 了解 下列 的一 些信 息:  源库 和目 标库 的字符 集和 国家 字符 集必 须相 同。  要传 输的 表空 间不 能与 目标 服务 器现 有表 空间 名称 重复 。  有关 联关 系的 对象 (比如 物化 视图 )或包 含对 象 (比如 表分 区 )一般 情况 下不 能被 传送 , 除 非所 有的 关 联对 象都 在表 空间 集 (tablespace set)中。  自oracle10gR2 开始 , 可 以 传输含 XMLTypes 的表 空间 , 不 过 必须 使用 imp/exp 而不 能选 择数 据 泵 (impdp/expdp)。并 确保 imp/exp 命令的 CONSTRAINTS 和TRIGGERS 参数 设置为 Y。 下列 脚本 可以 列出 数据 库中 哪些 表空 间含 XMLTypes: select distinct p.tablespace_name from dba_tablespaces p, dba_xml_tables x, dba_users u, all_all_tables t where t.table_name = x.table_name and t.tablespace_name = p.tablespace_name and x.owner = u.username [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 2、传输 表空 间的 特性 并非 万能 的, 还有 些其 它方 面的 限制 :  高级 队列 (Advanced Queues):可 传输 表空 间的 特性 并不 支持 8.0 兼容 的高 级队 列  系统 表空 间 (SYSTEM Tablespace Objects):不 能传输 SYSTEM 表空 间或者 SYS 用户拥有的对象。  映射 类 型 (Opaque Types):由 应用指定并且映射到数据库(如RAW,BFILE 等)的类 型 可 以 被 传 输 , 但是 它们 并不 会被 做为 跨平 台转 换的 一部 分。 其实 际类 型是 什么 只有 指定 它的 应用 清楚 ,所 以必 须保 证这 个应 用解 决读 取各种 endian 问题 后再 考虑 将其 传输 到新 平台 。  浮点 数据 (Floating-Point Numbers):BINARY_FLOAT 和BINARY_DOUBLE 类型 可以 使用 数据 泵 导 入导 出 但不 支持 EXP。 3、兼容 性 从oracle10g 开始 , 不 论 目标 库运 行在 相同 或不 同的 平台 , 表 空 间都 可以 传输 到相 同或 更高 版本的 oracle 库。 但是 如果 生成 传输 表空 间 集oracle 版本 比目 标库 oracle 版本 高的 话, 数据 库 就会提 示错误 。 下表 列出 了源 表空 间和 目标 表空 间之 间在 不同 传输 情况下 oracle 最低 兼容 版本 。 传 输条件 源 表空间数据库 目 标表空间数据库 数据 库在 相同 平台 8i 8i 源库 与目 标库的 block size 不同 9i 9i 数据 库在 不同 平台 10g 10g [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 第二篇操作步骤2007.10.262007.10.262007.10.26 2007.10.26 下列 步骤 列出 了传 输一 个表 空间 的大 致过 程。 111 1 、检 查平台 对于 跨平 台的 传输 , 查询 V$TRANSPORTABLE_PLATFORM 视图 检查 两平 台的 endian format。如果相 同平 台的 传输 可以 跳过 此步 。 222 2 、选 择自包含表空间集 (self-contained(self-contained(self-contained (self-contained setsetset set ofofof of tablespaces)tablespaces)tablespaces) tablespaces) 提示 :啥 叫自 包含 呢, 自包 含表 示用 于传 输的 内部 表空 间集 没有 任何 对象 引用 指向 外部 表空 间集 。自 包含 分为 两种 :一 般自 包含 表空 间集 和完 全( 严格 )自 包含 表空 间集 。 下面 是一 些典 型的 违反 自包 含的 例子 :  索引 在待 传输 表空 间集 中而 表却 不在 。 (注意 , 如 果 表在 待传 输表 空间 集中 , 而 索引 不在 并不 违 反 自包 含原 则 ,当 然如 果你 坚持 这样 传输 的话 ,会 造成 目标 库中 该表 索引 丢失 )。  分区 表中 只有 部分 分区 在待 传输 表空 间集 (对于 分区 表, 要 么 全部 包含 在待 传输 表空 间集 中, 要 么 全不 包含 )。  待传 输表 空间 中, 对于 引用 完整 性约 束, 如果 约束 指向 的表 不在 待传 输表 空间 集, 则违 反自 包含 约束 ;但 如果 不传 输该 约束 ,则 与约 束指 向无 关。  对于 包含 LOB 列的 表, 如果 表在 待传 输表 空间 集中 ,而 Lob 列不 在, 也是 违反 自包 含原 则的 。 看看 ,条 件和 限制 还是 黑多 ,虽 然我 们的 大脑 里的 脑细 胞也 黑多 ,但 是如 果你 要传 输大 量数 据, 还想 依靠脑细胞一个个做判断显然是不明智的,幸运的是额们地神 oracle 想到了这一点,于是它给了我们一张 小纸 条, 上面 写着 几百 个大 字: 检查 是否 自包 含, 请用 DBMS_TTS.TRANSPORT_SET_CHECK,疗效好。 该产品采用纯中药制成,无毒无副作用,口服针剂均可, ooo 错了,是分严格方式和非严格方式验证。 那 么对 于严 格方 式和 非严 格方 式又 有什 么区 别呢 ,这 个问 题如 果又 要用 语言 描述 恐怕 不仅 占用 大量 字节 而且 又会 将你 的脑 袋搅 的一 团乱 ,所 以我 们留 待实 践操 作的 时候 通过 实例 来说 明吧 。 333 3 、生 成可传输表空间 , 还有个集 (transportable(transportable(transportable (transportable tablespacetablespacetablespace tablespace set)set)set) set) 首先 将要 导出 的表 空间 状态 置为 READ-ONLY。 可传 输表 空间 集包 含表 空间 集对 应的 数据 文件 以及 含表 空间 结构 信息 即元 数据的 export 文件 (可以 通 过 EXPDP 或EXP 执行 导 出)。 再次 提示 ,如 果导 出的 表空 间中含 XMLTypes,则 必须 使用 EXP 导入 。 如果 你准 备传 输表 空间 集到 不同 endian 平台 , 必 须首 先转 换表 空间 集的 endian 与目 标平 台相 同。 转 换 操作 即 可以 在源 库生 成传 输表 空间 集时 进行 ,也 可以 在目 标服 务器 导入 传输 表空 间之 前进 行。 注意 ,何 时 转换 并非 完全 随意 ,它 跟你 的策 略是 有很 大关 系的 , 后面 会有 黑详 细的 介绍 ,瞪 大眼 睛表 错过 。 可传 输表 空间 集创 建完 之后 ,可 以将 源库 的表 空间 状态 置为 read-write。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 444 4 、传 输表空间集 复制 数据 文件 以及 export 文件 到目 标数 据库 。 如 果需要转换,应该何时执 行 转换操作呢 ? 前面提到,如果涉及了 endian 的转换,可以在生成可传输表空间集时进行 (源平台进行 ),或者在导入 表空 间集 之前 进行 (目标 平台 进行 ),转 换的 命令 都是 一个 ,只 是参 数略 有不 同, 关于 命令 的用 法暂 且不 提, 后面 会有 专门 章节 介绍 和实 践。 在这 里我 们先 来深 入一 个这 个操 作究 竟放 在哪 里合 适。 按说 这个 操作 放在 哪里 执行 都可 以, 应该 没有 什么 可争 辩的 ,但 是值 的注 意的 是针 对我 们操 作的 数据 库, 特别 是对 于正 在运 行的 生产 数据 库, 三思 建议 你采 用在 目标 平台 上进 行转 换的 操作 ,缘 由如 下: 1). 缩短 停机 时间 在创 建可 传输 表空 间集 之前 ,需 要将 要传 输的 表空 间状 态置为 read-only。你 可以 将数 据文 件迅 速 复制 一份 镜像 , 并 生 成包 含元 数据的 export 文件 , 然 后 即可 将表 空间 状态 置为 read-write 状态 。 这 种 安 排使 得表 空间 必须 保持 为只 读的 时间 尽可 能的 短。 2). 提高 执行 性能 生产 数据 库往 往同 时在 处理 多个 应用 ,而 此时 如果 再用 其进 行转 换操 作可 能增 加系 统负 载, 并且 系统 此时 由于 执行 的任 务较 多, 转换 效率 也并 非最 高。 将转 换操 作移 到目 标平 台进 行, 通常 对于 目标 平台 都是 做为 备份 角色 ,其 系统 负载 相对 是比 较低 的, 执行 转换 操作 的效 率相 对也 会更 高。 3). 简化 复制 操作 通过 在目 标平 台执 行转 换命 令时 指定 db_file_name_convert 参数 , 直 接 将数 据文 件转 换到 目标 目 录 内, 简化 复制 时的 操作 。 555 5 、导 入表空间集 使用 IMPDP 或IMP 导入 表空 间集 元数 据到 目标 库 , 如 果你 采用 的是 Data Pump Import/Export,还可以 将步 骤更 简练 , Data Pump 支持 一个 名为 NETWORK_LINK 的参 数, 通过 该参 数指 定的 数据 链, 你甚 至可 以跳过 Expdp 生成源库元数据的操作, Impdp 通过数据库链接从源数据库中获得所需的元数据,并在目标 数据 库中 重新 创建 它们 。 导入 完成 之后 ,如 果需 要, 将目 标库 中导 入的 表空 间状 态置为 read-write。 这样 我们 整个 跨平 台的 传输 就完 成了 , 整 体 来看 步骤 非常 简单 , 就 是 "导出 ->复制 ->导入 ", 简 称传 输三 板 斧。 困难 处并 不是 这把 斧子 重, 而是 不同 情况 下, 你得 能够 明智 的选 择斧 势, 是劈 是砍 还是 砸呢 ,不 同的 选择 会有 不同的结果,有时候你选择了开头,却选择不了这结果,一旦结果不是你想要的,没关系, oracle 会再给你新 的选 择, 下面 我们 就来 看看 这结 果吧 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 第三篇跨平台的传输实践2007.10.302007.10.302007.10.30 2007.10.30 终于 要进 入实 践了 ,我 们假 设现 有数 据库 a:SID=jssweb 做为 源数 据库 ,数 据库 b:SID=jsstts 做为 目标 数 据库 。从 数据库 a复制 表空间 jssweb 到数 据库 b。下 面是 具体 操作 步骤 : 一 、确认平台是否支持 (Determine(Determine(Determine (Determine ififif if PlatformsPlatformsPlatforms Platforms areareare are SupportedSupportedSupported Supported andandand and Endianness)Endianness)Endianness) Endianness) 检查 平台 版本 以及 Endian, 确 认是 否支 持我 们的 传输 条件 。 如 果是 不同 平台 间的 传输 , 本 步 操作 必不 可少 。 例如 : E:\ORA10G>set oracle_sid=jssweb 首先 连接 到源 数据 库。 E:\ORA10G>sqlplus "/ as sysdba" SQL> col name heading '实例 名 ' for a10 SQL> col version heading '数据 库版 本 ' for a15 SQL> col platform_name heading '操作 系统 平台 ' for a30 SQL> col endian_format heading '字节 顺序 ' for a15 执行 查询 , 获取 平台 信息 SQL> SELECT d.NAME, i.VERSION, d.PLATFORM_NAME, ENDIAN_FORMAT 2 FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d, V$INSTANCE i 3 WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME 4 and d.DB_UNIQUE_NAME = i.INSTANCE_NAME; 实例 名 数据 库版 本 操作 系统 平台 字节 顺序 ---------------------------------------------------------------------- JSSWEB 10.2.0.1.0 Microsoft Windows IA(32-bit) Little 然后 连接 到目 标数 据库 ,执 行同 样的 查询 。 [oracle@jsslinux ~]$ echo $ORACLE_SID jsstts [oracle@jsslinux ~]$ sqlplus "/ as sysdba" SQL> col name heading '实例 名 ' for a10 SQL> col version heading '数据 库版 本 ' for a15 SQL> col platform_name heading '操作 系统 平台 ' for a30 SQL> col endian_format heading '字节 顺序 ' for a15 SQL> SELECT d.NAME, i.VERSION, d.PLATFORM_NAME, ENDIAN_FORMAT 2 FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d, V$INSTANCE i 3 WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME 4 and d.DB_UNIQUE_NAME = i.INSTANCE_NAME; [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 实例 名 数据 库版 本 操作 系统 平台 字节 顺序 ---------------------------------------------------------------------- JSSTTS 10.2.0.1.0 Linux IA(32-bit) Little SQL> 上述 查询 可以 得到 数据 库版 本、 操作 系统 平台 以及 ENDIAN。结 合我 们上 节提 供的 传输 版本 对照 表确 认是 否满 足我 们的 传输 要求 。 呵呵,这里 我们 运气不错,虽然是两个 不同 的操 作系 统 平台 ,但由于都采 用了 oracle10g, 并且 字节 顺序 相同 ,不 仅 支持 跨平 台传 输而 且还 可以 省掉 字节 转换 的操 作 。 二、选 择自包含的表空间集 (Pick(Pick(Pick (Pick aaa a Self-ContainedSelf-ContainedSelf-Contained Self-Contained SetSetSet Set ofofof of Tablespaces)Tablespaces)Tablespaces) Tablespaces) 待传 输的 表空 间集 中对 象可 能会 存在 与其 它对 象逻 辑或 物理 上的 关联 ,但 这里 我们 要强 调的 就是 可传 输的 表空 间集 必须 是自 包含 的, 前面 我们 提到 使用 DBMS_TTS 包的 TRANSPORT_SET_CHECK 过程 来验 证待 传输 表空 间集 是否 自包 含, TRANSPORT_SET_CHECK 过程 可以 以两 种方 式执 行: 非严 格方 式和 严格 方式 。 提示 ,使用 sys 用户 执行 DBMS_TTS 包的 过程 ,或 者是 被赋于 EXECUTE_CATALOG_ROLE 角色的用户。 严格 方式 验证 就是 在调用 TRANSPORT_SET_CHECK 过程 时指定 FULL_CHECK 参数为 TRUE。严格方式 不只 检查 表空 间集 引用 的对 象是 否自 包含 ,同 时会 检查 被其 它表 空间 引用 的对 象, 引用 者是 否在 表空 间集 中。 文字 太绕 口, 以本 次演 示中 要传 输的 表空 间为 例。 表空间 jssweb 有表 DEPT,其 索引 DEPT.IDX_DEPT_DEPTNO 在users 表空 间。 SQL> exec dbms_tts.transport_set_check('jssweb', TRUE); PL/SQL 过程 已成 功完 成。 SQL> SELECT*FROM TRANSPORT_SET_VIOLATIONS; 未选 定行 如果 表空 间集 满足 自包 含检 查, 则视 图返 回空 记录 。 执行 严格 方式 的检 查: SQL> exec dbms_tts.transport_set_check('jssweb', TRUE,TRUE); PL/SQL 过程 已成 功完 成。 SQL> SELECT*FROM TRANSPORT_SET_VIOLATIONS; VIOLATIONS -------------------------------------------------------------------------------- [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 Index JSS.IDX_DEPT_DEPTNO in tablespace USERS points to table JSS.DEPT in tables pace JSSWEB 不满 足自 包含 验证 , SELECT 语句 返回 违反 的信 息, 你可 以根 据其 提示 进行 修正 。 提示 :如 果要 检查 的表 空间 有多 个, 相互 之间 以逗 号分 隔即 可。 三、生 成可传输表空间集 (Generate(Generate(Generate (Generate aaa a TransportableTransportableTransportable Transportable TablespaceTablespaceTablespace Tablespace Set)Set)Set) Set) 执行 export 操作 的用 户需 要被 赋于 EXP_FULL_DATABASEEXP_FULL_DATABASEEXP_FULL_DATABASE EXP_FULL_DATABASE 角色 。 再次 提示 , 生 成 可传 输表 空间 集之 前, 必 须 将要 传输 的表 空间 置为 read-only, 不 然你 就得 选择 通过 RMAN 备份 生成 表空 间集 了。 确认 所选 择的 表空 间都 是自 包含 之后 ,按 照下 列步 骤进 行操 作。 1、将表 空间 置为 READ-ONLY; SQL> ALTERTABLESPACEJSSWEBREADONLY; 表空 间已 更改 。 2、使用 Data Dump 导出 表空 间集 元数 据 SQL> host 进入 操作 系统 命令 行 E:\ORA10G>expdpexpdpexpdp expdp system/verysafesystem/verysafesystem/verysafe system/verysafe DUMPFILE=expdp_jssweb.dmpDUMPFILE=expdp_jssweb.dmpDUMPFILE=expdp_jssweb.dmp DUMPFILE=expdp_jssweb.dmp DIRECTORY=DATADIRECTORY=DATADIRECTORY=DATA DIRECTORY=DATA _PUMP_DIR_PUMP_DIR_PUMP_DIR _PUMP_DIR TRANSPORT_TABLESPACES=jsswebTRANSPORT_TABLESPACES=jsswebTRANSPORT_TABLESPACES=jssweb TRANSPORT_TABLESPACES=jssweb ..................................... ..................................... 启动"SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/******** DUMPFILE=expdp_jssweb.dmp DIRECTORY=DA TA_PUMP_DIR TRANSPORT_TABLESPACES=jssweb 处理 对象 类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK 处理 对象 类型 TRANSPORTABLE_EXPORT/TABLE 处理 对象 类型 TRANSPORTABLE_EXPORT/INDEX 处理 对象 类型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT 处理 对象 类型 TRANSPORTABLE_EXPORT/COMMENT 处理 对象 类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK 已成 功加 载 /卸载 了主 表 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" ****************************************************************************** SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 的转 储文 件集 为 : E:\ORA10G\PRODUCT\10.2.0\ADMIN\JSSWEB\DPDUMP\EXPDP_JSSWEB.DMP 作业 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" 已于 10:54:43 成功 完成 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 这里 简单 介绍 一下 本例 中调 用的 参数 :  DUMPFILE:表 示导 出文 件的 文件 名  DIRECTORY:这个 DIRECTORY 所指可 并不 是实 际的 物理 目录 哟, 它是 物理 路径 在 oracle 中的 一个别 名, 这样 一旦 你需 要调 用路 径就 非常 方便 ,不 需要 写繁 长的 路径 ,修 改路 径的 时候 也同 样很 方便, 只需要修改 directory 别名这一处即可。在 10g 中默认创建了一个名为 DATA_PUMP_DIR,其路径指向到: $ORACLE_BASE\10.2.0\admin\SID NAME\dpdump,此 处我 们直 接引 用。  TRANSPORT_TABLESPACES:对于 TTS 操作 这是 个必 须指 定的 参数 ,指 定要 传输 的表 空间 。  TRANSPORT_FULL_CHECK:如果 你希 望执 行严 格自 包含 导出 的话 ,可 以指 定本 参数 值为 Y。 EXPDP 的参 数还 有很 多, 要 查看 其全 部参 数, 可 以通 过调用 expdp help=y 的方 式获 得, 如 果 想明 确 各 参数 的详 细解 释, 可以 参考 Oracle® Database Utilities。 提示 : EXPDP 只是 导出 的待 传输 表空 间的 目录 结构 信息 (元数 据 ),并 不包 含实 际数 据, 因此 导出 的速 度非 常快 ,而 且文 件也 很小 ,所 以千 万表 看到 它很 小, 就以 为导 出的 文件 有问 题。 3、如果 两平 台间 的字 节顺 序不 一致 的话 , 中 间 需要 有个 转换 过程 , 前 章 操作 步骤 里也 曾深 入分 析过 , 我 们 此次 演示 中不 存在 字节 顺序 不一 致的 问题 ,所 以此 步跳 过, 留待 后续 展现 。 四、传 输表空间集到目标库 (Transport(Transport(Transport (Transport thethethe the TablespaceTablespaceTablespace Tablespace Set)Set)Set) Set) 复制 表空 间对 应的 数据 文件 以及 表空 间元 数据 导出 文件 到目 标库 , 这 个技 术含 量是 黑低 的嘛 , ftp(使用 二 进 制方 式传 输 )、 网 络 共享 或拿个 u盘等 等都 可行 , 条 条 大路 通目 标嘛 。 但 是 复制 的时 候需 要注 意路 径, 复 制 目 的 地应 该以 目标 库为 准, 比如 DIRECTORY 的指向 路径 ,如 果你 仍然 想使 用 DATA_PUMP_DIR 的话就 得先 确认 目标 库是 否存 在这 个对 象, 以及 这个 对象 在目 标库 中对 应的 物理 路径 是什 么, 表空 间的 元数 据导 出文 件应 该复 制到 这个 路径 下: SQL> select * from dba_directories where directory_name='DATA_PUMP_DIR'; OWNERDIRECTORY_NAMEDIRECTORY_PATH ----------------------------------------------------------------- SYS DATA_PUMP_DIR /opt/ora10g/admin/jsstts/dpdump/ 数据 文件 复制 完之 后, 千万 表忘 将源 库中 的表 空间 状态 置为 read-write,切 记切 记。 SQL> alteralteralter alter tablespacetablespacetablespace tablespace JSSWEBJSSWEBJSSWEB JSSWEB readreadread read write;write;write; write; 表空 间已 更改 。 SQL> select tablespace_name,status from dba_tablespaces; TABLESPACE_NAMESTATUS --------------------------------------- SYSTEMONLINE UNDOTBS1 ONLINE SYSAUXONLINE TEMPONLINE USERSONLINE [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 JSSWEBONLINE 已选择 6行。 五、导 入表空间集 (Import(Import(Import (Import thethethe the TablespaceTablespaceTablespace Tablespace Set)Set)Set) Set) 注意 , 如 果 传输 的表 空间集 block_size 与目 标库 的默认 block_size 不同 , 那 你 的第 一步 就得 是设 置目 标库 中 DB_nK_CACHE_SIZE 的初 始化 参数 。 1、导入 元数 据 [oracle@jsslinux ~]$ impdpimpdpimpdp impdp system/verysafesystem/verysafesystem/verysafe system/verysafe DUMPFILE=EXPDP_JSSWEB.DMPDUMPFILE=EXPDP_JSSWEB.DMPDUMPFILE=EXPDP_JSSWEB.DMP DUMPFILE=EXPDP_JSSWEB.DMP DIRECTORY=DATA_PUMP_DIRDIRECTORY=DATA_PUMP_DIRDIRECTORY=DATA_PUMP_DIR DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/ora10g/oradata/jsstts/jssweb.dbfTRANSPORT_DATAFILES=/opt/ora10g/oradata/jsstts/jssweb.dbfTRANSPORT_DATAFILES=/opt/ora10g/oradata/jsstts/jssweb.dbf TRANSPORT_DATAFILES=/opt/ora10g/oradata/jsstts/jssweb.dbf REMAP_SCHEMA=(jss:jssl)REMAP_SCHEMA=(jss:jssl)REMAP_SCHEMA=(jss:jssl) REMAP_SCHEMA=(jss:jssl) Import: Release 10.2.0.1.0 - Production on 星期 一 , 05 11 月, 2007 14:02:33 Copyright (c) 2003, 2005, Oracle. All rights reserved. 连接 到 : Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options 已成 功加 载 /卸载 了主 表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 启动"SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** DUMPFILE=EXPDP_JSSWEB.DMP DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/ora10g/oradata/jsstts/jssweb.dbf REMAP_SCHEMA=(jss:jssl) 处理 对象 类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK 处理 对象 类型 TRANSPORTABLE_EXPORT/TABLE 处理 对象 类型 TRANSPORTABLE_EXPORT/INDEX 处理 对象 类型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT 处理 对象 类型 TRANSPORTABLE_EXPORT/COMMENT 处理 对象 类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK 作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 14:02:40 成功 完成 IMPDP 的命 令形 式与 EXPDP 完成 相同 ,只 是有 个别 参数 不同 。以 上述 为例 :  DUMPFILE:与 前文 EXPDP 介绍 相同  DIRECTORY:与 前文 EXPDP 介绍 相同  TRANSPORT_DATAFILES:被 传输 的数 据文 件路 径, 如果 有多 个, 以逗 号分 隔。  REMAP_SCHEMA:此 参数 并非 必须 。参 数的 功能 是指 定传 输的 表空 间中 对象 的归 属。 白话 点说 就是 源库 中对 象属于 schema A, 对 目 标库 后你 想将 其对 象归 属于 schema B, 则 可 以通 过此 参数 指定 。 如 果 不指 定参 数的 话, 则 表 空间 中对 象在 目标 库中 仍然 属于 schema A, 前 提是 存在 A用户 , 如 果不 存在 的话 导 入会 报错 , 提 醒 你要 么更 改所 属对 象要 么创 建用户 A。 如 果 有多个 schema 的归 属需 要转 移, 那 就指 定多 个 REMAP_SCHEMA 参数 即可 。 2、如果 需要 ,将 刚导 入的 表空 间状 态置为 read-write 刚导 入的 表空 间默 认是 read-only 状态 (因为 你在 源库 将其 置为 read-only 啦), 如 果需 要, 别 忘了 更改 其 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 状态 。 SQL> alteralteralter alter tablespacetablespacetablespace tablespace JSSWEBJSSWEBJSSWEB JSSWEB readreadread read write;write;write; write; 表空 间已 更改 。 注:前文中生成导入导出文件也可由 EXP/IMP 命令生成,具体 EXP/IMP 的命令语法与 EXPDP/IMPDP 非 常类 似这 里就 不详 述了 , 大 家 可以 通过 调用 HELP=Y 参数 获取 其帮 助信 息。 需 要 注意 的是 , 如 果 表空 间中 包 含 XMLTypes,那你只能使用 EXP/IMP 命令执行导出 /导入,并确认 CONSTRAINTS 和TRIGGERS 参数被设置为 Y。 传输 成功 ! 黑 黑, 大 家 也都 是这 么认 为的 吧。 En,为了 不影 响大 家的 美好 心情 , 俺 是绝 对不 会告 诉大 家由 于 三思 在导 出时 并未 执行 严格 自包 含造成 DEPT 表的 索引 丢失 这种 小事 的: ) [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 第四篇转换字节顺序(Endian-ness)-CONVERT(Endian-ness)-CONVERT(Endian-ness)-CONVERT (Endian-ness)-CONVERT 2007.11.32007.11.32007.11.3 2007.11.3 对于 oracle10g 的可传输表空间特性而言,我觉着最另人兴奋的就是跨平台的传输了 (尽管仍非所有平台都 支持 )。这 意味 着一 旦数 据库 涉及 到操 作系 统平 台的 变更 ,再 不用 像之 前那 样通过 exp/imp 这类 慢的 要死 的应 用 来操 作了 。 更 加 值的 庆幸 的是 , 转 换 这个 操作 并不 复杂 , 归 根 结底 , 它 只 是一 个命 令 (挠头 , 难 道 真的 只有 一 个 吗, 不像 oracle 风格 啊, oracle 一向 是喜 欢出 选择 题的 ),是 的, 只有 一个 -- CONVERT。 CONVERT 是RMAN 中提 供的 一个 命令 ,专 门用 于进 行字 节顺 序转 换的 解决 方案 ,其 语法 如图 所示 : 由上 图可 见, CONVERT 命令 可以 转换 数据 文件 、表 空间 甚至 整个 数据 库的 字节 顺序 ,  CONVERTTABLESPACE:用 于在 源库 转换 指定 表空 间的 数据 文件 (第3步执 行 )。  CONVERTDATAFILE:用 于在 目标 库转 换数 据文 件到 目标 平台 (第4步执 行 )。  CONVERTDATABASE:用 于从 源平 台转 换及 传输 整个 数据 库到 目标 平台 ,并 确保 创建 需要 的数 据文 件, 视你 的需 求即 可以 在源 库执 行也 可以 在目 标库 执行 。 CONVERT DATAFILE 和CONVERT TABLESPACE 还可 用于 操作 ASM(Automatic Storage Management 自动 存储 管 理 )文件 的移入移出,这项功能用处极大,因为众所周知通常操作系统的命令例如Unix 系统 的 cp 或 Windows 系统的 copy 等命 令是 不能 直接 读写 ASM 中文 件。 要想 操作 ASM 中文 件, 只有 RMAN,这 可是 真正 的华 山一 条路 ,舍 它其 谁。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 没有CONVERT CONVERT CONVERT CONVERT 是 不行的,但 是 CONVERT CONVERT CONVERT CONVERT 也 不是万能的。 1、对 于 CONVERTDATAFILE,CONVERT TABLESPACE 以及 CONVERT DATABASE 的所 有 应 用 , 需 要 注意 :  CONVERT 操作 并不 会改 变源 文件 ,转 换操 作也 并不 是在 本地 完成 ,而 是直 接写 入目 的地 。  源库 和目 标库 的初 始化 参数中 COMPATIBLE 参数 至少 被设 置为 10.0  在10g 之前, CLOB 字段做为变长字符集创建, CONVERT 命令并不会转换这些列,而直接将其 传输到目标库。直到后续有读取操作时,自动将其转换为目标字节顺序格式并保存。 10g 之后 CLOB 列的 字符 集被 设置为 AL16UTF16,完 全平 台无 关, 所以 就更 加不 用考 虑了 。  CONVERT 命令并不会转换用户自定义的数据类型。如果你希望在数据库之间传输平台指定格式 的映 射对 象, 应该 调用 Data Pump。  在传输到其它平台之前,要传输的表空间至少要被置为 read-write 状态一次 (为什么?因为数据文 件的 文件 头必 须能 够识 别其 所属 的原 平台 是什 么 )。 因 此 对于 那些 read-only 的待 传输 表空 间, 你 必须 先将 其 置为 read-write,然 后再 置为 read-only。 2、对于 CONVERT DATAFILE 和CONVERT TABLESPACE 操作 的一 些注 意事 项:  如果 在源 库平 台操 作, 必 须 使用 CONVERT TABLESPACE... TOPLATFORM, 不 能 使用 CONVERT DATAFILE 转换个 别数 据文 件。 而如 果是 在目 标库 平台 操作 ,则 必须 使用 CONVERT DATAFILE... FROM PLATFORM... TO PLATFORM 而不 能用 CONVERTTABLESPACE。 因 为 目标 库还 没有 表空 间的 信息 , 自 然 也找 到其 对应 的数 据文 件。  FORMAT 和DB_FILE_NAME_CONVERT 参数 可以 同时 使用 , 也 可 以都 不使 用, 如 果 两个 参数 都 不使 用的 话, 目标 平台 中的 文件 路径 会默 认引 用源 平台 中的 路径 。  并非 所有 的平 台都 支持 CONVERT,通过查询V$TRANSPORTABLE_PLATFORM 视图 确认 所操 作 的平 台是 否支持 CONVERT 命令 。 要 跨 平台 的传 输表 空间 必须 源和 目标 平台 都在 视图 中的 平台 列表 才可 以 。  由于操作系统命令不支持直接操作文件到ASM,你可以通过CONVERT TABLESPACE 或 CONVERT DATAFILE 移动文 件到 ASM 中即使 不涉 及 endian format 的转换 。使 用 CONVERT 命令可 以提 供与 操作 系统的 copy 操作 等同 的功 能, 所不 同的是 CONVERT 操作 的是 ASM。 3、对于 CONVERT DATABASE 的操 作, 除了 上述第 1条中 的限 制外 ,还 有些 其它 的注 意事 项: 对于 传输 整个 数据 库而 言最 主要 的一 个限 制是 源平 台和 目标 平台 必须 拥有 相同的 endian format(只能 有限 跨 平台了 )。例如,你可以从 Windows 系统传输数据库到 Linux x86 系统,或者从 HP-UX 到AIX,但是如果你想 从Solaris 传输整个数据库到 Linux x86 的话就不能应用这项特性了。当然如果必须在这种情况下传输的话,可 以选 择手 工建 库, 然后 通过 CONVERT TABLESPACE 或CONVERT DATAFILE 命令传输:) 提示:事实上,即使源平台和目标平台的 endian formats 完全相同,对于 CONVERT DATABASE 命令而言 也仍 然需 要转 换的 过程 。 这 主 要是 为了 保证 各种 类型 , 比 如回 滚段 等都 被重 新格 式以 确保 与目 标平 台的 兼容 性 。 下面 是些 其它 方面 不支 持直 接使 用的 限制 :  控制 文件和 Redo log 文件 不会 被传 输。 目 标平 台的 控制 文件和 redo logs 会在 传输 过程 中自 动创 建, 并且 目标 库建 立后以 open resetlogs 方式 打开 新数 据库 。 提示 : 由 于 目标 库的 控制 文件 是在 传输 过程 中创 建, 源 库 中的 RMAN 备份 信息 并不 会被 生成 到新 库 中 (即使 有 )。  BFILE 类型 对应 的文 件不 会被 传输 。 不过 RMAN在执行 CONVERT DATABASE 时会 将引用 BFILE 类型 的对 象输 出一 个列 表, 用户 可以 根据 列表 手工 操作 BFILE 的文 件到 目标 平台 。  本地 管理 的临 时表 空间 数据 文件 不会 被传 输, 而在 传输 过程 中自 动重 建。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289  外部 表以及 Directories 不会 被传 输。 与 BFILE 一样 , RMAN 也会 提供 一个 列表 供你 手工 操作 时 参 考。  密码 文件 不会 被传 输。 不过 RMAN 也会 在执行 CONVERT DATABASE 命令 时输 出用 户以 及其 对 应的 权限 ,你 可以 对照 输出 手工 创建 新的 密码 文件 。 CONVERT 命令的参数并不多,而且也都比较容易理解,不再一一详细介绍,后面我们通过具体示例演示 来辅 助理 解。 一、使用CONVERTCONVERTCONVERT CONVERT TABLESPACETABLESPACETABLESPACE TABLESPACE 前面 提到 , CONVERT TABLESPACE 必须 在源 平台 执行 , 用 于 转换 表空 间的 endian format 到目 标平 台, 通 常的 调用 形式 是: RMAN> CONVERTTABLESPACE ts_1, ts_2... TOPLATFORM'platform_name'; 并且 可以 在命 令中 指定 FORMAT 或DB_FILE_NAME_CONVERT 参数 来设 置转 换后 数据 文件 的命 名规 则, PARALLELISM 参数 指定 转换 的并 行度 (用于 提高 转换 效率 的, 有 点 类似 rman 备份 恢复 中的 通道 数概 念 )。例如: RMAN> CONVERTTABLESPACE jssweb TOPLATFORM'Linux IA(32-bit)' db_file_name_convert 'E:\ora10g\oradata\jssweb','e:\oratmp\oradata' PARALLELISM 3; 注意 示例 中的 PARALLELISM 参数 , 如 果 该参 数值 设置 的不 合理 , 有 可 能适 得其 反, 花 费 的时 间反 而更 长, 一般 而言 ,推 荐并 行度 大小 不要 超过 要转 换的 数据 文件 的数 量。 另外 对于 FORMAT 和DB_FILE_NAME_CONVERT 参数 前面 介绍 中也 提到 了, 两 个参 数可 以同 时指 定, 如 果同 时指 定了 两个 参数 , 则 rman 会以 FORMAT 参数 的设 定为 准。 如 果 两个 参数 都未 指定 的话 , rman 就会 按 照 它自 己的 规则 生成 文件 。具 体规 则呢 这里 就不 描述 了, 总之 就是 数字 和字 母组 合, 如果 你决 定按 照它 的规 则命 令文 件, 那么 我至 少能 确认 一件 事 ---单看 文件 名, 你已 经不 能分 辩这 个文 件是 干嘛 的了 。 二、使用CONVERTCONVERTCONVERT CONVERT DATAFILEDATAFILEDATAFILE DATAFILE CONVERT DATAFILE 则是必须在目标平台执行,用于转换指定数据文件到指定的 endian format.通常的调 用形 式如 下: RMAN> CONVERTDATAFILE datafile_1, datafile_2... FROMPLATFORM'platform_name'; 可以 通过 指定 TO PLATFORM 参数 设定 转换 到的 字节 顺序 , 如 果 不指 定该 参数 , 默 认 转换 到当 前平 台。 不 过FROM PLATFORM 参数 的值 必须 是与 其对 应的 源平 台, 不然 convert 可能 会出 错。 同样 CONVERTDATAFILE 也可 以指定 FORMAT,DB_FILE_NAME_CONVERT,PARALLELISM 等参 数, 如例 : RMAN> CONVERTDATAFILE 2> 'E:\ora10g\oradata\jssweb\jssweb1.dbf', 3> 'E:\ora10g\oradata\jssweb\jssweb2.dbf' 5> TO PLATFORM="Linux IA(32-bit)" [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 6> FROM PLATFORM="Microsoft Windows IA(32-bit)" 7> DB_FILE_NAME_CONVERT= 8> "E:\ora10g\oradata", "/opt/oar10g/oradata"; 这些 参数 的功 能的 格式与 CONVERT TABLESPACE 中介 绍的 完全 一致 ,这 里就 不多 废话 了。 三、使用CONVERTCONVERTCONVERT CONVERT DATABASEDATABASEDATABASE DATABASE 假设 源平台与目标平台拥有相同的字节顺序,RMAN 能够 自动处理大多数在目标平台创建新库的操作。 CONVERTDATABASE 传输 数据 库到 新平 台需 要一 个较 长的 过程 ,主 要包 含下 面一 些部 分: 1、准备 工作 :使用 DBMS_TDB 包。 DMBS_TDB 包提 供了 两个 非常 有用 的 函数 : 提示 :建 议 将SERVEROUTPUT 设置为 ON,以 便能 够查 看到 函数 执行 过程 的输 出 。   DBMS_TDB.CHECK_DB DBMS_TDB.CHECK_DB DBMS_TDB.CHECK_DB DBMS_TDB.CHECK_DB 检 查数据库状态 此函 数 检查 数据 库是 否能 被传 输到 目标 平台 以及 数据 库当 前状 态是 否能 够进 行传 输操 作。 拥有 下 列几 个可 选参 数: target_platform_name: 目 标 平台 的名 称, 可 以 通过 V$DB_TRANSPORTABLE_PLATFORM 视图 查 询获 得。 此 参 数并 非必 选, 但 如 果你 指定了 skip_option 参数 , 则 本参 数也 必须 指定 。 忽 略此 参数 , 则 默认 目标 平台 与源 平台 相同 , skip_option: 非 必选 参数 , 指 定待 传输 的数 据库 要跳 过检 查的 选项 (如果 有 )。 支 持 字符 或数 值调 用。  DBMS_TDB.SKIP_NONE 或0:检 查所 有表 空间  DBMS_TDB.SKIP_OFFLINE 或2:跳过 offline 表空 间的 数据 文件  DBMS_TDB.SKIP_READONLY 或3:跳过 read-only 表空 间的 数据 文件 例如 : 提示 :执 行前 先将 数据 库置为 read-only 模式 。 SQL> set serveroutput on SQL> declare 2 db_ready boolean; 3 begin 4 db_ready := dbms_tdb.check_db('Microsoft Windows IA(32-bit)', 2); 5 if (db_ready) then 6 dbms_output.put_line('True'); 7 else 8 dbms_output.put_line('False'); 9 end if; 10 end; 11 / Database is not open in READ-ONLY mode. Open the database in READ-ONLY mode and retry. False 如果 数 据 库 可 被 传 输 , DBMS_TDB.CHECK_DB 会返 回 true,否则 返 回 false,如 果 执 行 结 果 返 回 false, 会 自 动输 出数 据库 不能 够传 输的 原因 (如果 SERVEROUTPUT 被置为 on 的话 ), 下 表 是一 些可 能 遇到 的问 题以 及解 决方 案: 提示 信息 解决 方案 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 在serveroutput 被置为 on 的情 况下 ,如果 DBMS_TDB.CHECK_DB 执行 后除了 pl/sql 成功 执行 外 没有 其它 输出 信息 ,说 明数 据库 状态 正常 ,支 持传 输操 作。   DBMS_TDB.CHECK_EXTERNAL DBMS_TDB.CHECK_EXTERNAL DBMS_TDB.CHECK_EXTERNAL DBMS_TDB.CHECK_EXTERNAL 确 认外部对象 必须 使用 DBMS_TDB.CHECK_EXTERNAL 函数 来检 查是 否存 在外 部表 , directories 或Bfiles,因 为RMAN的CONVERT命令 不能 自动 传输 这些 对象 。 DBMS_TDB.CHECK_EXTERNAL函数 没有 参 数, 直接 执行 即可 。例 如 : SQL> set serveroutput on SQL> declare 2 external boolean; 3 begin 4 external := dbms_tdb.check_external; 5 end; 6 / The following directories exist in the database: SYS.DATA_PUMP_DIR 如果没有任何外部的对象,除了 pl/sql 成功执行外不会有其它输出信息,但一旦有输出信息,如 上例 中所 示的 你就 需要 注意 ,最 好记 录下 来, 当传 输完 成之 后, 根据 需要 手工 创建 这些 对象 到目 标数 据库 中。 听 明 白了 吧, 本 函 数成 功执 行与 否并 不会 影响 传输 操作 , 这 个 函数 说白 了就 是给 你列 个单 儿 , 然后 告诉 你单 子上 有的 这些 它都 不负 责传 送, 如果 确实 需要 那你 就得 自个 干。 2、转换 数据 库 前面 就已 经提 到过 ,转 换操 作即 可以 在源 平台 执行 也可 以在 目标 平台 执行 ,并 且我 们推 荐转 换操 作在 目标 平台 执行 , 对于 CONVERT DATABASE 而言 , 源 平台 执行 和目 标平 台执 行还 是有 些区 别, 具 体 操作 的 时候 还得 根据 实据 情况 做选 择, 下面 分别 说明 : 对 于在源平台执行转换操作 而 言,通常步 骤 如下: ·启动 数据 库到 read only 模式 。 ·DBMS_TDB.CHECK_DB 检查 数据 库是 否可 被传 输 Unrecognized target platform name. 不能 识别 目标 平台 的名 称 检查 V$DB_TRANSPORTABLE_PLATFORM 视图 , 确 实 目标 平 台 在视 图列 表中 ,或 者, 你没 敲错 字母 。 Target platform has a different endian format. 目标 平台 拥有 不同 的字 节顺 序, 不 能被 CONVERT DATABASE 所 支持 ,死 了这 条心 吧。 Database is not open read-only. 源库 未被以 read only 模式 打开 , shutdown 了重 开一 遍再 试试 。 There are active or in-doubt transactions in the database. 源库存在活动事务,回滚或解决该事务然后打开数据库到read- only 模式 再重 试。 Deferred transaction rollback needs to be done. 源库有未完成的延期事务,以正常模式打开数据库完成它,然后 再read only 模式 打开 数据 库重 试 Database compatibility version is below 10. 源库初 始化 参数 中 COMPATIBLE 参数低 于 10,修改 该参 数,重 启数 据库到 read only 后重 试 Some tablespaces have not been open read- write with compatibility version is 10 or higher. 源库 初始 化参 数中 COMPATIBLE 参数 修改 后, 表 空间 尚未 被置 为 read-write 过, 还记得 我们前面说过的吗?表空间至少要被置为 read-write 一次 。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 ·DBMS_TDB.CHECK_EXTERNAL 检查 外部 对象 ·执行 CONVERT DATABASE 命令 ,例 如: RMAN> convert database new database 'jsstts' 2> transport script 'e:\oratmp\script\ts.sql' 3> to platform 'Linux IA(32-bit)' 4> db_file_name_convert 'E:\ora10g\oradata\jssweb' 'e:\oratmp\oradata'; 得到 下列 文件 :  转换 后的 数据 文件 : 已 转 换的 待传 输文 件, 本 例中 保存 至: e:\oratmp\oradata', 文件 名与 源 库 中相 同。  transport script: 在 目 标平 台执 行的 创建 数据 库的 脚本 , 本 例 中名为 ts.sql, 该 文件 内容 仅供 参 考, 你需 要再 根据 实际 情况 修改 其中 的参 数值 。  客户 端初 始化 参数 文件 : 文 件名 及路 径包 含在 CONVERT DATABASE 的输 出内 容中 , 在 输 出 结果 的最 后。 文件 中的 参数 值多 继承 自源 库, 你可 以根 据需 要进 行适 当修 改。 转换 完成 (此时 可将 源库 置为 read-write 了),然 后将 文件 复制 到目 标数 据库 ,在 目标 平台 执行 transport script,创建 数据 库即 可。 注意 ,如 果前 一步 操作 生成 的文 件复 制到 目标 平台 后路 径发 生修 改, 务必 修改 transport script 文件 中对 应的 参数 值。 对 于在目标平台执行转换操 作 : 前面 的准 备工 作与 在源 平台 进行 转换 操作 是一 样的 , 所 不 同的 仅仅 只是 执行 CONVERT DATABASE 命 令时 调用 的参 数, 如例 : RMAN> convert database on target platform 2> convert script 'e:\oratmp\script\cs.rman' 3> transport script 'e:\oratmp\script\ts.sql' 4> new database 'jsstts' 5> db_file_name_convert 'E:\ora10g\oradata\jssweb' 'e:\oratmp\oradata'; 得到 下列 文件 :  convert script:在目标平台执行的转换数据文件的脚本(实际内容就是前面讲到的convert datafile 命令 ,不 过这 个是 convert database 命令 自动 生成 的 )。  transport script: 在 目 标平 台执 行的 创建 数据 库的 脚本 , 本 例 中名为 ts.sql, 该 文件 内容 仅供 参 考, 你需 要再 根据 实际 情况 修改 其中 的参 数值 。  客户 端初 始化 参数 文件 : 文 件名 及路 径包 含在 CONVERT DATABASE 的输 出内 容中 , 在 输 出 结果 的最 后。 文件 中的 参数 值多 继承 自源 库, 你可 以根 据需 要进 行适 当修 改。 你大 概也 注意 到了 ,此 时并 未生 成数 据文 件, 这是 因为 转换 操作 将在 目标 平台 执行 ,所 以你 直接 将源 平台 中的 数据 文件 复制 到目 标平 台即 可。 然后 即可 将源 库置为 read-write 状态 了。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 第五篇实战CONVERT CONVERT CONVERT CONVERT 跨平台传输数据库2007.11.132007.11.132007.11.13 2007.11.13 设定 : 源数 据库 : JSSWEB,Oracle10.2.0.1 ,Windows 2003(32-bit) 目标 数据 库: JSSCON,Oracle10.2.0.1 ,RHEL U2 (32-bit),已 安装 好数 据库 软件 。 注: 我 知道 , 我 明 白, 我 理解 , 字 节 顺序 相同 , 按 照 前面 说的 应该 不需 要使用 CONVERT 转换 的嘛 !没错 你说 的 对, 我们 这是 演示 ,你 别当 真, 更别 糊涂 ,相 同字 节顺 序是 不需要 convert,但convert database 例外 的嘛 。 一 、启动数据库 到 readreadread read only only only only 状态 首先 连接 到源 数据 库。 E:\ORA10G>set oracle_sid=jssweb E:\ORA10G>sqlplus "/ as sysdba" 启动到 read only 状态 SQL> startup mount ORACLE 例程 已经 启动 。 Total System Global Area 113246208 bytes Fixed Size 1247564 bytes Variable Size 92276404 bytes Database Buffers 12582912 bytes Redo Buffers 7139328 bytes 数据 库装 载完 毕。 SQL> alter database open read only; 数据 库已 更改 。 二 、检查数据库是否支持传 输 ,主要检查 平 台 SQL> set serveroutput on SQL> declare 2 db_ready boolean; 3 begin 4 db_ready := dbms_tdb.check_db('Linux IA(32-bit)'); 5 end; 6 / PL/SQL 过程 已成 功完 成。 无输 出, 说明 支持 平台 间转 换, 然后 检查 是否 存在 外部 对象 。 SQL> declare 2 external boolean; 3 begin 4 external := dbms_tdb.check_external; [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 5 end; 6 / The following directories exist in the database: SYS.DATA_PUMP_DIR Sys 用户 下有 一个 directory,记 录下 来。 三 、执 行 CONVERT CONVERT CONVERT CONVERT 命 令,假设我 们 希望在源平 台 执行转换操 作 。 首先 连接到 RMAN 管理 器中 。 E:\ora10g>rman target / 选择 在源 平台 执行 转换 操作 (注意 下列 中的 加粗 部分 ) RMAN> convertconvertconvert convert databasedatabasedatabase database newnewnew new databasedatabasedatabase database 'jsscon''jsscon''jsscon' 'jsscon' 2>2>2> 2> transporttransporttransport transport scriptscriptscript script 'e:\oratmp\script\ts.sql''e:\oratmp\script\ts.sql''e:\oratmp\script\ts.sql' 'e:\oratmp\script\ts.sql' 3>3>3> 3> tototo to platformplatformplatform platform 'Linux'Linux'Linux 'Linux IAIAIA IA (32-bit)'(32-bit)'(32-bit)' (32-bit)' 4>4>4> 4> db_file_name_convertdb_file_name_convertdb_file_name_convert db_file_name_convert 'E:\ora10g\oradata\jssweb''E:\ora10g\oradata\jssweb''E:\ora10g\oradata\jssweb' 'E:\ora10g\oradata\jssweb' 'e:\oratmp\oradata';'e:\oratmp\oradata';'e:\oratmp\oradata'; 'e:\oratmp\oradata'; 启动 convert 于16-11 月-07 使用 通道 ORA_DISK_1 在数 据库 中找 到目 录 SYS.DATA_PUMP_DIR 在口 令文 件中 找到 用户 SYS(具有 SYSDBA and SYSOPER 权限 ) 通道 ORA_DISK_1: 启动 数据 文件 转换 输入 数据 文件 fno=00001 name=E:\ORA10G\ORADATA\JSSWEB\SYSTEM01.DBF 已转 换的 数据 文件 = E:\ORATMP\ORADATA\SYSTEM01.DBF 通道 ORA_DISK_1: 数据 文件 转换 完毕 , 经过 时间 : 00:00:25 通道 ORA_DISK_1: 启动 数据 文件 转换 输入 数据 文件 fno=00002 name=E:\ORA10G\ORADATA\JSSWEB\UNDOTBS01.DBF 已转 换的 数据 文件 = E:\ORATMP\ORADATA\UNDOTBS01.DBF 通道 ORA_DISK_1: 数据 文件 转换 完毕 , 经过 时间 : 00:00:16 通道 ORA_DISK_1: 启动 数据 文件 转换 输入 数据 文件 fno=00004 name=E:\ORA10G\ORADATA\JSSWEB\JSSWEB.DBF 已转 换的 数据 文件 = E:\ORATMP\ORADATA\JSSWEB.DBF 通道 ORA_DISK_1: 数据 文件 转换 完毕 , 经过 时间 : 00:00:15 通道 ORA_DISK_1: 启动 数据 文件 转换 输入 数据 文件 fno=00003 name=E:\ORA10G\ORADATA\JSSWEB\SYSAUX01.DBF 已转 换的 数据 文件 = E:\ORATMP\ORADATA\SYSAUX01.DBF 通道 ORA_DISK_1: 数据 文件 转换 完毕 , 经过 时间 : 00:00:15 通道 ORA_DISK_1: 启动 数据 文件 转换 输入 数据 文件 fno=00005 name=E:\ORA10G\ORADATA\JSSWEB\USERS01.DBF 已转 换的 数据 文件 = E:\ORATMP\ORADATA\USERS01.DBF 通道 ORA_DISK_1: 数据 文件 转换 完毕 , 经过 时间 : 00:00:03 在目 标平 台上 运行 SQL 脚本 E:\ORATMP\SCRIPT\TS.SQLE:\ORATMP\SCRIPT\TS.SQLE:\ORATMP\SCRIPT\TS.SQL E:\ORATMP\SCRIPT\TS.SQL 以创 建数 据库 编辑init.ora 文件E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA 。此 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 PFILE 将用 于在 目标 平台 上创 建数 据库 据 要重 新编 译所 有 PL/SQL 模块 , 请在 目标 平台 上运 行 utlirp.sql 和utlrp.sql 要更 改内 部数 据库 标识 符 , 请使 用 DBNEWID 实用 程序 完成 backup 于16-11 月-07 屏蔽 输出 中提 供了 二处 脚本 所在 路径 ,记 录下 来。 四 、复制文件到目标平台 复制源库中数据文件到目标平台,从上述屏蔽输出中看到共涉及 E:\ORATMP\ORADATA\目录中 5个数据 文件 (临时 表空 间数 据文 件不 需要 转换 , 可 以 目标 数据 库重 新创 建 ),E:\ORATMP\SCRIPT 目录 中的 TS.SQL 脚本 文件 , 以及 E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA 客户 端初 始化 参数 文件 , 复制 到目 标平 台的 适当 位置 ,此 处我 们将 复制 到 /opt/oratmp 目录 中。 提示 :数 据文 件复 制完 成后 即可 以将 源数 据库 置为 read-write 状态 了。 创建 相关 目录 : [oracle@jsslinux oradata]$ mkdir /opt/ora10g/oradata/jsscon -p [oracle@jsslinux oradata]$ mkdir /opt/ora10g/admin/jsscon -p [oracle@jsslinux oradata]$ cd /opt/ora10g/admin/jsscon [oracle@jsslinux jsscon]$ mkdir adump bdump cdump dpdump pfile udump 五 、修改脚本文件和初始化 参 数文件 再次着重提示, oracle 生成的脚本文件,仅供参考有些参数还需要你自己手工调整,特别是文件复制到目 标平 台后 ,如 果路 径有 变化 ,一 定要 记的 修改 脚本 文件 中对 应的 参数 。 INIT_00J16HQT_1_0.ORA 为客 户端 初始 化参 数文 件, 需 要 注意 其中 db_name, xxx_dest,control_files 等参 数 , 为便 于输 入, 复制 到目 标平 台时 将其 更新为 inittmp.ora。 TS.SQL 为创 建控 制文 件脚 本, 需要 注意 各数 据文 件路 径。 六 、执行脚本,创建数据库 。 你可以 打开 脚本 文件 ,按 照语 句手 工一 步步 执行 ,也 可以 直接 调用 该脚 本文 件。 此处 我们 是第 一次 执行, 稳妥期间还是手工一步一步来吧:))) 首先指定 SID(如果是 windows 系统,就不只是 export 这么简单了,还需要 oradim 重建一个 service,前面 的文 章有 中具 体示 例, 这里 不详 述了 ): [oracle@jsslinux jsscon]$ export ORACLE_SID=jsscon [oracle@jsslinux jsscon]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on 星期 五 11 月16 11:10:07 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. 已连 接到 空闲 例程 。 从客 户端 初始 化参 数文 件启 动到 nomount 模式 SQL> STARTUPSTARTUPSTARTUP STARTUP NOMOUNTNOMOUNTNOMOUNT NOMOUNT PFILE='/opt/oratmp/scripts/INIT_00J14FQ2_1_0.ORA'PFILE='/opt/oratmp/scripts/INIT_00J14FQ2_1_0.ORA'PFILE='/opt/oratmp/scripts/INIT_00J14FQ2_1_0.ORA' PFILE='/opt/oratmp/scripts/INIT_00J14FQ2_1_0.ORA' ORACLE 例程 已经 启动 。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 Total System Global Area 109051904 bytes Fixed Size 1217980 bytes Variable Size 92277316 bytes Database Buffers 12582912 bytes Redo Buffers 2973696 bytes 创建 控制 文件 SQL> CREATECONTROLFILEREUSESETDATABASE"JSSCON"RESETLOGSNOARCHIVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 292 7 LOGFILE 8 GROUP 1 '/opt/ora10g/oradata/jsscon/redo01.log' SIZE 20M, 9 GROUP 2 '/opt/ora10g/oradata/jsscon/redo02.log' SIZE 20M, 10 GROUP 3 '/opt/ora10g/oradata/jsscon/redo03.log' SIZE 20M 11 DATAFILE 12 '/opt/oratmp/oradata/SYSTEM01.DBF', 13 '/opt/oratmp/oradata/UNDOTBS01.DBF', 14 '/opt/oratmp/oradata/SYSAUX01.DBF', 15 '/opt/oratmp/oradata/JSSWEB.DBF', 16 '/opt/oratmp/oradata/USERS01.DBF' 17 CHARACTERSET ZHS16GBK 18 ; 控制 文件 已创 建。 以resetlogs 模式 打开 数据 库 SQL> ALTERALTERALTER ALTER DATABASEDATABASEDATABASE DATABASE OPENOPENOPEN OPEN RESETLOGS;RESETLOGS;RESETLOGS; RESETLOGS; 数据 库已 更改 。 创建 临时 表空 间 SQL> ALTERALTERALTER ALTER TABLESPACETABLESPACETABLESPACE TABLESPACE TEMPTEMPTEMP TEMP ADDADDADD ADD TEMPFILETEMPFILETEMPFILE TEMPFILE '/opt/ora10g/oradata/jsscon/TEMP01.DBF''/opt/ora10g/oradata/jsscon/TEMP01.DBF''/opt/ora10g/oradata/jsscon/TEMP01.DBF' '/opt/ora10g/oradata/jsscon/TEMP01.DBF' 222 2 SIZESIZESIZE SIZE 200M;200M;200M; 200M; 表空 间已 更改 。 注意 :下 面的 操作 就很 关键 了。 SQL> setsetset set echoechoecho echo offoffoff off SQL> SHUTDOWNSHUTDOWNSHUTDOWN SHUTDOWN IMMEDIATEIMMEDIATEIMMEDIATE IMMEDIATE [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 数据 库已 经关 闭。 已经 卸载 数据 库。 ORACLE 例程 已经 关闭 。 启动 到升 级模 式 SQL> STARTUPSTARTUPSTARTUP STARTUP UPGRADEUPGRADEUPGRADE UPGRADE PFILE='/opt/oratmp/scripts/inittmp.ora'PFILE='/opt/oratmp/scripts/inittmp.ora'PFILE='/opt/oratmp/scripts/inittmp.ora' PFILE='/opt/oratmp/scripts/inittmp.ora' ORACLE 例程 已经 启动 。 Total System Global Area 109051904 bytes Fixed Size 1217980 bytes Variable Size 92277316 bytes Database Buffers 12582912 bytes Redo Buffers 2973696 bytes 数据 库装 载完 毕。 数据 库已 经打 开。 重新 编译 数据 库对 象。 SQL> @@@@@@ @@ ?/rdbms/admin/utlirp.sql?/rdbms/admin/utlirp.sql?/rdbms/admin/utlirp.sql ?/rdbms/admin/utlirp.sql .... .... DOC>####################################################################### DOC>####################################################################### DOC> utlirp.sql completed successfully. All PL/SQL objects in the DOC> database have been invalidated. DOC> DOC> Shut down and restart the database in normal mode and run utlrp.sql to DOC> recompile invalid objects. DOC>####################################################################### DOC>####################################################################### 如果 这步 执行 出错 ,根 据错 误信 息调 试, 解决 之后 重新 执行 。还 好我 这步 正常 执行 了。 SQL> SHUTDOWNSHUTDOWNSHUTDOWN SHUTDOWN IMMEDIATEIMMEDIATEIMMEDIATE IMMEDIATE SQL> STARTUPSTARTUPSTARTUP STARTUP PFILE='/opt/oratmp/scripts/inittmp.ora'PFILE='/opt/oratmp/scripts/inittmp.ora'PFILE='/opt/oratmp/scripts/inittmp.ora' PFILE='/opt/oratmp/scripts/inittmp.ora' SQL> -- The following step will recompile all PL/SQL modules. SQL> -- It may take serveral hours to complete. 下面 执行 重要 的一 步, 重新 编译 无效 对象 ,敲 完回 车你 就该 干嘛 干嘛 去吧 , SQL> @@@@@@ @@ ?/rdbms/admin/utlrp.sql?/rdbms/admin/utlrp.sql?/rdbms/admin/utlrp.sql ?/rdbms/admin/utlrp.sql ... ... SQL> DECLARE 2 threads pls_integer := &&1; 3 BEGIN [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 4 utl_recomp.recomp_parallel(threads); 5 END; 6 / --执行到这步的时候需要耐心等待,人家已经提示你了, It may take serveral hours to complete。这期间不要 以为 死在 这儿 而乱 敲键 盘特 别是 回车 之类 命令 键, 极易 导致 执行 出错 。一 直等 到它 提示 提示 END utlrp.sql。 Ok,传输 成功 ,测 试一 下, 看看 数据 是否 正常 。 SQL> conn jss/jss 已连 接。 SQL> select table_name from user_tables; TABLE_NAME ------------------------------ A B TMP5 BAK_PROJECT EMP HC_ORG HC_PROJECT_ORG HC_ORD_PROJECT HC_PRODUCT HC_ORD_PRODUCT HC_ORD_PRODUCT_PACKAGE HC_ORD_PRODUCT_PACKAGE_ITEM HC_PROJECT_PRODUCT_CLASS HC_PROJECT_PROD_CLASS_CONTENT DEPT 已选择 15 行。 哈哈 ,结 果正 确, 结束 了? 都完 了? 虽然 并非 想学 好来 屋拍 续集 ,但 是大 家一 定要 能够 意识 到, 事情 还远 远没 有结 束。 即 使是 做为 一名 准合格 DBA, 也 要 有细 致, 耐 心, 认 真, 负 责, 严 谨, 规 范 ...(以下 省略 褒义 形 容 词1000 个)的个 性。 1。我 们前 面都 是以 客户 端初 始化 参数 文件 启动 ,尚 未创 建服 务器 端初 始化 参数 文件 。 SQL> create spfile from pfile='/opt/oratmp/scripts/inittmp.ora'; 通过 执行 以上 语句 创建 spfile。 2。还 记的 dbms_tdb.check_external 函数 提供 的单 子嘛 ,黑 黑。 对着 单子 一个 个改 吧。 SQL> CREATEORREPLACEDIRECTORY DATA_PUMP_DIR AS'/opt/ora10g/admin/jsscon/dpdump'; 3。RMANCONVERT DATABASE 命令 并不 会传 输用 户口 令文 件, 手工 执行 创建 。 SQL> host orapwd file=/opt/ora10g/product/10.2.0/db_1/dbs/orapwjsscon password=verysafe force=y [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 4。配 置监 听以及 tnsnames。 好了 ,剩 下的 工作 就不 举例 了, 打扫 战场 吧, 比如 删除 临时 目录 中的 脚本 文件 等等 。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 第六篇通过RMAN RMAN RMAN RMAN 备份创建可传输表空间集介绍2007.11.72007.11.72007.11.7 2007.11.7 前面 各章 从理 论到 实践 详细 论述 了关 于可 传输 表空 间, 还 有 个集 (Transportable Tablespace Sets)的创建,其中 都提 到了 很重 要一 点, 就是 被传 输的 表空 间在 传输 过程 中必 须置为 read-only。而在 实际 操作 过程 中, 对于 某些 生产数据库,将表空间置为read-only 是件非常复杂的事情甚至完全不允许,有了RMAN 的Transportable Tablespace,这一切都得以避免。 RMAN 通过备份创建可传输表空间集,它并不需要存取活动的数据文件,相 应也 就不 需要 将表 空间 置为 read-only。因 此, 数据 库可 用性 得到 提升 ,尤 其对 于超 大的 表空 间, 因为 被传 输的 表空 间在 此期 间仍 可进 行读 写操 作, 而且 把表 空间 置为 read-only 模式 可能 会花 费较 长时 间, 使用 RMAN 创建可传输表空间集,允许你在传输过程中指定目标恢复时间点或 SCN,这样传输的数据可 以更 灵活 ,不 必完 全复 制现 有表 空间 ,只 要备 份中 存在 ,你 就 可以选择 性的 恢复 数据 。例 如, 你的 备份 策略 为 保留 一周 ,你 希望 创建 的可 传输 表空 间中 数据 是 截止 本月 底最 后一 天的 数据 ,那 么你 在下 个月 第一 周内 任何 时 候都 可以 进行 传输 操作 而不 需要 考虑 这期 间生 产库 是否 会有 写入 操作 。 使用 rman 备份 创建 Transportable Tablespace Sets 主要 是通过 RMAN 中的 TRANSPORT TABLESPACE 命令 完成 的 。 提示:即使并未使用rman 备份数据库,TRANSPORT TABLESPACE 命令也可以用来创建transportable tablespace sets。不 过,你必须有要传输的表空间集数据文件拷贝,然后使用rman 的catalog 命令 将 数 据 文 件、 归档日志等文件的拷贝载入rman 资料库。只有rman 拥有了所需备份才能够正常执行TRANSPORT TABLESPACE。 一、适 用场合 基本 上, 任 何需 要传 输表 空间 的情 况, 你 都 可以 使用 rman 的TRANSPORT TABLESPACE 命令 去创 建, 只要 拥有 所需 的备 份。 二、相 关概念 RMAN 可传 输表 空间 的结 构如 下图 : [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 RMAN 创建 可传 输表 空间 集与 RMAN Tablespace Point-in-Time Recovery (TSPITR)极其 相似 , 如 果 你 有 过TSPITR 的操 作经 验, 那么 操作 这个 同样 不在 话下 。 单枪 不能 成事 , Oracle 的霸 业就 是靠 无数 相互 关联 的对 象以 不同 方式 巧妙 组合 而成 。 对 于创建 TTS 而 言, RMAN 仍然 不是 一个 人在 战斗 ,他 不是 一个 人:  RMAN 客户 端 (Recovery Manager client)  源库 (source database),即 要传 输的 表空 间所 在库 。  源库 归档 及备 份 (Archived redo logs and backups)  辅助 实例 (auxiliary instance), 这 个 大家 应该 都比 较熟 了, 如 果 你还 不了 解可 以参 见 "Duplicate 创建 副本 数据 库 "系列第 2章。  辅助集(auxiliary set),包括数据文件等其它传送所需但又并不是恢复集一部分的文件。例如 SYSTEM 表空间,Undo 表空 间之 类。 而辅 助实 例 通常 也不 是一 个人 , 它也 有一 些关 联文 件, 例如 控制 文 件、 初始 化参 数文 件、 在线 日志 等, 这些 文件 并不 属于 辅助 集 ,虽 然是 起辅 助目 的, 但它 们的 老主 顾显 然是 辅 助实 例。  辅助 文 件 暂 存 地 (auxiliary destination)即辅 助集所包含的对象在rman transport tablespace 命令 执行 过程 中物 理存 放的 位置 ,执 行完 之后 这些 文件 会被 删除 。 提示 : auxiliary destination 并非 必须 指定 , 如 果 不指 定的 话, 必 须 确保 协助 实例 相关 的各 文件 在 初 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 始化 参数 中均 已指 定具 体存 储位 置。  表空 间目 的地 (tablespace destination),tablespace transport 命令 执行 期间 生成 的传 输集 数据 文件 及 其 它输 出文 件的 存储 路径 。  可传 输集 (transportable set), 由 待 传输 表空 间数 据文 件以及 expdp 生成 的导 出文 件 (export dump file) 组成 的, 用于 填充 到目标 数据 库表 空间 的集 合 ,默 认情 况下 ,这 些集 合中 的文 件保 存在 表空 间目 的地 指定 路径 下 。  RMAN 自动 生成 的导 入脚 本 (import script)以及 expdp 生成 的导 出日 志 (export log), 可 传输 集的 一 部分 。 上述 提到 的术 语在 后面 会反 复涉 及, 所以 大家 最好 能记 住其 概念 。 三、命 令格式 ::: : 关于TransportTransportTransport Transport Tablespaces Tablespaces Tablespaces Tablespaces 命令 通过 rman 备份 创建 可传 输表 空间 集避 免通 过源 库当 前活 动的 数据 文件 。 同 样 恢复 时可 以恢 复到 备份 中 包含 的任 意时 间而 不会 被限 定仅 能恢 复到 当前 时间 。 其 创 建的 工作 就是 由一 个名为 Transport Tablespaces 的 RMAN 命令 来实 现, 其格 式如 下: Transport Tablespace 命令的参数不少,不过幸运的是并不复杂,并且其参数与前面介绍的关联实体名 称相 同, 由此 仅通 常参 数名 我们 也大 致能 猜出 所代 表的 意义 ,下 面通 常几 个应 用的 示例 加深 一下 印象 : 1、最 简单 的可 传输 表空 间集 的创 建: transport tablespace tbs_1, tbs_2 tablespace destination '/disk1/transportdest' auxiliary destination '/disk1/auxdest'; 本例 中, 待传 输表 空间为 tbs_1 和tbs_2 两个 (如果 待传 输的 表空 间有 多个 ,中 间以 逗号 分隔 ),生 成的 可传输文件将会被存储至tablespace destination 参数 指定的位置,其它辅助文件生成到auxiliary destination 参数 指定 的位 置。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 2、创 建时 指定 恢复 时间 点 TRANSPORTTABLESPACE tbs_3 TABLESPACEDESTINATION'/disk1/transportdest' AUXILIARYDESTINATION'/disk1/auxdest' UNTILSCN 11379; 本例 中, 通过 指定 SCN 的方 式控 制恢 复的 内容 。 又如 下例 中通 过指 定时 间控 制恢 复的 内容 : TRANSPORTTABLESPACE tbs_2 TABLESPACEDESTINATION'/disk1/transportdest' AUXILIARYDESTINATION'/disk1/auxdest' UNTILRESTOREPOINT'before_upgrade'; 指定 恢复 点方 式控 制恢 复的 内容 : TRANSPORTTABLESPACE tbs_2 TABLESPACEDESTINATION'/disk1/transportdest' AUXILIARYDESTINATION'/disk1/auxdest' UNTILTIME'SYSDATE-1'; 提示 :需 要注 意指 定的 恢复 时间 点必 须存 在于 备份的 redo log 或归 档文 件中 。 3、创 建时 指定 文件 的生 成路 径: TRANSPORTTABLESPACE tbs_2 TABLESPACEDESTINATION'/disk1/transportdest' AUXILIARYDESTINATION'/disk1/auxdest' DATAPUMPDIRECTORY ttsdir DUMPFILE'dmpfile.dmp' IMPORTSCRIPT'impscript.sql' EXPORTLOG'explog.log'; 只要 你想 ,就 可以 。默 认情 况下 : DATAPUMP DIRECTORY 参数 指定 已定 义的 DIRECTORY:ttsdir DUMP FILE 参数 指定 元数 据文 件, 命名 为: dmpfile.dmp IMPORT SCRIPT 参数 指定 导入 脚本 ,命 名为 : impscript.sql EXPORT LOG 参数 指定 导出 日志 文件 ,命 名为 : explog.log dmpfile.dmp 及explog.log 文件会自动存储到ttsdir 指向的物理路径,其它文件均被生成到 /disk1/transportdest 目录 内。 四、创 建流程 小学 时候 的语 文课 ,打 三年 级开 始, 老师 就会 教我 们给 课文 分段 ,三 思不 才, 每次 分段 不管 文章 有多 长都是 三分 法 (俺还 真是 跟三 有猿 奋啊 ),开 头一 段, 结尾 一段 ,其 它的 都算 中间 段。 RMAN 创建 TTS 的步 骤嘛 ,也 分三 步吧 : 1、启动 辅助 实例 首先 启动 辅助 实例到 nomount 模式 ,当 然启 动之 前你 得先 创建 好初 始化 参数 文件 。然 后从 备份 中 恢复 控制 文件 到初 始化 参数 文件 中指 定的 控制 文件 所在 路径 , 直 接拷 过来 也靠 谱 (前提 是源 库和 目标 库 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 的操 作系 统一 致 ),加 载辅 助实 例到 mount 模式 。 2、恢复 辅助 实例 一旦辅助实例中控制文件被正确加载, RMAN 从备份中恢复辅助集和可传输集相关的数据文件, 存储 辅助 文件 到指 定的 辅助 文件 暂存 地, 可 传 输集 文件 存储 到表 空间 目的 地。 然后 RMAN 在辅 助实 例 执行 switch 操作 加载 数据 文件 。 然后 TRANSPORT DATABASE 命令按指定的时间点对辅助实例进行恢复 (如未指定目标时间,则 执行 完全 恢复 ), 所 有辅 助文 件暂 存地 中的 可用 归档 日志 都将 被用 于恢 复操 作, 并 会 在应 用后 自动 删 除 这些 文件 。 一旦 恢复 完成 , RMAN 将以 resetlogs 方式 加载 辅助 数据 库。 3、将辅 助实 例看 做源 库应 用传 输表 空间 。 将辅助实例中待恢复的表空间置为 read-only 模式, 并调用 expdp 生成表空间原数据的导出文件。 导出 文件 一般 都保 存在 表空 间目 的地 (当然 , 你也 可以 指定 dp 文件 的保 存 路径 ,后 面会 有介 绍 )。 此时,RMAN 自动生成导入脚本。脚本自动被保存在表空间目的地指定路径下,并命名为 impscript.sql。 所有 的操 作都 成功 执行 之后 , RMAN 将shutdown 辅助 实例 并删除 TRANSPORT TABLESPACE 命 令执 行过 程中 创建 的除 数据 文件 、dmp 文件 , expdp 日志和 impscript.sql 外其它 临时 文件 。 提示 :  TRANSPORT TABLESPACE 命令执 行过 程中 ,恢 复集 文件 并不 会自 动转 换到 目标 数据 库的 endian 格式。如果需要转换,你必须在创建可传输集前使用 rman 的convert 命令转换数据文件到目标 数据 库的 endian 格式 。  如果 impdp 导入脚 本不 在 TRANSPORT TABLESPACE 命令默 认生 成路 径下 ,要 注意 更新脚 本位 置。 是不是 觉着 步骤 超级 多, 使用 超复 杂, 甚至一 度对 其实 用性 有了 怀疑 , 实际操 作完 全没 有这 么复 制。 特别是 10g 之后 ,只 需要 执行 一个 transport tablespace 命令 ,并 通过 auxiliary destination 参数 指定 临时 辅助 文件 的存 放位 置, RMAN 会自 动创 建和 销毁 auxiliary database,非 常方 便。 五、注 意事项 如果 你决 定使用 RMAN 备份 创建 可传 输表 空间 地话 , 除 了 记住 前面 我们 提到 过的 关于 可传 输表 空间 特 性应 用的 限制 之外 呢, 你 又 得将 自己 的脑 袋置为 read-write 状态 了, 这 个 明显 是黑 正常 的嘛 , 应 用 的技 术 越 多, 可 能 碰到 的问 题也 会越 多, 相 应 需要 注意 的地 方也 越多 , 花 费 的精 力也 越大 , 哎 , 无 数 干技 术活 的 (非 特指 IT)脑袋 就是 这么 秃地 呀 ~~~~~  必须拥 有执 行 TRANSPORT TABLESPACE 操作所 需的 所有 相关 的表 空间 的备 份以 及归 档日 志文 件。 提示 :即使 RMAN 不是 你备 份策 略的 一部 分, 你也 仍可 能使用 TRANSPORT TABLESPACE 命令 ,只 要所 需的 数据 文件 和归 档日 志均 可被 rman 有效 访问 。  因为 rman 创建 transportable tablespaces 需与 expdp 和impdp 配合 使用 , 因 此 不能 传输含 XMLTypes 的表 空间 。  由于 rman 会在 相同 节点 上创 建自 动辅 助实 例做 为源 实例 用于 修复 、 恢 复操 作, 这在 TRANSPORT [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 TABLESPACE 命令 执行 期间 会造 成一 定的 性能 开销  如果 你删 除或 重命 名了 一个 表空 间, 那 就 不能 在之 后又 使用 TRANSPORT TABLESPACE 试图 传 输 包含 了该 表空 间的 可传 输表 空间 集。  对于 有关 联约 束关 系的 表必 须同 时传 输。  transportable set(可传 输集 )和auxiliary set(辅助 集 )数据 文件 都不 能包 含下 列的 类型 :  复制 主表  分区 表  含VARRAY 类型 列的 表, 嵌套 表或 扩展 文件  快照 记录 或快 照表  含undo 或rollback segments 的表 空间 ,或含 SYS 对象 的表 空间 。 如果 你在 nocatalog 模式 下执行 TRANSPORT TABLESPACE 命令 ,还 会有 下列 的限 制:  如果 过去 创建 一个 传输 集做 为一 个时 间点 , 那 么在 TRANSPORT TABLESPACE 执行 时, 源 库表 空 间回 滚段 必须 与传 输集 中表 空间 回滚 段时 间点 相同 。 包括 回滚段的表空间做为目标SCN 在TRASNPORT TABLESPACE 操作 中 必 须 是 auxiliary set 的一部 分。 不像在 catalog 模式 , rman 资料 库在 控制 文件 中只 包含 那些 包括 回滚 段的 表空 间。  如果 数据 库重 用了 控制 文件中 TRANSPORT TABLESPACE 命令 所需 的备 份信 息, 则命 令会 失败 , 因为 RMAN 不能 定位 需要 的备 份文 件位 置。 你 得 通过 catalog 命令 将这 些备 份文 件加入 rman 资料 库中 。 如 果数 据库 已经 重写 了控 制文 件, 那么 很不 幸你 可能 就会 丢失 这部 分备 份了 。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 第七篇实战RMAN RMAN RMAN RMAN 备份传输表空间2007.11.172007.11.172007.11.17 2007.11.17 一、 检查 平台 是否 支持 跳过 (如有 不明 请详 见第 三节 示例 ) 二、 检查 待传 输表 空间 是否 自包 含 跳过 (如有 不明 请详 见第 三节 示例 ) 三、 检查 备份 跳过 (如有 不明 请详 见 "一步 一步学 RMAN"系列 ) 四、 生成 可传 输集 E:\oracleScript\backup>set oracle_sid=jssweb E:\oracleScript\backup>rman target / 连接 到目 标数 据库 :JSSWEB(DBID=3402005373) RMAN>RMAN>RMAN> RMAN> transporttransporttransport transport tablespacetablespacetablespace tablespace jsswebjsswebjssweb jssweb 2>2>2> 2> tablespacetablespacetablespace tablespace destinationdestinationdestination destination 'd:\backup\td''d:\backup\td''d:\backup\td' 'd:\backup\td' 3>3>3> 3> auxiliaryauxiliaryauxiliary auxiliary destinationdestinationdestination destination 'd:\backup\ad''d:\backup\ad''d:\backup\ad' 'd:\backup\ad' 4>4>4> 4> ;;; ; 看, 不需 要太 复杂 ,就 是这 么简 单。 使用 目标 数据 库控 制文 件替 代恢 复目 录 RMAN-05026: 警告 : 假定 以下 表空 间集 适用 于指 定的 时间 点 表空 间列 表要 求具 有 UNDO 段 表空 间 SYSTEM 表空 间 UNDOTBS1 使用 SID='gEDa' 创建 自动 实例 供 自动实例使用的初始化参 数 ::: : db_name=JSSWEB compatible=10.2.0.1.0 db_block_size=8192 db_files=200 db_unique_name=tspitr_JSSWEB_gEDa large_pool_size=1M shared_pool_size=110M #No auxiliary parameter file used db_create_file_dest=d:\backup\ad control_files=d:\backup\ad/cntrl_tspitr_JSSWEB_gEDa.f [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 启动 自动 实例 JSSWEB ... ... 内 存脚本的内容 ::: : { # set the until clause set until scn 1672677; # restore the controlfile restore clone controlfile; # mount the controlfile sql clone 'alter database mount clone database'; # archive current online log for tspitr to a resent until time sql 'alter system archive log current'; # avoid unnecessary autobackups for structural changes during TSPITR sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;'; } 正在 执行 内存 脚本 正在 执行 命令 :SET until clause .. ... sql 语句 : begin dbms_backup_restore.AutoBackupFlag(FALSE); end; 释放 的通 道 : ORA_AUX_DISK_1 内 存脚本的内容 ::: : { # generated tablespace point-in-time recovery script # set the until clause set until scn 1672677; # set an omf destination filename for restore set newname for clone datafile 1 to new; ... ... # make the controlfile point at the restored datafiles, then recover them recover clone database tablespace "JSSWEB","SYSTEM","UNDOTBS1", "SYSAUX" delete archivelog; alter clone database open resetlogs; #PLUGHERE the creation of a temporary tablespace if export fails due to lack # of temporary space. # For example in Unix these two lines would do that: #sql clone "create tablespace aux_tspitr_tmp # datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K"; } [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 正在 执行 内存 脚本 正在 执行 命令 :SET until clause 正在 执行 命令 :SETNEWNAME ... ... 介质 恢复 完成 , 用时 : 00:00:10 完成 recover 于19-11 月-07 数据 库已 打开 内 存脚本的内容 ::: : { #mark read only the tablespace that will be exported sql clone "alter tablespace JSSWEB read only"; # create directory for datapump export sql clone "create or replace directory STREAMS_DIROBJ_DPDIR as '' d:\backup\td''"; # export the tablespaces in the recovery set host 'expdp userid=\"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0=oraclegEDa)(ARGS=^ '(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE_SID=gEDa^'))(CON NECT_DATA=(SID=g EDa))) as sysdba\" transport_tablespaces= JSSWEB dumpfile= dmpfile.dmp directory= STREAMS_DIROBJ_DPDIR logfile= explog.log'; } 正在 执行 内存 脚本 sql 语句 : alter tablespace JSSWEB read only ... ... 主机 命令 完成 /* The following command may be used to import the tablespaces. Substitute values for and . impdp directory= dumpfile= 'dmpfile.dmp' transport_datafiles= d:\backup\td\JSS WEB.DBF */ -------------------------------------------------------------- -- Start of sample PL/SQL script for importing the tablespaces [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 -------------------------------------------------------------- -- creating directory objects CREATEDIRECTORY STREAMS$DIROBJ$1 AS'd:\backup\td\'; ... ... DROPDIRECTORY STREAMS$DIROBJ$DPDIR; 删除 自动 实例 关闭 自动 实例 Oracle 实例 已关 闭 自动 实例 已删 除 已删 除辅 助实 例文 件 D:\backup\ad\CNTRL_TSPITR_JSSWEB_GEDA.F 已删 除辅 助实 例文 件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_SYSAUX_3N2GF31G_.DBF 已删 除辅 助实 例文 件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_SYSTEM_3N2GF2YR_.DBF 已删 除辅 助实 例文 件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_TEMP_3N2GH1H4_.TMP 已删 除辅 助实 例文 件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_UNDOTBS1_3N2GF30H_.DBF 已删 除辅 助实 例文 件 D:\backup\ad\TSPITR_J\ONLINELOG\O1_MF_1_3N2GGXJM_.LOG 已删 除辅 助实 例文 件 D:\backup\ad\TSPITR_J\ONLINELOG\O1_MF_2_3N2GGY0Z_.LOG 已删 除辅 助实 例文 件 D:\backup\ad\TSPITR_J\ONLINELOG\O1_MF_3_3N2GGYNZ_.LOG 执行 成功 ,文 件被 生成在 tablespace destination 参数 指定 路径 下。 五、 复制 文件 到目 标平 台 方式 方法 太多 ,没 啥技 术含 量, 跳过 。 六、 执行 导入 脚本 注意 ,导 入表 空间 在源 平台 所属 的用 户必 须存 在, 另外 一旦 复制 到目 标库 后文 件路 径如 果发 生变 化, 一定 要修改 impscript.sql 文件 中相 应的 路径 。 [oracle@jsslinux ~]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on 星期 二 11 月20 10:45:53 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接 到 : Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options SQL> @/opt/oratmp/oradata/impscript.sql@/opt/oratmp/oradata/impscript.sql@/opt/oratmp/oradata/impscript.sql @/opt/oratmp/oradata/impscript.sql 目录 已创 建。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 目录 已创 建。 PL/SQL 过程 已成 功完 成。 目录 已删 除。 目录 已删 除。 SQL> 自古 华山 一条 路, 但这 不是 华山 ,这 是导 入元 数据 ,除 了用 脚本 导入 之外 ,你 还可 以直 接通过 impdp 命令 导入 (实际 dbms_streams_tablespace_adm.attach_tablespaces 函数 就是 调用的 impdp),例 如: [oracle@jsslinux dpdump]$ impdpimpdpimpdp impdp system/verysafesystem/verysafesystem/verysafe system/verysafe DUMPFILE=dmpfile.dmpDUMPFILE=dmpfile.dmpDUMPFILE=dmpfile.dmp DUMPFILE=dmpfile.dmp DIRECTORY=DATA_PUMP_DIRDIRECTORY=DATA_PUMP_DIRDIRECTORY=DATA_PUMP_DIR DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBTRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBTRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DB TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DB FFF F Import: Release 10.2.0.1.0 - Production on 星期 一 , 19 11 月, 2007 19:13:21 Copyright (c) 2003, 2005, Oracle. All rights reserved. 连接 到 : Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options 已成 功加 载 /卸载 了主 表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 启动"SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** DUMPFILE=dmpfile.dmp DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBF REMAP_SCHEMA=(jss:jss) 处理 对象 类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK 处理 对象 类型 TRANSPORTABLE_EXPORT/TABLE 处理 对象 类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS 处理 对象 类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK 作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 19:13:26 成功 完成 [oracle@jsslinux dpdump]$ sqlplus jss/jss SQL> select * from tab; TNAMETABTYPECLUSTERID ----------------------------------------------- EMPTABLE DEPTTABLE [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 已选择 2行。 其实如 果你 注意 看屏 蔽输 出的 话, 你会 在 impscript.sql 脚本处 发现 人家 其它 也提 示你 可以 直接 使用 impdp 命令 导入 ,这 也是 俺之 前无 数次 提醒 你重 视输 出日 志的 原因 。 另外通过 impdp 导入还有一个好处,可以通过 REMAP_SCHEMA 参数指定表空间所属的 schema,而不用 创建 表空 间在 源库 中对 应的 用户 (关于 此处 的更 多说 明也 请详 见第 三节 示例 )。 最后 ,友 情提 醒, 做事 情要 严谨 ,表 忘记 打扫 战场 ,最 起码 要记 的将 导入 表空 间的 状态 更改为 read-write。 [三思笔记 ]-使用可传输表空间的特性复制数据 http://www.5ienet.com/ QQ:5454589 君三思 QQ 群: 59666289 [[[ [ 三 思笔记 ]]] ] 日 期时间及数字 的 格式化参数 大 全 http://www.itpub.net/913307.htmlhttp://www.itpub.net/913307.htmlhttp://www.itpub.net/913307.html http://www.itpub.net/913307.html [[[ [ 三 思笔记 ]RMAN ]RMAN ]RMAN ]RMAN 高 级应用 之 Duplicate Duplicate Duplicate Duplicate 复 制数据库 http://www.itpub.net/906598.htmlhttp://www.itpub.net/906598.htmlhttp://www.itpub.net/906598.html http://www.itpub.net/906598.html [[[ [ 三 思笔记 ]RHEL]RHEL]RHEL ]RHEL AS4 AS4 AS4 AS4 下升级oracle10oracle10oracle10 oracle10 ggg g 到10.2.0.310.2.0.310.2.0.3 10.2.0.3 http://www.itpub.net/896394.htmlhttp://www.itpub.net/896394.htmlhttp://www.itpub.net/896394.html http://www.itpub.net/896394.html [[[ [ 三 思笔记 ]RHEL]RHEL]RHEL ]RHEL AS4 AS4 AS4 AS4 下安装32 32 32 32 位oracle10goracle10goracle10g oracle10g http://www.itpub.net/884137.htmlhttp://www.itpub.net/884137.htmlhttp://www.itpub.net/884137.html http://www.itpub.net/884137.html [[[ [ 三 思笔记 ]Statspack ]Statspack ]Statspack ]Statspack 初 步学和用 http://www.itpub.net/857807.htmlhttp://www.itpub.net/857807.htmlhttp://www.itpub.net/857807.html http://www.itpub.net/857807.html [[[ [ 三 思笔记 ]oracle ]oracle ]oracle ]oracle 著 名及非著名函数介绍 http://www.itpub.net/843333.htmlhttp://www.itpub.net/843333.htmlhttp://www.itpub.net/843333.html http://www.itpub.net/843333.html [[[ [ 三 思笔记 ]]] ] 一 步一步 学 rmanrmanrman rman http://www.itpub.net/810100.htmlhttp://www.itpub.net/810100.htmlhttp://www.itpub.net/810100.html http://www.itpub.net/810100.html [[[ [ 三 思笔记 ]]] ] 学 习动态性能表 http://www.itpub.net/782892.htmlhttp://www.itpub.net/782892.htmlhttp://www.itpub.net/782892.html http://www.itpub.net/782892.html
还剩37页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

suphy23

贡献于2012-07-06

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf