نوع داده Boolean در اوراکل 23ai

اوراکل در نسخه 23c دیتا تایپ Boolean را در SQL معرفی کرده است(البته این نوع داده قبلا در PLSQL وجود داشته است) و با این قابلیت، در هنگام ساخت جدول می توان نوع داده ستونها را به Boolean تنظیم کرد.

SQL> CREATE TABLE jadval1 (id NUMBER, is_accept BOOLEAN);
Table created

از کلمه BOOL هم می توان به جای Boolean استفاده کرد.

SQL> CREATE TABLE jadval1 (id NUMBER, is_accept BOOL);
Table created

برای ستونهای از نوع Boolean میتوان مقدار پیش فرض تنظیم نمود:

SQL> CREATE TABLE jadval1 (id NUMBER, is_accept BOOL DEFAULT FALSE);
Table created

برای مقداردهی ستون is_accept می توانیم از سه کلمه کلیدی TRUE، FALSE و NULL استفاده کنیم:

SQL> insert into jadval1 values(1,true);
1 row inserted
SQL> insert into jadval1 values(2,null);
1 row inserted
SQL> insert into jadval1 values(3,false);
1 row inserted

SQL> select * from jadval1;
        ID    IS_ACCEPT
---------- ----------
         1          1
         2 
         3          0

(بیشتر…)

اوراکل 23ai- تنظیم اولویت برای PDB

سوال: اگر CDBای بیش از یک PDB داشته باشد، چگونه می توان در مورد ترتیب open شدن این PDBها اعمال نظر کرد؟

تا قبل از اوراکل 23c راهکاری در این زمینه وجود نداشت و با اجرای دستور startup، تضمینی در مورد ترتیب باز شدن این PDBها وجود نداشت(معمولا بر اساس شماره container این PDBها باز می شدند). اما در نسخه 23c قابلیت جدیدی ارائه شد و بر اساس آن می توان برای هر PDB یک PRIORITY تنظیم کرد تا از طریق آن، ترتیب انجام عملیاتهایی نظیر open کردن PDBء، upgrade و یا restoration را کنترل کرد.

ساختار کلی دستور را در قسمت زیر می بینید:

ALTER PLUGGABLE DATABASE <PDB name> PRIORITY <value>

در این دستور، نام PDB الزامی است و PRIORITY می تواند مقداری بین 1 تا 4096 بگیرد که هر چه این عدد کمتر باشد، PDB اولویت بیشتری دارد به طور مثال، PDB با اولویت 1 نسبت به PDB با اولویت 2 زودتر open خواهد شد.

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEHRANPDB                      READ WRITE NO
         4 BABOLPDB                       READ WRITE NO
         5 VARAMINPDB                     READ WRITE NO
         6 ABADANPDB                      READ WRITE NO
SQL> ALTER PLUGGABLE DATABASE babolpdb PRIORITY 1;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE ABADANPDB PRIORITY 2;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE VARAMINPDB PRIORITY 3;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE TEHRANPDB PRIORITY 4;
Pluggable database altered.

با restart کردن دیتابیس خواهیم دید که دیتابیسها با ترتیب اعلام شده باز شده اند:

SQL> startup force;
SQL> select OPEN_TIME,NAME,PRIORITY from v$pdbs order by 1;
OPEN_TIME                                NAME         PRIORITY
---------------------------------------- ---------- ----------
10-MAY-23 05.52.43.190 PM +04:30         PDB$SEED            1
10-MAY-23 05.52.43.812 PM +04:30         BABOLPDB            1
10-MAY-23 05.52.44.889 PM +04:30         ABADANPDB           2
10-MAY-23 05.52.45.929 PM +04:30         VARAMINPDB          3
10-MAY-23 05.52.47.102 PM +04:30         TEHRANPDB           4

ترتیب باز شدن PDB در ALERT LOG هم ثبت شده است:

PDB$SEED(2):Opening pdb with Resource Manager plan: DEFAULT_PLAN
BABOLPDB(4):SUPLOG: Initialize PDB SUPLOG SGA, old value 0x0, new value 0x18
2023-05-10T17:52:44.739491+04:30
ABADANPDB(6):SUPLOG: Initialize PDB SUPLOG SGA, old value 0x0, new value 0x18
2023-05-10T17:52:45.784421+04:30
VARAMINPDB(5):SUPLOG: Initialize PDB SUPLOG SGA, old value 0x0, new value 0x18
2023-05-10T17:52:46.828984+04:30
TEHRANPDB(3):SUPLOG: Initialize PDB SUPLOG SGA, old value 0x0, new value 0x18

*همراه با اوراکل 12cR2، اولویت PDBها در زمینه upgrade از طریق دستور زیر قابل تنظیم است:

