ایجاد دیتابیس Encrypt شده در لایه سیستم عامل

در اوراکل نسخه 21c و 23ai می توانیم در زمان ایجاد دیتابیس از طریق ابزار dbca، قابلیت TDE را برای همه tablespaceها{اعم از سیستمی و غیرسیستمی} فعال کنیم تا دیتابیس از همان ابتدا به صورت کامل در لایه سیستم عامل Encrypt شود.

برای استفاده از TDE، گزینه های زیر همراه با اجرای DBCA قابل تنظیم هستند:

[-'configureTDE' <true | false> Specify true to configure TDE wallet]
        [-'encryptPDBTablespaces' <Specify ALL to encrypt all Tablespaces or A comma separated list of name:value pairs with tablespace encryption to true/false. For example SYSTEM:true,SYSAUX:false>]
        [-'encryptTablespaces' <Specify ALL to encrypt all Tablespaces or A comma separated list of name:value pairs with tablespace encryption to true/false. For example SYSTEM:true,SYSAUX:false>]
        [-'pdbTDEPassword' <Specify password for PDB TDE wallet>]
        [-'primaryDBTdeWallet' <Specify the location for TDE wallet of primary database>]
        [-'sourcePdbTDEPassword' <Specify password for source PDB TDE wallet and it is used only in creation of PDB from existing PDB which has TDE wallet>]
        [-'sourceTdeWalletPassword' <Specify password for source database TDE wallet>]
        [-'tdeAlgorithm' <Specify the TDE Algorithm Type.>]
        [-'tdeWalletLoginType' <Specify the TDE Wallet Login Type, PASSWORD | AUTO_LOGIN  | LOCAL_AUTO_LOGIN. Default is PASSWORD for SI and AUTO_LOGIN is default for RAC]
        [-'tdeWalletModeForPDB' <Type of keystore, either UNITED or ISOLATED. Default is UNITED>]
        [-'tdeWalletPassword' <Specify password for TDE wallet>]
        [-'tdeWalletPathInTarFile' <value>]
        [-'tdeWalletRoot' <Specify the location for TDE wallet root init parameter>]

(بیشتر…)

In-Memory Advisor در اوراکل 23ai

قابلیت In-Memory Advisor با تحلیل workload دیتابیس تلاش می کند برای In-Memory sizeهای مختلف، DB-Time را تخمین بزند و همچنین می تواند پیشنهاد کند کدام یک از objectها در In-Memory قرار بگیرند.

برای استفاده از این قابلیت، باید از پکیج DBMS_INMEMORY_ADVISE استفاده کرد نحوه اجرای In-Memory Advisor، بسیار مشابه قابلیت Privilege Analysis است و برای گرفتن advise در زمینه In-Memory هم ابتدا باید taskای را start کنیم و زمانی که احساس شد workload دیتابیس به اندازه کافی از دیدگاه In-Memory مورد تحلیل قرار گرفته، این Task را متوقف و نتیجه گزارش را ببینیم.

در ادامه با جزییات بیشتری نحوه ایجاد این گزارش را با هم خواهیم دید.

(بیشتر…)

اوراکل 23ai – تمامی Tablespaceها به صورت Bigfile ایجاد می شوند

از نسخه 23ai تمامی tablespaceهای سیستمی و همچنین users موجود در root container به صورت Bigfile ایجاد می شوند(به استثنای Temp tablespaceها):

SQL*Plus: Release 23.0.0.0.0 - Production on Sat Jun 8 22:43:40 2024
Version 23.4.0.24.05
SQL> select TABLESPACE_NAME,BIGFILE from  dba_tablespaces;
TABLESPACE_NAME                BIG
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       YES
TEMP                           NO
USERS                          YES

tablespaceهای جدیدی هم که توسط DBA در root container ایجاد می شود به صورت Bigfile خواهند بود:

SQL> create tablespace tbs1;
Tablespace created.

SQL> select TABLESPACE_NAME,BIGFILE from  dba_tablespaces where TABLESPACE_NAME='TBS1';
TABLESPACE_NAME                BIG
------------------------------ ---
TBS1                           YES

اما در PDB این مسئله تفاوت جزیی دارد در این محیط، تمامی tablespaceهای سیستمی از نوع Bigfile هستند ولی USERS از نوع Smallfile هست:

SQL> select TABLESPACE_NAME,BIGFILE from  dba_tablespaces;
TABLESPACE_NAME                BIG
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       YES
TEMP                           NO
USERS                          NO

(بیشتر…)

