اوراکل 19c و 23ai – گزارش وضعیت پیشرفت RMAN

هنگام انجام عملیات بازیابی (restore) پایگاه داده اوراکل با استفاده از ابزار RMAN، اوراکل از طریق ویوی v$session_longops اطلاعاتی از میزان پیشرفت هر عملیات ارائه می‌دهد. این قابلیت به مدیران پایگاه داده (DBAها) امکان می‌دهد که فرآیند بازیابی را پایش کرده و مدت زمان تقریبی آن را تخمین بزنند.

برای مثال:

set linesize 1000
col opname format a40
SELECT opname,
       totalwork,
       sofar AS procd_blocks,
       TIME_REMAINING,
       ROUND(sofar/totalwork*100,2) AS pct_done
FROM   v$session_longops
WHERE  opname LIKE 'RMAN%'
AND    totalwork > 0
AND    sofar <> totalwork;
OPNAME                                    TOTALWORK PROCD_BLOCKS TIME_REMAINING   PCT_DONE
---------------------------------------- ---------- ------------ -------------- ----------
RMAN: full datafile restore                67490026      3147741          26123       4.66

در این مثال، اوراکل تخمین زده است که عملیات بازیابی بیش از 26,000 ثانیه طول خواهد کشید و تنها 4.66 درصد از عملیات مربوط به یک channel تا این لحظه انجام شده است.

در نسخه‌های 19c (احتمالاً از 19.28) و 23ai، در هنگام عملیات بازیابی، اگر عملیات یک channel بیش از 900 ثانیه طول بکشد، اوراکل به‌طور خودکار گزارش پیشرفت I/O را فعال می‌کند و پیام زیر را نمایش می دهد:

I/O statistics progress reporting enabled with interval 900 seconds

(بیشتر…)

اوراکل (23.9)23ai – عبارت GROUP BY ALL

اوراکل 23ai چندین قابلیت جدید به عبارت GROUP BY اضافه کرده است که باعث ساده‌تر شدن نگارش کوئری و بهبود خوانایی آن می‌شود، به‌ویژه زمانی که داده‌ها بر اساس چند ستون گروه‌بندی می‌شوند.

از این نسخه، عبارت GROUP BY از بهبودهای زیر پشتیبانی می‌کند:

این قابلیت‌ها باعث کاهش تکرار و کوتاه‌تر شدن دستورات SQL شده و نگهداری آن‌ها را آسان‌تر می‌کند.

در بروزرسانی نسخه 23.9، اوراکل قابلیت دیگری معرفی کرده است: عبارت GROUP BY ALL.

(بیشتر…)

اوراکل 23ai(23.9) – دستور INSERT INTO SET و INSERT INTO BY NAME

اگر با پایگاه‌داده اوراکل آشنایی داشته باشید، حتماً دستور ساده‌ی INSERT INTO را می‌شناسید. اجازه دهید به‌طور خلاصه شکل سنتی استفاده از این دستور را با چند مثال ساده یادآوری کنم:

SQL> CREATE TABLE vahid.tbl (
      id NUMBER,
      name VARCHAR2(100),
      last_name VARCHAR2(100)
    );
Table created.

SQL> INSERT INTO vahid.tbl VALUES (1, 'VAHID', 'YOUSEFZADEH');
1 row created.

SQL> INSERT INTO vahid.tbl (name, last_name) VALUES ('VAHID', 'YOUSEFZADEH');
1 row created.

وقتی با جدول‌هایی کار می‌کنیم که ستون‌های زیادی دارند، این syntax(نحو) می‌تواند خواندن کد را سخت کند، چرا که همیشه واضح نیست هر مقدار به کدام ستون تعلق دارد.

اوراکل 23ai (23.9) سینتکس(نحو) جدیدی را معرفی کرده که دستور INSERT INTO را خواناتر می‌کند. این کار با استفاده از عبارت SET(شبیه آنچه در دستور UPDATE استفاده می‌شود)، قابل اجراست. مثال زیر را ببینید.

(بیشتر…)

چهار قابلیت 23ai که اکنون در 19c (19.28) پشتیبانی می‌شوند.

با آخرین بروزرسانی نسخه Oracle Database 19c یعنی Release Update (RU) 19.28، چندین قابلیت کلیدی که پیش‌تر فقط در Oracle 23ai در دسترس بودند، اکنون پشتیبانی می‌شوند. در ادامه، مروری کوتاه بر این چهار قابلیت خواهیم داشت.

