قابلیتهای شناخته شده ای که اوراکل از نسخه 23ai دیگر از آنها پشتیبانی نمی کند.

اوراکل در کنار قابلیتهای متعددی که در هر نسخه ارائه می کند، بعضی از قابلیتهای قبلی را deprecate و یا desupport می کند. deprecate به این معنی که آن قابلیت دیگر بهبودی نخواهد داشت و از نسخه های بعدی desupport می شود و desupport  هم به این معنی که اگر باگی داشته باشد، رفع باگی توسط اوراکل انجام نمی شود و بعضا به طور کامل امکان استفاده از آن از بین می رود.

در ادامه این متن تعدادی از قابلیتهای شناخته شده ای که اوراکل از نسخه 23ai دیگر از آنها پشتیبانی نمی کند، را مرور می کنیم.

ابزار Database Upgrade Assistant (DBUA) و ارتقای دستی: از نسخه 23ai اوراکل توصیه می کند از AutoUpgrade برای ارتقاء نسخه دیتابیس استفاده کنیم و از این نسخه، ابزار dbua را در محیط لینوکس پشتیبانی نمی کند همچنین اسکریپتهای ارتقاء دستی نظیر catupgrd, dbupgrade, catctl در این نسخه پشتیبانی نمی شوند البته استفاده از ابزار DBUA در محیط ویندوز کماکان امکان پذیر است.

 

(بیشتر…)

اوراکل 23ai – عبارت INMEMORY(ALL) و NO INMEMORY(ALL)

همانطور که می دانید قابلیت in memory را می توان در سطح ستون فعال و یا غیرفعال کرد:

SQL> create table usef.tb(c1 number,c2 number,c3 number,c4 number,c5 number,c6 number);
Table created.

SQL> ALTER TABLE usef.tb INMEMORY NO INMEMORY (c1,c2);
Table altered.

SQL> SELECT TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION
FROM V$IM_COLUMN_LEVEL
WHERE TABLE_NAME = 'TB'
ORDER BY COLUMN_NAME;  
TABLE_NAME COLUMN_NAME     INMEMORY_COMPRESSION
---------- --------------- --------------------------
TB         C1              NO INMEMORY
TB         C2              NO INMEMORY
TB         C3              DEFAULT
TB         C4              DEFAULT
TB         C5              DEFAULT
TB         C6              DEFAULT
6 rows selected.

SQL> select inmemory from dba_tables where TABLE_NAME = 'TB';
INMEMORY
--------
ENABLED

(بیشتر…)

پشتیبانی دیتابیس اوراکل 23ai از AI Vector Search

همانطور که می دانید با استفاده از بردارها می توان داده های بدون ساختار نظیر عکس، ویدئو، صوت و … را به عدد(آرایه ای از اعداد) تبدیل کرد تا علاوه بر حفظ کیفیت محتوا، اثر شایانی را بر روی جستجوی معنایی گذاشت طوری که جستجوی برداری بر بسیاری از محدودیتهای سنتی غلبه کرده و این امکان را به ما می دهد تا با توصیف هر آنچه را که در ذهن داریم عملیات جستجو را انجام دهیم.

به عبارتی دیگر، با کمک جستجوی برداری می توانیم عکس، ویدئو، صوت و … را بر اساس محتوا و بر مبنای Similarity Search جستجو کنیم بدون آنکه از محتوای آنها متنی در جایی ثبت شده باشد، درحالیکه جستجوهای سنتی، جستجو را بر اساس کلمات کلیدی، شباهت واژگانی، فراوانی وقوع کلمات انجام می دهند.

Vector Databaseهای متعددی وجود دارند که می توان از آنها به طور تخصصی به عنوان دیتابیس بردار استفاده کرد اما بسیاری از این دیتابیسها از SQL، عملیات CRUD(create, read, update, delete)، بکاپ و ریکاوری و … پشتیبانی نمی کنند. بنابرین ذخیره این نوع از دیتا در دیتابیسهای رابطه ای می تواند یک مزیت به شمار بیاید چرا که انواع مختلفی از داده را می توان صرفا در یک دیتابیس ذخیره کرد و با ابزارهای سنتی با قابلیتهای مدرن کار کرد.

