1.检查生产数据库和归档数据库子分区结构是否一致,用PL/SQL执行下面SQL,会生成BUSTB_TESTRESULT表2012年12月分区下归档库没有的子分区,生成添加子分区的SQL:(查询结果一定要选择全部,点击PL/SQL 查询结果的翻页按钮,使其变成灰色,再拷贝查询结果)
SELECT 'ALTER TABLE BUSTB_TESTRESULT MODIFY PARTITION '||t.PARTITION_NAME||' ADD SUBPARTITION ' ||T.SUBPARTITION_NAME|| ' VALUES (' ||substrb(T.SUBPARTITION_NAME,lengthb(t.PARTITION_NAME)+2) || ');'FROM USER_TAB_SUBPARTITIONS T
WHERE T.TABLE_NAME= 'BUSTB_TESTRESULT'
AND T.PARTITION_NAME LIKE 'RESULT_PART_201212%'
AND NOT EXISTS
(SELECT 1
FROM USER_TAB_SUBPARTITIONS@ARCH_NEW AR
WHERE AR.TABLE_NAME = 'BUSTB_TESTRESULT'
AND AR.PARTITION_NAME =T.PARTITION_NAME
AND AR.SUBPARTITION_NAME =T.SUBPARTITION_NAME);
2.把查询结果考出来,在归档库中执行。注意下:在执行脚本之前,我的归档库,已经为2012年每个月份创建了默认分区和默认子分区
RESULT_PART_201201,RESULT_PART_201201_0
RESULT_PART_201202,RESULT_PART_201202_0
...
RESULT_PART_201212,RESULT_PART_201212_0
3.用SecureCRT登陆,从生产库中导出数据分区RESULT_PART_201212数据(注意:语句最后不要加分号,否则会报错)
[oracle@XDCARCHOLD test]$ expdp sa/pwd DUMPFILE=BUSTB_TESTRESULT_201212.DMP DIRECTORY=PUMP LOGFILE=BUSTB_TESTRESULT_201212.LOG TABLES=BUSTB_TESTRESULT:RESULT_PART_201212 CONTENT=DATA_ONLY
说明:DIRECTORY=PUMP,PUMP是生产服务器已经存在的目录,通过SELECT * FROM dba_directories;查看
4.通scp命令把备份的文件考到归档库
[oracle@XDCARCHOLD test]$ scp BUSTB_TESTRESULT_201212.DMP oracle@IP地址:/u03/dump
oracle@192.168.90.122's password:
BUSTB_TESTRESULT_201212.DMP 100% 23GB 32.1MB/s 12:04
[oracle@XDCARCHOLD test]$
5.用SecureCRT登陆,导入到归档库,(注意:语句最后不要加分号,否则会报错)
[oracle@xdctest dump]$ impdp sa/pwd dumpfile=BUSTB_TESTRESULT_201212.DMP directory=DUMP_DIR logfile=BUSTB_TESTRESULT_201212.log TABLES=BUSTB_TESTRESULT CONTENT=DATA_ONLY
说明:DIRECTORY=DUMP_DIR ,DUMP_DIR 是归档服务器已经存在的目录 /u03/dump,通过SELECT * FROM dba_directories;查看
6.如果服务器上没有合适的路径,可新建路径(未测)
mkdir -p /expdp_dir
chmod -R 777 /expdp_dir
create directory dump_dir as '/home/oracle/test'
并授权给导出用户,如用户sa
grant read,write on directory dump_dir to sa
7.在生产库和归档库分别查询,看最大主键值是否一致,防止有些数据在expdp后上传,最好的办法,expdp前确认web服务已经停止
SELECT MAX(summar_id) FROM BUSTB_TESTRESULT PARTITION(RESULT_PART_201212);
8. 检查生产环境和归档库中相应分区记录数是否一致
SELECT COUNT(1) FROM BUSTB_TESTSUMMARY PARTITION(RESULT_PART_201212);
9.清理生产库中已归档分区,如:删除BUSTB_TESTRESULT表2012年12月分区的数据
alter table BUSTB_TESTRESULT truncate partition RESULT_PART_201212 drop storage;
10.对分区执行truncate 操作,会导致全局索引失效,所以需要重建全局索引(全局未分区索引,全局分区索引)
可用alter index index_name rebuild [online]
也可删除后,重新建,可以加并行;如另一个分区表,BUSTB_TESTSUMMARY的全局未分区索引
drop index BUSTB_TESTSUMMARY_INDX3 ;
create index BUSTB_TESTSUMMARY_INDX3 on BUSTB_TESTSUMMARY (SN, STATION_ID) tablespace XDCIDX NOLOGGING parallel 4;
加并行建立完后,需将该索引改为noparallel
alter index BUSTB_TESTSUMMARY_INDX3 noparallel;
11.检查有没有失效对象
SELECT * FROM DBA_OBJECTS T WHERE T.STATUS ='INVALID';