• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle传输表空间在数据仓库ETL中的应用

mysql 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论

在数据仓库项目中,ETL无疑是最为繁琐,也是最为耗时和最不稳定的,如果数据源和目标同为oracle,且满足了一定的条件,则可以使用

在数据仓库项目中,ETL无疑是最为繁琐,也是最为耗时和最不稳定的,如果数据源和目标同为Oracle,且满足了一定的条件,则可以使用oracle的传输表空间来帮助ETL提高效率。
要想使用传输表空间,必须满足以下几个条件:
源与目标库都必须大于8i;
对于低于10G的版本,源与目标库必须为统一平台;
自包含:可以通过以下语句予以检测:
SYS@racdb1 SQL>exec dbms_tts.transport_set_check(‘TS_BIG1’,true);
PL/SQL procedure successfully completed.
SYS@racdb1 SQL>select * from TRANSPORT_SET_VIOLATIONS;
no rows selected
没有返回行,说明源表空间是自包含的,否则需要处理,另传输表空间不要包含sys的对象。
源表空间为read only
虽然从9i开始不需要源和目标的blocksize一样,但如果不一致,需要在目标数据库中增加相应的db_xk_cache_size,如本次实验中源数据库的blocksize为8k,目标数据库的blocksize为16k,则需要在目标库中增加db_8k_cache_size=8192参数,否则impdp时会报错ORA-29339.

本实验中数据源为一个linux平台的oracle10g的分区表,目标为一个windows2008平台的oracle10g,实现步骤为:
1.确定源数据库的类型:
SYS@racdb1 SQL>select * from gv$version;

INST_ID BANNER
———- —————————————————————-
1 Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 – 64bi
1 PL/SQL Release 10.2.0.5.0 – Production
1 CORE 10.2.0.5.0 Production
1 TNS for Linux: Version 10.2.0.5.0 – Production
1 NLSRTL Version 10.2.0.5.0 – Production

SYS@racdb1 SQL>SELECT p.PLATFORM_NAME, p.ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM p, V$DATABASE d
WHERE p.PLATFORM_NAME = d.PLATFORM_NAME;

PLATFORM_NAME ENDIAN_FORMAT
—————————————- ————–
Linux x86 64-bit Little

2.确定目标数据库的类型:
CCZDBA@bidb SQL>select * from v$version;

BANNER
——————————————————————————–
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
PL/SQL Release 11.2.0.1.0 – Production
CORE 11.2.0.1.0 Production
TNS for 64-bit Windows: Version 11.2.0.1.0 – Production
NLSRTL Version 11.2.0.1.0 – Production

CCZDBA@bidb SQL>SELECT p.PLATFORM_NAME, p.ENDIAN_FORMAT
2 FROM V$TRANSPORTABLE_PLATFORM p, V$DATABASE d
3 WHERE p.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
——————————————– —————————-
Microsoft Windows x86 64-bit Little

3.在源库中创建各个分区具有独立表空间的分区表:
CCZDBA@racdb1 SQL>create tablespace ts_big1 datafile ‘+RACDAT’ size 100M autoextend on uniform size 10m;
Tablespace created.
CCZDBA@racdb1 SQL>create tablespace ts_big2 datafile ‘+RACDAT’ size 100M autoextend on uniform size 10m;本文来源[email protected]搞@^&代*@码网(
Tablespace created.
SYS@racdb1 SQL>CREATE TABLE SCOTT.BIGTAB
2 (
3 INS_TIME DATE,
4 OWNER VARCHAR2(30 BYTE),
5 OBJECT_NAME VARCHAR2(128 BYTE),
6 SUBOBJECT_NAME VARCHAR2(30 BYTE),
7 OBJECT_ID NUMBER,
8 DATA_OBJECT_ID NUMBER,
9 OBJECT_TYPE VARCHAR2(19 BYTE),
10 CREATED DATE,
11 LAST_DDL_TIME DATE,
12 TIMESTAMP VARCHAR2(19 BYTE),
13 STATUS VARCHAR2(7 BYTE),
14 TEMPORARY VARCHAR2(1 BYTE),
15 GENERATED VARCHAR2(1 BYTE),
16 SECONDARY VARCHAR2(1 BYTE)
17 )
18 PARTITION BY RANGE (INS_TIME)
19 (
20 PARTITION INS_20120416 VALUES LESS THAN (TO_DATE(‘ 2012-04-17 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’))
21 LOGGING
22 NOCOMPRESS
23 TABLESPACE TS_BIG1,
24 PARTITION INS_20120417 VALUES LESS THAN (TO_DATE(‘ 2012-04-18 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’))
25 LOGGING
26 NOCOMPRESS
27 TABLESPACE TS_BIG2
28 );
Table created.

SYS@racdb1 SQL>conn scott/tiger
Connected.
SCOTT@racdb1 SQL>insert into bigtab select sysdate-1,a.* from dba_objects a;
50286 rows created.
SCOTT@racdb1 SQL>commit;
Commit complete.
SCOTT@racdb1 SQL>insert into bigtab select sysdate,a.* from dba_objects a;

50286 rows created.


4.建立临时表以和分区INS_20120416进行交换,一满足表空间ts_big1为自包含:
注意在交换之前该分区所在的表空间不满足自包含的要求,无法导出:
SYS@racdb1 SQL>exec dbms_tts.transport_set_check(‘TS_BIG1’,true);

PL/SQL procedure successfully completed.

SYS@racdb1 SQL>select * from TRANSPORT_SET_VIOLATIONS;

VIOLATIONS
——————————————————————————–
Default Partition (Table) Tablespace USERS for BIGTAB not contained in transport
able set

Partitioned table SCOTT.BIGTAB is partially contained in the transportable set:
check table partitions by querying sys.dba_tab_partitions

[oracle@Linux1]expdp cczdba/cczdba dumpfile=trans_ts.dmp directory=DATA_PUMP_DIR transport_tablespaces=ts_big1

Export: Release 10.2.0.5.0 – 64bit Production on Tuesday, 17 April, 2012 13:20:02

Copyright (c) 2003, 2007, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 – 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
Starting “CCZDBA”.”SYS_EXPORT_TRANSPORTABLE_01″: cczdba/******** dumpfile=trans_ts.dmp directory=DATA_PUMP_DIR transport_tablespaces=ts_big1
ORA-39123: Data Pump transportable tablespace job aborted
ORA-29341: The transportable set is not self-contained

Job “CCZDBA”.”SYS_EXPORT_TRANSPORTABLE_01″ stopped due to fatal error at 13:20:12
交换后:
SCOTT@racdb1 SQL>create table bigtab_temp as select * from bigtab where 1=2;
Table created.
SCOTT@racdb1 SQL>alter table bigtab exchange partition INS_20120416 with table bigtab_temp;
Table altered.
SCOTT@racdb1 SQL>conn /as sysdba
Connected.
SYS@racdb1 SQL>exec dbms_tts.transport_set_check(‘TS_BIG1’,true);
PL/SQL procedure successfully completed.
SYS@racdb1 SQL>select * from TRANSPORT_SET_VIOLATIONS;
no rows selected


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle传输表空间在数据仓库ETL中的应用
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址