دیتابیس اوراکل به عنوان یک دیتابیس رابطه ای قدرتمند تلاش کرده تا در این زمینه راهکاری را ارائه کند. این دیتابیس از نسخه 23ai قابلیت AI Vector Search را به طور کامل پشتیبانی می کند. تبدیل داده های بدون ساختار مثل عکس و فیلم به اعداد(Vector Embedding)، ذخیره آنها در دیتابیس، ایندکس گذاری، امکان اجرای جستجوی شباهت(Similarity Search) و … از این نسخه(23ai) در دیتابیس اوراکل قابل انجام است.

همچنین از 23.4، برای بردارها نوع داده جدیدی به نام vector تعریف شده است که در این مستند نکاتی را در مورد این نوع داده و نحوه ذخیره اطلاعات در آن بیان خواهیم کرد.

(بیشتر…)

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

نسخه FREE اوراکل 23ai را می توان در ویندوز هم  اجرا کرد که در این متن نحوه انجام آن را مشاهده خواهید کرد. البته همانطور که می دانید نسخه FREE محدودیتهایی دارد به طور مثال حجم هر دیتابیس(PDB) در نسخه FREE نمی تواند بیشتر از 12GB شود اندازه RAM و CPU هم محدودیت دارند:

بعد از دانلود فایل zip، آن را در مسیری دلخواه unzip می کنیم:

 

برای نصب، فایل Oracle Database 23ai Free را با Run as administrator اجرا می کنیم:

 

(بیشتر…)

نکته ای در مورد نصب Oracle Database 23ai Exadata بر روی اوراکل لینوکس

همانطور که می دانید اوراکل هنوز نسخه on-premises مربوط به 23ai را ارائه نکرده است و با توجه به وعده ای که داده است، حداکثر تا پایان نیمه دوم 2024 این نسخه را در دسترس همگان قرار خواهد داد(البته اگر مجددا خلف وعده نکند!) اما اخیرا نسخه 23.5 که روی Exadata قابل استفاده است را منتشر کرده که به صورت پیش فرض روی محیط اوراکل لینوکس هم قابل نصب است:

[oracle@OEL9 23ai]$ ./runInstaller

[oracle@OEL9 ~]$ /oracle/23ai/bin/sqlplus "/as sysdba"
SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Fri Aug 9 18:51:46 2024
Version 23.5.0.24.07
Copyright (c) 1982, 2024, Oracle.  All rights reserved.
Connected to an idle instance.

اما مسئله که سبب شد تا این مستند را بنویسم آن است که در زمان ایجاد دیتابیس از طریق این نرم افزار، با خطای زیر مواجه می شویم:

ORA-27350: This version of the Oracle Database software cannot be run on this platform

(بیشتر…)

ایجاد دیتابیس 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 را متوقف و نتیجه گزارش را ببینیم.

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

(بیشتر…)

پارامتر JSON_BEHAVIOR در اوراکل 23ai

در اوراکل نسخه 21c، زمانی که توابع مربوط به JSON نظیر JSON_QUERY، JSON_TABLE و JSON_VALUE ورودی معتبری نداشته باشند، خطایی رخ نمی دهد و null به کاربر برمی گردد در مثال زیر، کلید Year سه بار تکرار شده و این ورودی معتبر نیست اما دستور select بدون خطا اجرا می شود و صرفا NULL به کاربر برمی گردد:

SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year') YEAR;
YEAR
----------------- 

در این شرایط اگر بخواهیم این رفتار را در سطح دستور تغییر دهیم، می توانیم عبارت ERROR ON ERROR را به ورودی اضافه کنیم:

SQL>  SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year' error  on error) ;
ORA-40470: JSON query '$.Year' evaluated to multiple values.
Help: https://docs.oracle.com/error-help/db/ora-40470/

*مقدار پیش فرض NULL ON ERROR است.

در نسخه 23ai برای کنترل این رفتار، پارامتر جدیدی به نام JSON_BEHAVIOR ارائه شده که در سطح session قابل تنظیم است. مقدار پیش فرض این پارامتر، ON_ERROR:NULL است:

SQL> ALTER SESSION SET JSON_BEHAVIOR = 'ON_ERROR:NULL';
Session altered.

SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year');
JSON_VALUE('[{YEAR:1401},{YEAR:1401},{YEAR:1402}]','$.YEAR')
--------------------------------------------------------------------------------

اما می توانیم این مقدار را به ON_ERROR:ERROR تنظیم کنیم تا برای کوئری فوق خطا نمایش داده شود:

SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year');
ORA-40470: JSON query '$.Year' evaluated to multiple values.
Help: https://docs.oracle.com/error-help/db/ora-40470/

اوراکل 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