مستثنی کردن اطلاعات ستونهای از نوع LOB در دیتاپامپ

قصد داریم از جدولی که بعضی از ستونهای آن حاوی اطلاعات 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 هم قابل انجام است.

 

 

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.