2011年7月7日木曜日
[数据加载] 表空间传输
1. 用户管理的表空间传输
1-1. 注意事项
源库和目标库的字符集, 多国语言字符集要一致
导入时必须是 dba 权限用户
被复制的表空间必须为 readonly, 若不能 readonly 则可以 rman 操作
rman, imp/exp, impdp/expdp 都支持, 但 expdp 不支持某些类型对象(如 xmltypes 只能用 imp/exp, 并确认 constraints, triggers 为 y)
并不支持所有平台, 通过 v$transportable_platform 查看支持与否
先判断源和目标端字节顺序 enbian_format 是否相同, 若不同需在导出时或导入时做转换(建议在目标端转换), 如果 endian_format 不同, 必须进行转换为目标格式, 如果 endian_format 相同, 即使不同平台, 也可以跳过转换 (前提是各平台数据库版本相同, 且不低于 10g)
传输表空间的限制???
expdp/impdp 需要向数据库中写数据 (创建外部表等)
1-2. 优点
支持非标准 blocksize, 跨平台
1-3. 相关查询
1-3-1. 查询包含 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;
1-3-2. 确认平台是否支持 (源和目标端)
select d.name,i.version,d.platform_name,tp.endian_format from v$transportable_platform tp,v$database d,v$instance i where tp.platform_name = d.platform_name and d.name = i.instance_name;
1-4. 操作步骤
1-4-1. 确认平台是否支持 (源和目标端)
选择自包含表空间集 (必须自包含, dbms_tts.transport_set_check)
exec dbms_tts.transport_set_check('users01,users02',true,true);
符合标准则返回0记录
select * from transport_set_violations;
1-4-2. 生成表空间集 (transportable tablespace sets)
将待传输表空间 readonly, 导出表空间元数据
导出用户要具有 exp_full_database 或 dba 权限, 不要用 sysdba 用户)
expdp system/admin dumpfile=tts.dmp directory=dump_file_dir transport_tablespaces=users01,users02;
1-4-3. 复制 tts 到目标端
注意目标端的 directory 路径
复制结束后, 将表空间恢复为 readwirte 状态
1-4-4. 导入表空间集 imp/impdp
impdp 的 network_link 可以直接创建元数据
检查源和目标端的 blocksize, 若不同则要设置目标端的 db_nk_cache_size 参数
导入元数据
impdp go/go dumpfile=tts.dmp directory=dump_file_dir transport_datafiles=/data/users01.dbf,/data/users02.dbf
导入后根据需要将表空间置为 readwirte
5. 使用 rman 传输
优点
利用 rman 备份来操作, 对生产库无影响
可以指定目标的任意恢复时间点和 SCN
注意
不能传输 sys 用户对象
必须有要传输表空间的备份和归档日志
transport tablespace命令也可以识别用户管理创建的备份,需要刺备份注册到rman中
rman创建传输集时默认是expdp,不能传输含有xmltypes的表空间
被传输的表空间是自包含
传输集辅助集中不能包含分区表等等对象
nocatalog下控制文件大小有限,所有最好采用catalog方式备份
rman创建传输集时自动创建,初始化参数文件可以修改
辅助实例初始化参数可自定义,然后在transport tablespace前set auxiliary instance parameter file来设置
transport tablespace过程中不会自动转换endian format,需在创建传输集前使用rman的convert命令转换
- 命令格式
transport tablespace users01,users02
tablespace destination '/data/td'
auxiliary destination '/data/ad'
until scn 12345
datapump directory ttsdir
dump file 'tts.dmp'
import script 'impscript.sql'
export log 'exp.log';
- 操作步骤
----------------------------------------------------------------------
-- 环境检查
源和目标平台是否支持
表空间是否自包含
是否存在有效备份
-- 生成传输
rman target /
transport tablespace users01,users02 tablespace destination '/data/td' auxiliary destination '/data/ad';
此处如果失败了,解决问题后需要重新登录rman来继续操作
成功后传输集在tablespace destination下,可以删除auxiliary destination
内部默认是expdp来导出,所以导入时可以直接用impdp
-- 复制传输集到目标平台
复制tablespace destination路径下的文件到目标端适当位置
-- 执行导入脚本
修改impscript.sql相应变量设置符合目标端, 复制数据文件到相应目录并修改脚本中对应位置
DBA角色登录目标端,执行导入
set serveroutput on
@/data/impscript.sql
也可以用impdp来导入 --- 也可以用impdp,应用更多的参数(remap_schema等)
impdp sys/admin dumpfile=tts.dmp directory=dump_file_dir transport_tablespace=/data/tts.dbf remap_schema=(go:scott)
-- 验证数据并将导入表空间置为read write
- 跨平台传输 --- rman convert
也可用于asm文件系统中的文件存取
-- convert tablespace --- 必须在源端执行
convert tablespace users01,users02 to platform 'Linux 64-bit for AMD' db_file_name_convert '/data/olddata','/data/newdata' parallelism 3; --- 并行度
不要超过转换文件的数目,和cpu数也有关系 --- 可以指定format(优先于db_file_name_convert)
-- convert datafile
convert datafile '/data/users01.dbf','/data/users02.dbf' to platform='Linux 64-bit for AMD' from platform='XXX' db_file_name_convert
'/data/olddata','/data/newdata' parallelism 3;
ORA-01405: fetched column value is NULL
需要备份归档日志后, 再执行
RMAN-06024: no backup or copy of the control file found to restore
需要备份最新的控制文件, 再执行
backup database include current controlfile plus archivelog
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