SQL*Plus: Release 12.0.0.0.0 - Production on Wed May 10 16:56:59 2023
SQL> ALTER PLUGGABLE DATABASE babolpdb UPGRADE PRIORITY 5;
Pluggable database altered.

 

قابلیت Annotation در اوراکل 23ai

در نسخه های قبل از 23c، از طریق قابلیت comment می توانیم برای objectهایی نظیر table ، table column، materialized view، view کامنت و یا توضیحاتی را ثبت کنیم. comment گذاری با محدودیتهایی هم همراه است برای مثال امکان دسته بندی کامنتها وجود ندارد و به طور کلی همه توضیحات در یک متن طولانی ثبت خواهند شد.

در اوراکل 23c قابلیت Annotation که شباهتهای زیادی به قابلیت comment دارد، ارائه شد که بر اساس آن می توانیم برای objectهایی نظیر table, view, materialized view, index و column توضیحاتی را به صورت دسته بندی شده و بر اساس name و value ثبت کنیم.

 برای هر کدام از این objectها می توان تعداد زیادی Annotation_name و Annotation_value تعریف کرد و هر Annotation باید حداقل شامل یک Annotation_name باشد ولی الزامی به تعریف Annotation_value وجود ندارد.

*در نحوه نامگذاری Annotation_nameها محدودیتی وجود ندارد.

SQL> create table STD 
(
id number  annotations (DESCRIPTION1 'student ID',Description2 ‘coooode daneshjoiieee!!’),
name varchar2(20)  annotations(Description ‘Full Name for students’)
)
annotations (DESCRIPTION ‘Student Table’);
Table created

(بیشتر…)

اوراکل 23ai- قابلیت Hybrid read-only mode برای pluggable databaseها

در اوراکل 23cء، open mode جدیدی به نام Hybrid read-only برای pluggable databaseها اضافه شد که در صورت قرار دادن PDB در این حالت، local userها تنها می توانند به صورت Read Only به دیتابیس وصل شوند البته در این open mode محدودیتی برای common userها ایجاد نخواهد شد و این دسته از کاربران امکان write خواهند داشت:

SQL> ALTER PLUGGABLE DATABASE TEHRANPDB OPEN HYBRID READ ONLY;
Pluggable database altered.
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TEHRANPDB                      READ WRITE NO

(بیشتر…)

Schema Privilege در اوراکل 23ai

تا قبل از اوراکل23cء، privilegeها به سه نوع object، system و administrative قابل تقسیم بودند و برای آنکه کاربری صرفا به اشیاء یک اسکیما دسترسی داشته باشد به ناچار می بایست از object privilegeها استفاده کرد که این محدودیت را قبلا در مستندی شرح داده ایم.

رجوع شود به : اهدای مجوز در سطح اسکیما در اوراکل و پستگرس

در نسخه 23c قابلیت جدیدی در این زمینه ایجاد شد و اوراکل نوع دیگری از privilege به نام schema privilege را ارائه کرد که بر اساس آن می توان دسترسی به تمامی اشیاء{موجود و آینده} یک اسکیما را صرفا با اجرای یک دستور به یک کاربر(و یا role) اهدا کرد و یا به کاربر این امکان را داد تا برای اسکیما شی جدیدی بسازد.

schema privilege با کمک system privilegeها کار می کند مثلا می توانیم دسترسی select any table که یک system Privilege محسوب می شود را بر روی یک اسکیما به یک کاربر اهدا کنیم. بدیهی است که schema privilege به نسبت system privilege از دادن دسترسی های اضافه جلوگیری خواهد.

(بیشتر…)

Auditing در سطح ستون – اوراکل 23ai

Unified Auditing در نسخه 23c به صورت پیش فرض فعال است و در این نسخه به آن قابلیتهای جدیدی هم اضافه شده است. یکی از این قابلیتها، امکان Auditing در سطح Column است با کمک این فیچر می توانیم صرفا ستون(یا ستونهای) به خصوصی از یک Table یا View را Audit کنیم.

برای مثال قصد داریم هر selectای بر روی ستون mobile را Audit کنیم، برای این کار Audit Policy زیر را ایجاد می کنیم:

SQL> CREATE AUDIT POLICY Col_pol_Mobile ACTIONS select(mobile) ON usef.person;
Audit policy created.

Policy ایجاد شده را فعال می کنیم:

SQL> AUDIT POLICY Col_Pol_Mobile;
Audit succeeded.

(بیشتر…)

نصب Oracle GoldenGate 21c با معماری Microservice

در این مستند قصد داریم به نحوه نصب Oracle GoldenGate 21c با معماری Microservice بپردازیم. قبل از نصب باید در نظر داشته باشیم که برای استفاده از نسخه مایکروسرویس گلدن گیت، می توانیم این نرم افزار را در سمت source و یا target نصب کنیم و نصب آن در هر دو طرف replication الزامی نیست همچنین source و یا target بودن سرور تاثیری در مراحل نصب نخواهد داشت.