بسته DBMS_DEVELOPER
بسته DBMS_DEVELOPER امکان دسترسی سریع و بهینه به متادیتای اشیاء دیتابیس را برای توسعه‌دهندگان فراهم می‌کند. این بسته متادیتا را به صورت JSON بازمی‌گرداند که ادغام آن با برنامه‌ها و سرویس‌ها را تسهیل می‌کند.

IF [NOT] EXISTS Syntax
دستورات ایجاد، تغییر و حذف اشیاء اکنون از سینتکس IF [NOT] EXISTS پشتیبانی می‌کنند تا مدیریت خطاها بهبود یابد. به عبارتی دیگر، این قابلیت از بروز خطاهای ناشی از وجود یا عدم وجود اشیاء جلوگیری می‌کند.

Schema Annotations
قابلیت Schema Annotations به ما امکان می‌دهد توضیحاتی را به صورت دسته‌بندی شده و بر اساس name و value برای اشیاء دیتابیس ثبت و بازیابی کنیم. این قابلیت به توسعه‌دهندگان کمک می‌کند اطلاعات سفارشی مربوط به منطق کسب‌وکار یا رابط کاربری را در دیتابیس ذخیره کنند.

SQL Diagnostic Report
تابع REPORT_SQL در بسته DBMS_SQLDIAG گزارش‌های جامع و تشخیصی در قالب فایل فشرده HTML برای دستورات SQL تولید می‌کند. این گزارش شامل جزئیات مهمی مانند تاریخچه برنامه اجرا، پارامترهای غیر پیش‌فرض و آمار بهینه‌ساز است که به تشخیص مشکلات عملکرد کمک می‌کند.

 

اوراکل 23ai(23.7) – قابلیت Materialized Expression Columns

همانطور که می دانید قابلیت Virtual Column در نسخه 11.1 معرفی شده است که به کاربران این امکان را می‌دهد تا مقادیر ستون را بدون ذخیره فیزیکی آن‌ها در دیتابیس محاسبه کنند. این ستون‌ها بر اساس یک عبارت (Expression) تعریف می‌شوند که این عبارت می تواند مقادیر ثابت، توابع SQL، ستون‌هایی از همان جدول و … باشد و مقادیرشان در زمان اجرا (On-the-Fly) محاسبه می‌شود. بنابرین این ستونها فضایی را اشغال نمی کنند.

SQL> create table TBL_EMP_VIRTUAL_COL (id number, PRE_TAX_SAL number, NET_SAL NUMBER GENERATED ALWAYS AS (PRE_TAX_SAL* 0.10));
Table created
SQL> insert into TBL_EMP_VIRTUAL_COL(id, PRE_TAX_SAL) values(1,6523);
1 row inserted

SQL> select * from TBL_EMP_VIRTUAL_COL;
        ID PRE_TAX_SAL    NET_SAL
---------- ----------- ----------
         1        6523      652.3

همانطور که مشاهده می‌کنید، مقدار ستون NET_SAL به صورت لحظه‌ای و در زمان اجرا محاسبه شده است. 

در نسخه 23ai (نسخه 23.7)، اوراکل ویژگی جدیدی به نام Materialized Expression Columns معرفی کرده که مشابه ستون‌های مجازی است، با این تفاوت که مقادیر ستونها در هنگام اجرای دستورات DMLای مانند insert، update و delete محاسبه و ذخیره می‌شود.

(بیشتر…)

اوراکل 23ai – تبدیل LONG به LOB در زمان impdp

همانطور که می دانید، نوع داده LONG در اوراکل محدودیت‌های زیادی دارد، مانند محدودیت در تعداد ستون‌ها، محدودیت طول و … با وجود این محدودیت‌ها، اوراکل هنوز بعضی از ستون‌های دیتا دیکشنری را به نوع داده LOB تغییر نداده است. هرچند، اوراکل قابلیت جدیدی را در نسخه 12.2 با عنوان “ستونهای *_VC در ویوهای data dictionary” در این زمینه معرفی کرده است.

در برخی دیتابیسها، بسیاری از جداول هنوز از نوع داده LONG هستند و تبدیل آن‌ها به LOB می‌تواند چالش‌برانگیز باشد. اوراکل در نسخه 23ai قابلیت جدیدی را در این زمینه ارائه کرده است. در این نسخه، می توان نوع داده LONG را هنگام اجرای دستور impdp به LOB تبدیل کنند.