بروزر شدن dba_errors بعد از کامپایل invalid objectها

همانطور که می دانید ویوی dba_errors خطای مربوط به invalid objectها را نمایش می دهد بنابرین اگر بخواهیم دلیل invalid بودن یک پروسیجر، پکیج، فانکشن و … را ببینیم، می توانیم از این ویو استفاده کنیم.

نکته ای که در این مستند به آن خواهیم پرداخت آن است که این ویو تا قبل از compile شدن یک invalid object، خطای مربوط  به آن object را نمایش نمی دهد این مسئله را در ادامه متن با ارائه مثال شرح داده ایم.

پروسیجر زیر را در نظر بگیرید:

SQL> create table usef.tb (id number,name varchar2(100));

SQL> create procedure usef.prc1(p_id in number) as
  kk varchar2(100);
begin
  select name into kk from usef.tb where id = p_id;
end;
/
SQL> select status from dba_objects where object_name='PRC1';
STATUS
-------
VALID

با حذف ستون name از جدول tb، این پروسیجر INVALID خواهد شد:

SQL> alter table usef.tb drop column name;
Table altered

SQL> select status from dba_objects where object_name='PRC1';
STATUS
-------
INVALID

اما ویوی dba_errors چیزی را برنمی گرداند:

SQL> select owner,name,text from dba_errors;
no rows selected

با اولین کامپایل این پروسیجر، dba_errors خطای مربوط به پروسیجر را نمایش می دهد:

SQL> alter procedure usef.prc1 compile;
Warning: Procedure altered with compilation errors.

SQL> select owner,name,text from dba_errors;
OWNER      NAME       TEXT
---------- ---------- --------------------------------------------------
USEF       PRC1       PL/SQL: ORA-00904: "NAME": invalid identifier
USEF       PRC1       PL/SQL: SQL Statement ignored

 

نصب نسخه FREE اوراکل 23ai

در این متن قصد داریم مراحل نصب Oracle Database 23ai free را بر روی اوراکل لینوکس 8 توضیح دهیم در ابتدا باید متذکر شویم که حجم هر دیتابیس(PDB) در نسخه FREE نمی تواند بیشتر از 12GB شود و همچنین برای استفاده از RAM و CPU هم محدودیت دارد:

RPM مربوطه را از سایت اوراکل دانلود می کنیم:

(بیشتر…)

اوراکل 23ai – امکان استفاده از توابع تجمیعی(نظیر SUM و AVG) بر روی نوع داده INTERVAL

تا قبل از نسخه 23ai نمی توانستیم از توابع تجمیعی نظیر SUM، AVG، MIN و MAX و … بر روی داده های با دیتاتایپ  INTERVAL استفاده کنیم و در صورت استفاده، به خطای ORA-00932 مواجه می شدیم. برای مثال می خواهیم بررسی کنیم اجرای جاب PURGE_LOG در یک ماه گذشته به صورت میانگین چقدر زمان برده است:

SQL> select column_name,data_type from dba_tab_cols where table_name='DBA_SCHEDULER_JOB_RUN_DETAILS' and column_name='RUN_DURATION';
COLUMN_NAME     DATA_TYPE
--------------- ----------------------------------------
RUN_DURATION    INTERVAL DAY(3) TO SECOND(0)
SQL> select AVG(RUN_DURATION) from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name='PURGE_LOG';

'ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND'

در اوراکل نسخه 23ai این امکان وجود دارد تا از توابع تجمیعی بر روی نوع داده INTERVAL استفاده کنیم:

SQL> select AVG(RUN_DURATION) from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name='PURGE_LOG';
AVG(RUN_DURATION)
------------------------------------------------
+000000000 00:00:01.419354839

(بیشتر…)

ذخیره AWR snapshot خارج از SYSAUX

همانطور که می دانید AWR snapshotها در SYSAUX tablespace ذخیره می شوند و تا نسخه 19c نمی توان آنها را در tablespace مجزایی ذخیره کرد. این امکان در نسخه 19c با اضافه شدن پارامتر TABLESPACE_NAME به پروسیجر dbms_workload_repository.modify_snapshot_settings به وجود آمد.

Connected to Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 
SQL> desc dbms_workload_repository.modify_snapshot_settings
Parameter       Type     Mode Default? 
--------------- -------- ---- -------- 
RETENTION       NUMBER   IN   Y        
INTERVAL        NUMBER   IN   Y        
TOPNSQL         NUMBER   IN   Y        
DBID            NUMBER   IN   Y        
TABLESPACE_NAME VARCHAR2 IN   Y        
RETENTION       NUMBER   IN   Y        
INTERVAL        NUMBER   IN   Y        
TOPNSQL         VARCHAR2 IN            
DBID            NUMBER   IN   Y        
TABLESPACE_NAME VARCHAR2 IN   Y      

