اوراکل 21C – پارامتر pdbTimezone در دستور DBCA

در محیط Container Database می توان در سطح هر containerء، از Time Zone به خصوصی استفاده کرد این امکان در نسخه 12cR1 هم وجود داشت. اسامی Time Zoneها از طریق ویوی V$TIMEZONE_NAMES قابل مشاهده است و با دستور “ALTER DATABASE SET TIME_ZONE” می توان Time Zone دلخواه را برای هر PDB تنظیم کرد:

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tel_Aviv';
Database altered.
SQL> alter session set container=IranPdb;
Session altered.
SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tehran';
Database altered.
SQL> alter session set container=cdb$root;
Session altered.
SQL> startup force;
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> SELECT dbtimezone FROM DUAL;
DBTIMEZONE
-------------
'Asia/Tel_Aviv'
SQL>  alter session set container=IranPdb;
Session altered.
SQL>  SELECT dbtimezone FROM DUAL;
DBTIMEZONE
-----------
'Asia/Tehran'

(بیشتر…)

اوراکل 21c –  تنظیم خصوصیت compression برای ایندکس در زمان import

به عنوان یک قابلیت جدید در اوراکل 12cR1 می توانستیم در زمان برگرداندن دامپ خصوصیت فشرده سازی را برای جداول فعال/غیرفعال کنیم. این کار از طریق پارامتر TRANSFORM در دستور impdp قابل انجام است:

SQL*Plus: Release 12.2.0.1.0 Production 
SQL> select compression from   dba_tables where  table_name = 'TBL1';
COMPRESS
--------
DISABLED
SQL> drop table usef.tbl1;
Table dropped.
 [oracle@oshost ~]$ impdp usef/a directory=drm dumpfile=test.dmp tables=usef.tbl1 TRANSFORM=TABLE_COMPRESSION_CLAUSE:\"ROW STORE COMPRESS ADVANCED\"
SQL> select compression,COMPRESS_FOR from dba_tables where  table_name = 'TBL1';
COMPRESS COMPRESS_FOR
-------- ------------------------------
ENABLED  ADVANCED

(بیشتر…)

غیرفعال کردن Auto Indexing برای ad hoc query

اوراکل در نسخه 21c با ارائه پارامتر OPTIMIZER_SESSION_TYPE امکان غیرفعال کردن automatic indexing را در سطح session فراهم کرده است. مقدار پیش فرض این پارامتر برابر با NORMAL است و با تنظیم این پارامتر به مقدار ADHOC، همه QUERYهایی که در session جاری اجرا می شوند، از دید Auto Indexing نادیده گرفته خواهند شد.

SQL> alter session set optimizer_session_type=ADHOC;
Session altered.

البته در نسخه 19c می توانستیم بعضی از schemaها را از دید Auto Indexing پنهان کنیم برای مثال با اجرای دستور زیر، اسکیمای ALI در exclusion list قرار خواهد گرفت:

SQL> EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_SCHEMA', 'ALI', FALSE);

 

اعمال auditing برای همه editionهای یک object

قابلیت unified auditing در اوراکل نسخه 21c، عملیات auditing را برای همه editionهای یک object امکان پذیر می سازد و حتی اگر در آینده edition جدیدی ایجاد شود، auditing در سطح edition جدید هم اعمال خواهد شد. برای مثال، ویوی vw_IRIR را در دو edition مختلف ایجاد می کنیم:

SQL> alter session set edition=IR_EDITION1;

Session altered

SQL> CREATE EDITIONING VIEW vw_IRIR AS select * from usef.tbl1;

View created

SQL> alter session set edition=IR_EDITION2;

Session altered

SQL> CREATE OR REPLACE EDITIONING VIEW vw_IRIR AS select owner from usef.tbl1;

View created

SQL> select object_name, edition_name from user_objects_ae where object_name='VW_IRIR';

OBJECT_NAM EDITION_NAME

