همانطور که می دانید، استفاده از جداول staging در محیط Data Warehouse بسیار رایج است و کاربرد آن به زمان بارگذاری دیتا به دیتابیس Warehouse برمی گردد. معمولا در محیط Warehouse، داده های خام که از دیتابیسهای source دریافت می شوند در ابتدا به یک ناحیه موقت و یا همان جداول staging منتقل شده و بعد از فرایند پاکسازی داده های ناقض و ناسازگار و همچنین تبدیل داده ها به فرمت استاندارد، این داده ها در جداول نهایی و عملیاتی ذخیره می شوند.
علاوه بر بارگذاری اولیه، برای بروزرسانی هم از جداول staging استفاده می شود و گاها این جداول قبل از استفاده، truncate می شوند.
در اوراکل 23ai قابلیتی هر چند جزیی در این زمینه ارائه شد و از این نسخه می توانیم جداول از نوع staging ایجاد کنیم این کار با اضافه کردن عبارت FOR STAGING همراه با دستور CREATE TABLE قابل انجام است.
SQL> create table STGtbl (id number,name varchar2(100),address varchar2(1000)) FOR STAGING; Table created.
به روش CTAS هم می توان این نوع از جداول را ایجاد کرد:
SQL> create table STGtbl for staging as select * from dual; Table created.
در همین زمینه، ستون staging هم به dba_tables اضافه شد تا جداول staging را بتوان از طریق این ویو فیلتر کرد:
SQL> select table_name,staging from dba_tables where staging='YES'; TABLE_NAME STAGING ---------- ----------- STGTBL YES
قابلیت staging را می توانیم برای این جدول غیرفعال کنیم:
SQL> alter table STGtbl not for staging; Table altered. SQL> select table_name,staging from dba_tables where staging='YES'; no rows selected
همچنین جداولی که از قبل ایجاد شده اند را هم می توانیم به staging table تبدیل کنیم:
SQL> alter table STGtbl for staging; Table altered.
امکان استفاده از قابلیت فشرده سازی برای این نوع از جداول وجود ندارد:
SQL> alter table STGtbl compress; ORA-38500: Invalid operation on Staging Table
البته همراه با دستور create table می توانیم عبارتهای compress و for staging را با هم استفاده کنیم ولی در عمل، compress نادیده گرفته می شود:
SQL> create table STGtbl (id number,name varchar2(100),address varchar2(1000)) FOR STAGING COMPRESS; Table created. SQL> select table_name,staging,compression from dba_tables where staging='YES'; TABLE_NAME STA COMPRESS ---------- --- -------- STGTBL YES DISABLED
جداول staging امکان پارتیشن بندی هم دارند:
SQL>create table stgTBL ( id number, name varchar2(100), mydate DATE ) partition by range ( mydate ) interval ( numtoyminterval(1,'MONTH')) ( PARTITION p1 VALUES LESS THAN (TO_DATE('1-1-2010', 'DD-MM-YYYY')) ) for staging; Table created.
SQL> insert into stgTBL values(1,'test1',sysdate); 1 row created. SQL> insert into stgTBL values(1,'test1',sysdate-400); 1 row created. SQL> insert into stgTBL values(1,'test1',sysdate-800); 1 row created. SQL> commit; Commit complete.
SQL> select TABLE_NAME,PARTITION_NAME from dba_tab_partitions where TABLE_NAME='STGTBL'; TABLE_NAME PARTITION_NAME ---------- -------------- STGTBL P1 STGTBL SYS_P471 STGTBL SYS_P472 STGTBL SYS_P473
عملیات متداول بر روی پارتیشنها(نظیر split، drop، merge) بر روی پارتیشنهای این نوع از جداول قابل انجام است:
SQL> alter table STGTBL drop partition SYS_P471; Table altered.
آمارهای مربوط به این نوع از جداول lock هستند و امکان بروزرسانی دستی را در حالت پیش فرض وجود ندارد:
SQL> exec dbms_stats.gather_table_stats(null,’STGTBL’); ORA-20005: object statistics are locked (stattype = ALL) ORA-06512: at “SYS.DBMS_STATS”, line 42661 ORA-06512: at “SYS.DBMS_STATS”, line 41946 ORA-06512: at “SYS.DBMS_STATS”, line 9213 ORA-06512: at “SYS.DBMS_STATS”, line 10277 ORA-06512: at “SYS.DBMS_STATS”, line 41094 ORA-06512: at “SYS.DBMS_STATS”, line 42094 ORA-06512: at “SYS.DBMS_STATS”, line 42642 ORA-06512: at line 1
جداول staging در صورت حذف، به RECYCLEBIN منتقل نمی شوند:
SQL> show parameter recyclebin NAME TYPE VALUE --------------------- ----------- ------------------------ recyclebin string on SQL> drop table STGTBL; Table dropped. SQL> select * from dba_recyclebin; no rows selected