
تا قبل از ادیشن 26ai، کوئریهایی که شامل bind variable بودند، نمیتوانستند از قابلیت query rewrite با استفاده از materialized view (MV) بهره ببرند و اوراکل مجبور بود دادهها را مستقیماً از جدولهای پایه بخواند، که باعث از دست رفتن مزایای کاراییِ دادههای پیشتجمیعشده (pre-aggregated data) میشد.از Oracle AI Database 26ai به بعد، این محدودیت حذف شده است و این بهبود به optimizer اجازه میدهد مقدار واقعی bind variable را در زمان اجرا تحلیل کرده و تصمیم بگیرد که آیا کوئری میتواند با استفاده از MV ...
ادامه مطلب
در این مستند قصد داریم نحوه نصب Oracle AI Database 26ai را روی سیستم عامل Oracle Linux 9.5 شرح دهیم. در گام اول باید مقدمات نصب اوراکل را در محیط سیستم عامل فراهم کنیم.با طی هفت مرحله زیر، این کار را در محیط اوراکل لینوکس ادیشن 9.5 انجام خواهیم داد.توجه:حداقل ادیشن سیستم عامل لینوکس برای نصب اوراکل 26ai برابر Oracle Linux 8.8 است(برای 23.5 به بعد) و برای نسخه جدید 9 هم می توان 26ai را روی Oracle Linux 9.2 به بعد نصب کرد. مرحله اول: در گام اول، نام هاست را از localhost به OL95 تغییر می دهیم:[root...
ادامه مطلب
از نسخه جدید Oracle Database 12.2 به بعد، تولید گزارشهای AWR روی Active Data Guard (ADG) با استفاده از Remote Management Framework (RMF) قابلیتپذیر شد. در این مدل، دادههای AWR باید بهصورت دستی از پایگاه داده standby به پایگاه داده primary منتقل میشدند. نقطه ضعف اساسی این روش آن بود که به مراحل پیکربندی متعددی نیاز داشت و عملا تحلیل AWR روی پایگاهدادههای physical standby از نظر عملیاتی برای DBAها چالشبرانگیز بود.با ارائه Oracle AI Database 26ai، پشتیبانی AWR برای پایگاهدادههای Active Da...
ادامه مطلب
همانطور که می دانید، برای اجرای دستورات DMLای، رکوردها ابتدا قفل (Lock) میشوند و اگر Sessionای تلاش کند همان رکورد را تغییر دهد، باید تا زمان آزاد شدن قفل منتظر بماند و به صورت پیش فرض، این زمان انتظار نامحدود است. البته در ادیشنهای پیشین پایگاه داده اوراکل، عبارت WAIT همراه با دستور SELECT FOR UPDATE می توانست محدودیتی را در این زمینه ایجاد کند و به کاربران این قابلیت را میداد که مشخص کنند پیش از Rollback شدن دستور، چه مدت برای آزاد شدن قفل منتظر بمانند.برای مثال:Coected to Oracle Database...
ادامه مطلب
اگر با پایگاهداده اوراکل آشنایی داشته باشید، حتماً دستور سادهی 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'...
ادامه مطلب
اوراکل 23ai چندین قابلیت جدید به عبارت GROUP BY اضافه کرده است که باعث سادهتر شدن نگارش کوئری و بهبود خوانایی آن میشود، بهویژه زمانی که دادهها بر اساس چند ستون گروهبندی میشوند. از این نسخه، عبارت GROUP BY از بهبودهای زیر پشتیبانی میکند: استفاده از نام مستعار ستون در GROUP BY: میتوانید مستعار (Alias) ستونهایی که در بخش SELECT تعریف کردهاید را...
ادامه مطلب
هنگام انجام عملیات بازیابی (restore) پایگاه داده اوراکل با استفاده از ابزار RMAN، اوراکل از طریق ویوی v$session_longops اطلاعاتی از میزان پیشرفت هر عملیات ارائه میدهد. این قابلیت به مدیران پایگاه داده (DBAها) امکان میدهد که فرآیند بازیابی را پایش کرده و مدت زمان تقریبی آن را تخمین بزنند. set linesize 1000 col opname format a40 SELECT opname, t...
ادامه مطلب
پیش از اوراکل 23ai و 19.28، اسکریپت awrsqrpt.sql یکی از روشهای تحلیل اجراهای قبلی یک کوئری بود و از این طریق می توانستیم آمارهای مربوط به میزان استفاده از CPU، ورودی/خروجی (I/O) ، زمان سپری شده(elapsed time) و … را در یک بازه زمانی مشخص مشاهده کنیم. با این حال، این روش دو محدودیت اصلی داشت. در این روش نیاز بود دو AWR snapshot تعیین شوند و ضمنا اطلاعات ا...
ادامه مطلب
ویژگی Unified Auditing در پایگاه داده اوراکل مکانیزمی قدرتمند برای ثبت فعالیتهای دیتابیس بهصورت متمرکز و منسجم است. با این حال، این ویژگی میتواند چالشهایی برای DBA ایجاد کند، بهویژه زمانی که مدیریت حجم Audit Trail مدنظر باشد. یکی از نگرانیهای رایج، فراهم کردن فضای ذخیرهسازی کافی برای جدول AUD$UNIFIED است. در برخی محیطها، DBA ممکن است بخواهد میزا...
ادامه مطلب
همانطور که میدانید، وقتی در یک تراکنش رکوردی حذف یا بروزرسانی میشود، گاهی لازم است تغییر انجامشده به حالت قبلی بازگردد (rollback). برای مثال، کاربری رکوردی را بروزرسانی میکند و بلافاصله متوجه میشود که باید این تغییر را لغو کند. در اکثر دیتابیسهای رابطهای مدرن که ACID را بهطور کامل پشتیبانی میکنند، این امکان وجود دارد، اما مکانیزم اجرایی آن در ...
ادامه مطلب
فرض کنید میخواهیم از جدول employees، از هر دپارتمان، فقط اطلاعات کارمندی را نمایش دهیم که بالاترین حقوق را دارد. برای گرفتن این خروجی، تا قبل از نسخه 26ai معمولا از subquery استفاده می کردیم: SELECT * FROM ( SELECT employee_id, first_name, department_id, salary, RANK() OVER (PARTITION BY department_id ORDER BY salar...
ادامه مطلب
در دیتابیس اوراکل، state بستههای PL/SQL در سطح session حفظ می شود. یعنی زمانی که یک package در session ای اجرا میشود، متغیرهای global آن، مقادیر خود را در میان چندین فراخوانی حفظ میکنند. در نسخههای قبلی Oracle(قبل از 26ai)، زمانی که یک package دوباره compile میشد، تمام sessionهایی که state آن package را نگه داشته اند با خطاهای ORA-04068 مواجه میشد...
ادامه مطلب
تا قبل از نسخه 26ai، کوئریهایی که شامل bind variable بودند، نمیتوانستند از قابلیت query rewrite با استفاده از materialized view (MV) بهره ببرند و اوراکل مجبور بود دادهها را مستقیماً از جدولهای پایه بخواند، که باعث از دست رفتن مزایای کاراییِ دادههای پیشتجمیعشده (pre-aggregated data) میشد. از Oracle AI Database 26ai به بعد، این محدودیت حذف شده است...
ادامه مطلب
قابلیت 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 را متوقف و نتیجه گزارش را ببینیم. در ادامه با جزییات بیشتری نحوه ایجاد این گزارش را با هم خواهیم دید. در قدم اول باید برای استفاده از بسته DBMS_INMEMORY_ADVISE، قابلیت Heat MAP را فعال...
ادامه مطلب
از نسخه 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 T...
ادامه مطلب
در اوراکل نسخه 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.oracl...
ادامه مطلب
در اوراکل نسخه 23ai، ویوهای جدیدی در زمینه Data Pump اضافه شده اند که می توان از طریق آنها دلایل کندی اجرای Data Pump را شناسایی کرد. لیست این ویوها را در قسمت زیر می بینید: (G)V$DATAPUMP_PROCESS_INFO (G)V$DATAPUMP_PROCESSWAIT_INFO (G)V$DATAPUMP_SESSIONWAIT_INFO ویوی V$DATAPUMP_PROCESS_INFO اطلاعاتی را در مورد جابهای مربوط به Data Pump نمایش می دهد نظیر SESSIONID، SPID، PROGRAM و … SQL> desc V$DATAPUMP_PROCESS_INFO Name Null? Type ----------------------------------------- -------- ---------------------------- CUR_DATE VARCHAR2(19) PROGRAM VARCHAR2(84) SE...
ادامه مطلب
تا قبل از نسخه 23ai نمی توانستیم از توابع تجمیعی نظیر SUM، AVG، MIN و MAX و … بر روی داده های با دیتاتایپ INTERVAL استفاده کنیم و در صورت استفاده، به خطای ORA-00932 مواجه می شدیم. برای مثال می خواهیم بررسی کنیم اجرای جاب PURGE_LOG در یک ماه گذشته به صورت میانگین چقدر زمان برده است: SQL> select column_name,data_type from dba_tab_cols where table_name='DBA_SCHEDULER_JOB_RUN_DETAILS' and column_name='RUN_DURATION'; COLUMN_NAME DATA_TYPE --------------- ---------------------------------------- RUN_DURATION INTERVAL DAY(3) TO SECOND(0) SQL> select AVG(RUN_DURATION) from DBA_SCHEDULER_JOB_RUN_DETAILS where job_name='PURGE_LOG'; 'ORA-00932: inconsistent datatypes: expected NUMB...
ادامه مطلب
در این متن قصد داریم مراحل نصب Oracle Database 23ai free را بر روی اوراکل لینوکس 8 توضیح دهیم در ابتدا باید متذکر شویم که حجم هر دیتابیس(PDB) در نسخه FREE نمی تواند بیشتر از 12GB شود و همچنین برای استفاده از RAM و CPU هم محدودیت دارد: RPM مربوطه را از سایت اوراکل دانلود می کنیم: برای نصب 23ai FREE، ابتدا باید پیش نیاز های نصب اوراکل نظیر نصب package، ایجاد کاربر oracle، تنظیم کرنل و… را انجام دهیم که با دانلود و اجرای oracle-database-preinstall-23ai-1.0-2.el8.x86_64.rpm می توانیم همه شرایط نصب اوراکل 23ai را فراهم کنیم البته قبل از نصب این RPM باید repository را ایجاد کنیم: vi /etc/yum.repos.d/rhel8.repo [InstallMedia-BaseOS] name=Red Hat Enterprise Linux 8 - BaseOS metadata_...
ادامه مطلب
اوراکل در نسخه 23c قابلیت جدیدی را برای دستور CASE در محیط PL/SQL ارائه کرده است که در این متن با آن آشنا خواهیم شد. در ابتدا شکل ساده دستور CASE در PL/SQL را با یک مثال مرور می کنیم: declare VALUE number := 3; text varchar2(50); begin text := case VALUE when 1 then 'ONE' when 2 then 'TWO' when 3 then 'THREE' else 'NOT ONE, TWO NOR THREE' end; dbms_output.put_line(text); end; / THREE در این قطعه کد صرفا از عملگر مساوی استفاده شده است و برای استفاده از عملگرهای دیگر نظیر “>”، “<“، BETWEEN و IN باید از فرمت زیر که Searched CASE syntax نامیده می شود، استفاده کنیم: decl...
ادامه مطلب