---------- --------------

VW_IRIR    IR_EDITION1

VW_IRIR    IR_EDITION2

(بیشتر…)

تغییرات GIMR Database در اوراکل کلاستر 21c

GIMR یا همان Grid Infrastructure Management Repository در اوراکل 12c ارائه شد و هدف اوراکل از ارائه GIMR، ثبت وقایع و رخدادهای مربوط به کلاستر می باشد به طور دقیق تر، GIMR قرار است Cluster Health Monitor را در دیتابیسش ثبت کند. این دیتابیس حدودا 20 جدول دارد که لیست جداول آن را می توان به روش زیر مشاهده کرد:

[grid@RAC1 ~]$ export ORACLE_SID=-MGMTDB
[grid@RAC1 ~]$ sqlplus "/as sysdba"
SQL> alter session set container=GIMR_DSCREP_10;
Session altered.
SQL>  select table_name from dba_tables where owner='CHM' order by table_name;
TABLE_NAME
--------------------------------------------------------------------------------
CATCHMUTILPLS_PARTITION_TMP_TBL
CHMOS_ACTIVE_CONFIG_INT_TBL
CHMOS_ADVM_INT_TBL
…
16 rows selected.

(بیشتر…)

Automatic Index Optimization در اوراکل 21c

همانطور که می دانید، از طریق قابلیت (Automatic Data Optimization (ADO می توان سیاستهایی را بر اساس آمارهای دستیابی و اصلاح segmentها، برای کاهش فضای مصرفی و بهبود کارایی اعمال کرد برای مثال با فشرده سازی جداولی که کمتر مورد اصلاح و یا دستیابی قرار می گیرند و نیز انتقال segmentهای کم طرفدار به دیسک با هزینه کمتر، می توان قدمهایی را در زمینه بهینه سازی برداشت.

ADO در اوراکل نسخه 12c ارائه شد و بعدا در هر کدام از نسخه ها، قابلیتهای جدیدی به آن اضافه شد که در این مطلب، به قابلیت جدید اوراکل نسخه 21c در این زمینه خواهیم پرداخت.

در این نسخه می توان با کمک ADO برای ایندکسها پالیسیهایی را وضع کرد مثلا می توان بر اساس تاریخ آخرین زمان دستیابی و اصلاح، در سه سطح فشرده سازی(compressing)، بازسازی(rebuilding) و کاهش حجم(shrinking) قوانینی را اعمال نمود.

(بیشتر…)

دیتاتایپ JSON در اوراکل 21c

همانطور که می دانید از نسخه 12cR1، دیتابیس اوراکل از JSON پشتیبانی می کند به این معنی که با ارائه چندین تابع، امکان انجام عملیاتی چون اجرای query، ایجاد index و ایجاد view را بر روی فیلدهای JSON Document فراهم می کند.

البته در این نسخه ها(تا قبل از اوراکل 21)، Data Type جدیدی برای JSON معرفی نشده و JSON Documentها باید در نوع داده VARCHAR2، CLOB و یا BLOB ذخیره شوند(نوع داده NCLOB و NVARCHAR2 را هم باید به این مجموعه اضافه کرد) که معمولا نوع داده BLOB برای این کار توصیه می شود(مطالعه مطلب “JSON و دیتابیس اوراکل” پیشنهاد می شود).

SQL> create table tbl_JSON_12c (id number,ettelaat varchar2(4000)  constraint jc1 check (ettelaat is json) );

SQL> insert into tbl_JSON_12c values(2,'{“First_Name”:”Vahid”,”Last_Name”:”Usefzadeh”,”Contact”:{“Email”:”vahidusefzadeh@gmail.com”,”Phone”:”091111111117″}}’);
1 row inserted

SQL> select t.ETTELAAT.Last_Name,t.ETTELAAT.Contact.Email from tbl_JSON_12c t;
LAST_NAME         CONTACT
————–  —————————-
Usefzadeh        vahidusefzadeh@gmail.com

اوراکل در نسخه 21c، نوع داده JSON را معرفی کرده است:

SQL> create table tbl_JSON_21c (id number, ettelaat  json) ;
Table created.

SQL> insert into usef.tbl_JSON_21c values(2,'{"First_Name":"Vahid","Last_Name":"Usefzadeh","Contact":{"Email":"vahidusefzadeh@gmail.com","Phone":"091111111117"}}');
1 row created.

(بیشتر…)

اوراکل21c – بروزرسانی اطلاعات JSON با کمک تابع JSON_TRANSFORM

تابع Json_Transform که در اوراکل نسخه 21c ارائه شد، امکان انجام تغییرات در JSON documentها را فراهم می سازد. این تابع عملکری مشابه با تابع JSON_MERGEPATCH دارد البته با قابلیتهای بسیار بیشتر.

با استفاده از تابع Json_Transform می توان آیتمهای موجود در JSON documentها را UPDATE(SET)، REMOVE و RENAME کرد و یا item جدیدی به آن اضافه نمود.

این تابع می تواند در دستور select و update استفاده شود که استفاده از آن در دستور select صرفا می تواند در خروجی دستور تغییر ایجاد کند و برای بروزرسانی پایدار باید از دستور update استفاده شود.

در ادامه با توضیح عملگرهای SET، INSERT، REMOVE و RENAME بیشتر با تابع Json_Transform آشنا خواهیم شد.

(بیشتر…)

SQL Macros در اوراکل 21c

همانطور که می دانید فراخوانی تابع در یک کوئری، context switch بین SQL engine و PL/SQL engine را در پی دارد این context switch به لحاظ پرفورمنسی اثر منفی را به دنبال خواهد داشت. برای مثال، دو دستور زیر خروجی یکسانی دارند اما مدت زمان اجرای آنها بسیار متفاوت است.

اجرای دستور بدون استفاده از function:

SQL> select sum(sal) from(select salary+60 as sal from person);

  SUM(SAL)

———-

8891924480

Elapsed: 00:00:00.81

اجرای دستور با استفاده از function:

SQL> select sum(sal) from(select sal_func(salary) as sal from person);

  SUM(SAL)

———-

8891924480

Elapsed: 00:00:10.91

(بیشتر…)

اوراکل 21c- قابلیت In-Memory Hybrid Scan

زمانی که INMEMORY را در سطح column فعال می کنیم، صرفا پرس و جوهایی که به ستونهای INMEMORY جدول رجوع می کنند، از In-Memory scan بهره خواهند برد و اگر در یک پرس و جو به هیچ یک از ستونهای In-Memory رجوع نشود، اوراکل بصورت ROW-STORE access به این پرس و جو پاسخ خواهد داد.

حالت دیگری هم در اینجا قابل تصور است! اگر پرس و جویی به صورت ترکیبی،به ستونهای INMEMORY و NO INMEMORY رجوع کند، اوراکل چه نوع scanای را انتخاب خواهد کرد؟

تا قبل از نسخه 21c، اوراکل برای این دسته از پرس و جوها، به In-Memory رجوع نمی کرد و با رجوع به buffer cache و بصورت row-store access به این پرس و جوها پاسخ می داد.

اما در اوراکل 21c، قابلیت جدیدی به نام In-Memory Hybrid Scan ارائه شد که بر اساس آن، اگر برای همه ستونهایی که در قسمت where clause دستور استفاده شدند، خصیصه INMEMORY فعال شده باشد(و علاوه بر آن، ستون NO INMEMORY در select list موجود باشد) اوراکل میتواند به صورت ترکیبی از هر دو scan( یعنی row store scan و in-memory scan) استفاده کند. به این شیوه از scan، اصطلاحا In-Memory Hybrid Scan گفته می شود.

(بیشتر…)