اوراکل یک عبارت جدید به پارامتر TRANSFORM به نام LONG_TO_LOB اضافه کرده است. برای انجام تبدیل در حین وارد کردن داده‌ها، کافیست این پارامتر را روی Y تنظیم کنید (به عنوان مثال: TRANSFORM=LONG_TO_LOB:Y).

در زیر نحوه استفاده از این ویژگی را توضیح می‌دهم.

(بیشتر…)

نصب Grid Infrastructure 19.25 روی Oracle Linux 9.5 با ASMLIB 3

همان‌طور که می‌دانید، در نسخه Oracle Linux 8.7 برای نصب ASMLIB ناچار بودیم نسخه کرنل را تنزل دهیم، زیرا امکان نصب ASMLIB روی آخرین نسخه کرنل وجود نداشت. اخیراً، Oracle نسخه ASMLIB 3 را ارائه کرده است که امکان نصب آن بر روی Oracle Linux 8 و 9 بدون هیچ محدودیتی فراهم شده است. این نسخه همچنین قابلیت‌های جدیدی دارد که در مستندات دیگری به آن‌ها خواهیم پرداخت.

در این مقاله، قصد داریم نحوه نصب Grid Infrastructure 19.25 روی Oracle Linux 9.5 با ASMLIB 3 را مستند کنیم.

(بیشتر…)

قابلیت Sessionless Transaction در اوراکل 23ai(23.6)

در پایگاه داده اوراکل، transaction به طور سنتی به session وابسته است و زمانی که یک session بسته می شود، transaction مرتبط با آن session هم خاتمه می‌یابد. از اوراکل 23ai (از 23.6 به بعد)، ویژگی Sessionless Transactions این امکان را فراهم می‌کند که این وابستگی بین session و transaction از بین برود و تراکنشها این امکان را داشته باشند که به حالت تعلیق درآیند و در session دیگری از سر گرفته شوند. 

به عبارتی دیگر، در قابلیت Sessionless Transactions، به هر تراکنش یک شناسه منحصربه‌فرد اختصاص داده می‌شود و حتی اگر sessionای که تراکنش را شروع کرده، بسته شود، تراکنش در پایگاه داده باقی می‌ماند و session دیگری میتواند آن را با استفاده از “شناسه منحصربه‌فرد آن” از سر بگیرد و ادامه دهد.

(بیشتر…)

DBMS_DEVELOPER در اوراکل 23ai(23.7)

در پایگاه داده اوراکل، برای استخراج متادیتای اشیا، می‌توانیم از پکیج DBMS_METADATA استفاده کنیم. این پکیج شامل بسیاری از توابع و روال‌های مفید است، مانند GET_DDL، GET_DEPENDENT_DDL و SET_TRANSFORM_PARAM. علاوه بر این، برخی ابزارها مانند SQLcl روش‌های خاص خود را برای استخراج متادیتا ارائه می‌دهند—به عنوان مثال، دستور DDL در ابزار SQLcl.

از نسخه 23.7 به بعد، اوراکل روش دیگری برای استخراج متادیتای اشیا معرفی کرده است. در این نسخه، می‌توانیم از DBMS_DEVELOPER در کنار DBMS_METADATA استفاده کنیم. DBMS_DEVELOPER کاربرپسند است و خروجی را در قالب JSON تولید می‌کند. این پکیج در حال حاضر تنها از TABLE، INDEX و VIEW پشتیبانی می‌کند، در حالی که DBMS_METADATA بسیار قدرتمندتر است و تقریباً از همه انواع اشیا پشتیبانی می‌کند.

DBMS_DEVELOPER تنها یک تابع به نام GET_METADATA دارد:

(بیشتر…)

Shrinking Smallfile Tablespaces in Oracle 23.7

As you may know, starting from Oracle 23ai, we can shrink permanent tablespaces. However, that was limited to bigfile tablespaces, and shrinking smallfile tablespaces was not possible. Although, by default, tablespaces are created as bigfile tablespace.

Now, in Oracle 23.7, shrinking smallfile tablespaces is possible and we can shrink these tablespaces using the dbms_space.tablespace_shrink procedure. This procedure executes familiar commands such as ‘alter table move online’ and ‘alter index rebuild’ to shrink smallfile tablespaces.

PROCEDURE SHRINK_TABLESPACE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 TS_NAME                        VARCHAR2                IN
 SHRINK_MODE                    NUMBER                  IN     DEFAULT
 TARGET_SIZE                    NUMBER                  IN     DEFAULT
 SHRINK_RESULT                  CLOB                    OUT
 ITERATIONS                     NUMBER                  IN     DEFAULT  

(بیشتر…)