همچنین اوراکل در نسخه 21c ستون TABLESPACE_NAME را به ویوی awr_cdb_wr_control اضافه کرده است که از طریق آن می توانیم tablespace جاری AWR  را مشخص کنیم:

(بیشتر…)

اوراکل 23ai – ایجاد خودکار AWR Snapshot در سطح PDB

در زمان ارائه قابلیت Pluggable Database در نسخه 12cR1،ء AWR snapshotها صرفا در سطح CDB ایجاد می شدند و امکان ایجاد snapshot در سطح PDB وجود نداشت. در نسخه 12cR2 پارامتری به نام awr_pdb_autoflush_enabled اضافه شد که با تنظیم آن به مقدار TRUE، به صورت خودکار در سطح PDB هم AWR snapshot ایجاد می شود اما مقدار پیش فرض این پارامتر تا قبل از نسخه 23ai برابر با FALSE بوده و در نسخه 23ai به صورت پیش فرض فعال می باشد:

SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Thu Sep 7 10:57:00 2023
SQL> show parameter awr_pdb_autoflush_enabled
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
awr_pdb_autoflush_enabled            boolean     TRUE

با این تغییر در صورتی که اسکریپت awrrpt.sql را در هر کدام از PDBها اجرا کنیم، گزینه AWR_PDB مقدار پیش فرض خواهد بود:

Specify the location of AWR Data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AWR PDB reports can be generated using data stored in this PDB or ROOT.
Please enter the desired location at the prompt. Default value is 'AWR_PDB'.
    AWR_PDB  - Use AWR data from PDB
    AWR_ROOT - Use AWR data from ROOT
Enter value for awr_location: AWR_PDB
Location of AWR Data Specified: AWR_PDB

اما در نسخه های قبلی، گزینه AWR_ROOT مقدار پیش فرض بوده است:

Specify the location of AWR Data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AWR_ROOT - Use AWR data from root (default)
AWR_PDB - Use AWR data from PDB
Enter value for awr_location:

برای دیتابیسی با تعداد PDB زیاد و workload بسیار بالا، بهتر است پارامتر awr_snapshot_time_offset را هم در کنار پارامتر awr_pdb_autoflush_enabled تنظیم کنیم تا AWR snapshotها برای همه PDBها به صورت همزمان ایجاد نشوند و با ایجاد وقفه ای هر چند مختصر، از سکته دیتابیس جلوگیری شود.

اوراکل 23ai – بهبودی برای دستور CASE در PL/SQL

اوراکل در نسخه 23ai قابلیت جدیدی را برای دستور CASE در محیط PL/SQL ارائه کرده است که در این متن با آن آشنا خواهیم شد. در ابتدا شکل ساده دستور CASE در PL/SQL را با یک مثال مرور می کنیم:

declare
  VALUE number := 3;
  text  varchar2(50);
begin
  text := case VALUE
            when 1 then
             'ONE'
            when 2 then
             'TWO'
            when 3 then
             'THREE'
            else
             'NOT ONE, TWO NOR THREE'
          end;
  dbms_output.put_line(text);
end;
/
THREE

در این قطعه کد صرفا از عملگر مساوی استفاده شده است و برای استفاده از عملگرهای دیگر نظیر “>”، “<“، BETWEEN و IN باید از فرمت زیر که Searched CASE syntax نامیده می شود، استفاده کنیم:

(بیشتر…)

اوراکل 23ai – قابلیت Transport Tablespace بر روی Network

در اوراکل نسخه 23ai امکان پیاده سازی قابلیت Transport Tablespace از طریق network به وجود آمد برای این کار باید از ابزار RMAN استفاده کرد و از طریق آن دیتافایلهای tablespace مورد نظر را از دیتابیس مبدا به دیتابیس مقصد منتقل کرد.

این کار با اجرای دستور RESTORE FOREIGN TABLESPACE در دیتابیس مقصد قابل انجام است با اجرای این دستور، حتی Metadata مربوط به TABLESPACE هم از طریق ایجاد فایل dump به دیتابیس مقصد منتقل خواهند شد و به صورت خودکار در این دیتابیس برخواهند گشت.

(بیشتر…)