اوراکل 23ai – قابلیت staging table

همانطور که می دانید، استفاده از جداول staging در محیط Data Warehouse بسیار رایج است و کاربرد آن به زمان بارگذاری دیتا به دیتابیس Warehouse برمی گردد. معمولا در محیط Warehouse، داده های خام که از دیتابیسهای source دریافت می شوند در ابتدا به یک ناحیه موقت و یا همان جداول staging منتقل شده و بعد از فرایند پاکسازی داده های ناقض و ناسازگار و همچنین تبدیل داده ها به فرمت استاندارد، این داده ها در جداول نهایی و عملیاتی ذخیره می شوند.

علاوه بر بارگذاری اولیه، برای بروزرسانی هم از جداول staging استفاده می شود و گاها این جداول قبل از استفاده، truncate می شوند.

در اوراکل 23ai قابلیتی هر چند جزیی در این زمینه ارائه شد و از این نسخه می توانیم جداول از نوع staging ایجاد کنیم این کار با اضافه کردن عبارت FOR STAGING همراه با دستور CREATE TABLE قابل انجام است.

SQL> create table STGtbl (id number,name varchar2(100),address varchar2(1000)) FOR STAGING;
Table created.

(بیشتر…)

اوراکل 23ai – افزایش سرعت اجرای impdp در زمان برگرداندن constraintها

در زمان اجرای دستور IMPDP، بخشهایی از عملیات امکان اجرای parallel را ندارند ایجاد constraint یکی از این قسمتهاست. اوراکل قبل از ایجاد constraint باید یکبار Validate را برای دیتای جاری جدول اجرا کند. با هر بار اجرای Validate، نیاز است یک بار Full table scan انجام شود که می تواند بسیار زمانبر باشد. دو constraint زیر را در نظر بگیرید:

alter table MYTB  add constraint CHECK1  check (col3 > 50);
alter table MYTB  add constraint CHECK2  check (col9 in (5,15));

جدول mytb را حذف می کنیم و از طریق dumpای که از این جدول داریم، آن را مجددا ایجاد می کنیم:

SQL> drop table mytb;
Table dropped.
W-1 Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
W-1 . . imported "USEF"."MYTB"                                  19 GB 337830912 rows in 83 seconds using external_table
W-1 Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
W-1      Completed 2 CONSTRAINT objects in 208 seconds

(بیشتر…)

قابلیتهای شناخته شده ای که اوراکل از نسخه 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/