قصد داریم از جدولی که بعضی از ستونهای آن حاوی اطلاعات LOB است دامپی را تهیه کنیم، منتها با توجه به حجم بالایی که اطلاعات LOB در این جدول دارند و همچنین به دلایل دیگری چون سرعت بیشتر، امنیت و یا تخصیص فضای کمتر، تصمیم داریم مانع از ثبت این اطلاعات در دامپ شده و یا حداقل در زمان import از برگرداندن این اطلاعات ممانعت کنیم.
راهکار چیست؟
مستثنی کردن اطلاعات ستونهای از نوع LOB در زمان انجام عملیات export از اوراکل نسخه 12c به راحتی قابل کنترل است این کار با ایجاد ویو و استفاده از پارامتر views_as_tables قابل انجام است اما برای برگرداندن دامپ حاوی اطلاعات LOB، نمی توان از این راهکار استفاده کرد و در این صورت استفاده از پارامتر REMAP_DATA راهگشا خواهد بود.
قبلا در مورد پارامتر REMAP_DATA مطلبی را ارائه کردیم و نوشتیم که از طریق این پارامتر می توان Data Masking و دستکاری داده ها را در زمان عملیات export و import انجام داد. در این مطلب هم خواهیم دید که چگونه با کمک همین پارامتر می توان اطلاعات ستونهای از نوع LOB را در پروسه export و import مستثنی کرد.مثال زیر را ببینید.
مثال: قصد داریم اطلاعاتی که در ستونهای ADDRESS و RESUME از جدول person موجود هستند را در expdp مستثنی کنیم:
SQL> desc person
Name Type
——- ————————
ID NUMBER
NAME VARCHAR2(10)
ADDRESS CLOB
RESUME CLOB
SQL> select * from person;
ID NAME ADDRESS RESUME
—- ———- ———- ———–
1 usef LOB_DATA LOB_DATA
برای این کار پکیجی را ایجاد می کنیم تا ما به ازای هر فیلد از این دو ستون، مقدار null را به ما برگرداند:
SQL> create or replace package without_CLOB as
2 function null_clob (soton_clob in clob) return clob;
3 end;
4 /
Package created
SQL> create or replace package body without_CLOB as
2 function null_clob (soton_clob in clob) return clob
3 is
4 nulllll clob := empty_clob ();
5 begin
6 return nulllll;
7 end;
8 end;
9 /
Package body created
بعد از ایجاد پکیج without_CLOB، به کمک پارامتر remap_data دامپی را از جدول person تهیه می کنیم:
[oracle@ol7 ~]$ expdp directory=tk dumpfile=dmp_without_LOB tables=usef.person REMAP_DATA=usef.person.ADDRESS:usef.without_CLOB.null_clob REMAP_DATA=usef.person.RESUME:usef.without_CLOB.null_clob
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Starting “SYS”.”SYS_EXPORT_TABLE_01″: sys/******** AS SYSDBA directory=tk dumpfile=dmp_without_LOB tables=usef.person REMAP_DATA=usef.person.ADDRESS:usef.without_CLOB.null_clob REMAP_DATA=usef.person.RESUME:usef.without_CLOB.null_clob
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported “USEF”.”PERSON” 6.398 KB 1 rows
Master table “SYS”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TABLE_01 is:
/home/oracle/dmp_without_LOB.dmp
Job “SYS”.”SYS_EXPORT_TABLE_01″ successfully completed at Mon Jul 6 07:38:24 2020 elapsed 0 00:00:42
با import مجدد این جدول، خواهیم دید که ستونهای address و resume حاوی مقدار نیستند:
[oracle@ol7 ~]$ impdp directory=tk dumpfile=dmp_without_LOB tables=usef.person remap_table=person:person2
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported “USEF”.”PERSON2″ 6.398 KB 1 rows
SQL> select ADDRESS from usef.person2;
No Rows Selected.
SQL> select * from usef.person2;
ID NAME ADDRESS RESUME
———- ———- ———- ———-
1 usef
استثتنا کردن ستونهای از نوع LOB در زمان impdp هم قابل انجام است.