您的位置:首页 > 数据库

在线过期数据迁移到离线数据库

2013-10-14 22:27 363 查看
1、在线过期数据迁移到离线数据库

1)创建数据文件存放的路径,让oracle自动在该路径下创建文件,并使用oracle自己的方式为数据文件命名。

alter system set db_create_file_dest='/u01/app/oracle/hxy/hxy/datafile/';

2)为每个表分区创建一个独立的表空间

create tablespace ts_sales_2013_01 datafile size 50M autoextend on;

3)创建表

create table sale_data(sale_id number(5),

salesman_name varchar2(30),

sales_amount number(10),

sales_date date )

partition sales_2013_1 values less than (to_date('2013-01-01','yyyy-mm-dd'))

tablespace ts_sale_2013_01,

partition sales_2013_2 values less than (to_date('2013-02-01','yyyy-mm-dd'))

tablespace ts_sale_2013_02);

4)为每个分区索引创建一个索引表空间

create index indsale_date on sale_data(sales_date)

local(

partition sales_2013_01 tablespace ts_sales_2013_1,

partition sales_2013_02 tablespace ts_sales_2013_2)

select partition_name,tablespace_name from user_segments

where segment_name in('SALE_DATA','IND_SALE_DATA');

检查表空间是否符合以表空间传递的方式导出

exec dbms_tts.transport_set_check('TS_SALES_2013-1','TURE');

select * from transport_set_violations;

解决方法:

创建一个临时表

在临时表上创建索引

将需要导出的分区数据和分区索引与临时表进行分区交换

将临时表和索引所在的表空间导出

1、创建临时表,并在表上创建索引

create table tmp_sale_data_2013_1 as select * from sale_data where 1=2;

create index ind_tmp_sale_data_2013_1 on tmp_sale_data_2013_1(sales_date);

select tablespace_name,segment_name,segment_type from user_segments where

segment_name like '%SALE_DATA_2013_1%';

2、进行分区交换

alter table sale_data exchange partition sales_2013_1

with table tmp_sale_data_2013_1 including indexes with validation;

3、在进行表空间传递导出前需要将要操作的表空间设置为只读

alter tablespace ts_sales_2013_1 read only;

4、导出

expdp system/oracle directory=exp_trans_ts dumpfile=tts.dmp

transport_tablespaces=ts_sales_2013_1 transport_full_check=y logfile=tts.log

set autotrace trace exp stat;

set linesize 150;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