بهبود اول: از اوراکل 12cR2 می توان tablespaceهای سیستمی نظیر SYSTEM، SYSAUX، UNDO و حتی TEMP را در حالت encrypt قرار داد:
SQL> alter system set db_create_file_dest=’/oracle/mydata/’;
System altered.
SQL> alter tablespace system encryption online encrypt;
Tablespace altered.
پس از قرار دادن system tbs در حالت encrypt، اگر بخواهیم فایل wallet را در حالت close قرار دهیم، دستور با خطای زیر متوقف خواهد شد:
Version 18.3.0.0.0
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY p;
ORA-28439: cannot close wallet when SYSTEM, SYSAUX, UNDO, or TEMP tablespaces are encrypted
اما در اوراکل 19c، امکان اجرای دستور فوق وجود دارد:
SQL> alter tablespace system encryption online encrypt;
Tablespace altered.
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY p;
keystore altered.
همانطور که می بینید، tablespace سیستم در حالت encrypt و فایل wallet در وضعیت close قرار دارد!
سوال: آیا در این شراط(با بسته شدن فایل wallet)، امکان دسترسی به اطلاعات موجود در tablespace سیستم وجود خواهد داشت؟
پاسخ مثبت است:
SQL> select count(*) from dba_objects ;
COUNT(*)
———-
73254
SQL> exec dbms_stats.gather_table_stats(ownname => user,tabname => ‘TAB$’);
PL/SQL procedure successfully completed.
SQL> select tablespace_name from dba_segments where segment_name=’TBL1′;
TABLESPACE_NAME
——————————
TBS01
البته با توجه به بسته بودن فایل wallet، دسترسی به اطلاعاتی که در tablespaceهای غیرسیستمی(و encrypt شده) قرار دارند، امکان پذیر نخواهد بود:
SQL> select count(*) from tbl1;
ORA-28365: wallet is not open
بهبود دوم: عدم الزام به استفاده از عبارت file_name_convert در زمان اجرای دستور alter tablespace … encryption online
از نسخه 12cR2 می توان به صورت انلاین و با اجرای دستور alter tablespace … encryption onlineء، tablespace ای را در حالت encrypt قرار داد:
SQL> alter tablespace tbs01 encryption online encrypt file_name_convert=(‘/oracle/mydata/DUP/datafile/tbs01.dbf’,’/oracle/tde/DUP/datafile/tbs01_tde.dbf’,’/oracle/mydata/DUP/datafile/tbs02.dbf’,’/oracle/tde/DUP/datafile/tbs02_tde.dbf’,’/oracle/mydata/DUP/datafile/tbs03.dbf’,’/oracle/tde/DUP/datafile/tbs03_tde.dbf’);
Tablespace altered.
فرمت تنظیم عبارت file_name_convert به صورت زیر می باشد:
file_name_convert=(‘existing datafile 1’,’new datafile 1’,’existing datafile 2’, ‘new datafile 2’ ..etc)
عدم استفاده از این عبارت، منجر به خطای زیر خواهد شد(اگر OMF تنظیم نشده باشد):
ORA-28425: missing a valid FILE_NAME_CONVERT clause
البته در صورتی که Oracle Managed File تنظیم شده باشد، استفاده از عبارت file_name_convert با خطای زیر متوقف خواهد شد:
ORA-28437: unexpected FILE_NAME_CONVERT clause with Oracle Managed Files
در این شرایط باید از تعیین مسیرها صرف نظر کرد تا اوراکل به صورت OMFای دیتافایلهای encrypt شده را ایجاد کند:
SQL> alter tablespace tbs01 encryption online encrypt ;
Tablespace altered.
در اوراکل 19c، در صورت عدم تنظیم OMF هم می توان دستور alter tablespace … encryption online را بدون استفاده از عبارت FILE_NAME_CONVERT اجرا کرد:
SQL> alter system set db_create_file_dest=”;
System altered.
SQL> select file_name from dba_data_files where tablespace_name=’TBS01′;
FILE_NAME
——————————————————————————–
/oracle19c/mydata/DUP/datafile/tbs01.dbf
/oracle19c/mydata/DUP/datafile/tbs02.dbf
/oracle19c/mydata/DUP/datafile/tbs03.dbf
SQL> alter tablespace tbs01 encryption online encrypt ;
Tablespace altered.
SQL> select file_name from dba_data_files where tablespace_name=’TBS01′;
FILE_NAME
——————————————————————————–
/oracle19c/mydata/DUP/datafile/tbs01.dbf
/oracle19c/mydata/DUP/datafile/tbs02.dbf
/oracle19c/mydata/DUP/datafile/tbs03.dbf
همانطور که می بینید، دستور فوق، دیتافایلهای متعلق به tbs01 را با همان نام و در همان مسیر ایجاد کرده است. البته در حین اجرای دستور alter tablespace … encryption online، به صورت موقت، نام دیتافایل را به فرمت datafile_name_new تغییر خواهد داد.