قبل از نصب گلدن گیت، مسیری که قرار است نرم افزار در آن نصب شود را ایجاد می کنیم(OGG_HOME):

[oracle@target ~]$ mkdir /oracle/OGGMA21c

ابزار runInstaller را برای نصب نرم افزار اجرا می کنیم:

[oracle@target source]$ unzip 213000_fbo_ggs_Linux_x64_Oracle_services_shiphome.zip
[oracle@target ~]$ cd /source/fbo_ggs_Linux_x64_Oracle_services_shiphome/Disk1
[oracle@target Disk1]$ ./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB.   Actual 70018 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 1023 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2023-03-09_10-45-39AM. Please wait ...

بر خلاف نسخه های قبلی، در نسخه 21c نیازی به انتخاب نسخه دیتابیس در طول نصب golden gate وجود ندارد:

(بیشتر…)

کاهش زمان ساخت Primary/Foreign Key

استفاده از عبارت parallel در زمان ساخت primary key منجر به انجام عملیات به صورت همروند نخواهد شد. دستور زیر را مشاهده کنید:

SQL> alter table all_table add constraint pk_1 primary key (id) parallel 10;
Table altered.
Elapsed: 00:00:12.36

با فعال کردن trace خواهیم دید که اوراکل برای ساخت ایندکس متناظر با این PK، از عبارت noparallel استفاده کرده و عبارت parallel تاثیر مثبتی در زمان ایجاد این Primary Key نداشته است:

PARSING IN CURSOR #140396268419760 len=72 dep=1 uid=109 oct=9 lid=109 tim=29571676036680 hv=2994446983 ad='b9930010' sqlid='c1ddax6t7r8n7'
CREATE UNIQUE INDEX "USEF"."PK_1" on "USEF"."ALL_TABLE"("ID") NOPARALLEL

بنابرین زمان اجرای دستور فوق با دستور زیر برابر خواهد بود و اجرای هر دو دستور به 13 ثانیه زمان نیاز دارد:

SQL> alter table all_table add constraint pk_1 primary key (id) noparallel;
Table altered.
Elapsed: 00:00:12.95

(بیشتر…)

اهدای مجوز به فانکشن، پکیج و پروسیجر

زمانی که یک program unit(فانکشن، پکیج، پروسیجر) به صورت invoker right ایجاد می شود، کاربر صدا زننده برنامه، با مجوز خودش این برنامه را اجرا خواهد کرد بنابرین اگر جدولی در برنامه موجود باشد که این کاربر به آن دسترسی نداشته باشد، کارش با خطا متوقف خواهد شد(بررسی Invoker’s Rights و Definer’s Rights). برای مثال، تابع زیر را در نظر بگیرید:

SQL> CREATE FUNCTION sys.Tabe(name_malek in varchar2,name_jadval in varchar2)
   RETURN VARCHAR2
   AUTHID CURRENT_USER
AS
V_bytes varchar2(1000);
BEGIN
  select bytes into V_bytes from dba_segments where owner=name_malek and segment_name=name_jadval;
   RETURN V_bytes;
END;
/
Function created.

این تابع که با یوزر sys ایجاد شده، قرار است نام segment را دریافت و حجم آن را بر اساس بایت برگرداند. عبارت AUTHID CURRENT_USER بیانگر invoker right است.

کاربری با نام vahid را با حداقل دسترسی ایجاد کرده و بررسی می کنیم که آیا این کاربر می تواند تابع فوق را اجرا کند؟

SQL> create user vahid  identified by a;
User created.
SQL> grant create session to vahid; 
Grant succeeded.

(بیشتر…)

نکاتی در مورد Materialized View و NoLogging

بروزرسانی Materialized Viewهای حجیم آن هم به صورت complete می تواند DBA را در جنبه های مختلفی به چالش بکشاند به ویژه آنکه دیتابیس در مود آرشیو قرار داشته باشد چرا که در این صورت، بروزرسانی MV منجر به ایجاد حجم زیادی از آرشیولاگ خواهد شد. البته اثرات منفی این مسئله، صرفا به فضای مصرفی redoها خلاصه نمی شود و از لحاظ پرفورمنسی هم می تواند بر روی عملکرد دیتابیس اثر منفی بگذارد.

در این متن بررسی می کنیم که غیرفعال کردن Logging در سطوح object، tablespace و database چه اثراتی را بر روی عملیات ساخت و بروزرسانی Materialized Viewها به همراه خواهد داشت(مطالعه مطلب “تاثیر عملیات NOLOGGING در دیتاگارد”  پیشنهاد می شود).

(بیشتر…)