
اگر با پایگاهداده اوراکل آشنایی داشته باشید، حتماً دستور سادهی 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 مورد تحلیل قرار گ...
ادامه مطلب
از نسخه 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...
ادامه مطلب
در اوراکل نسخه 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 را به...
ادامه مطلب
در اوراکل نسخه 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 -------------...
ادامه مطلب
تا قبل از نسخه 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 --------------- ---------------------------------...
ادامه مطلب
در این متن قصد داریم مراحل نصب 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 می توانیم ...
ادامه مطلب
اوراکل در نسخه 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; / ...
ادامه مطلب
در زمان ارائه قابلیت Pluggable Database در نسخه 12cR1،ء AWR snapshotها صرفا در سطح CDB ایجاد می شدند و امکان ایجاد snapshot در سطح PDB وجود نداشت. در نسخه 12cR2 پارامتری به نام awr_pdb_autoflush_enabled اضافه شد که با تنظیم آن به مقدار TRUE، به صورت خودکار در سطح PDB هم AWR snapshot ایجاد می شود اما مقدار پیش فرض این پارامتر تا قبل از نسخه 23c برابر با FALSE بوده و در نسخه 23c به صورت پیش فرض فعال می باشد: SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Thu Sep 7 10:57:00 2023 SQL> show p...
ادامه مطلب
زمانی که یکی از مجوزهای system “ANY” privilege نظیر select any table، drop any table و … را به کاربری می دهیم، آن کاربر امکان دسترسی به objectهای شمای sys و جداول Data Dictionary را ندارد: SQL*Plus: Release 10.1.0.4.2 - Production on Tue Jan 9 10:38:31 2024 SQL> show user USER is "SYS" SQL> create table sys.tb as select * from dual; Table created. SQL> create user usef identified by a; User created. SQL> grant create session,select any table to usef; Grant succeeded. SQL> conn u...
ادامه مطلب
Hybrid Partitioned Table قابلیت جدیدی است که اوراکل در نسخه 19c ارائه کرده است با کمک این قابلیت می توان برای یک جدول، تلفیقی از پارتیشنهای exteal و inteal را ایجاد کرد. این روش از پارتیشن بندی، صرفا متدهای Range و List را پشتیبانی می کند البته در نسخه 19c امکان استفاده از متد Automatic List برای Hybrid Partitioned Table وجود ندارد و این امکان از نسخه 23c به وجود آمد. بنابرین از این نسخه(23c) می توانیم برای جداول Hybrid Partitioned Table از قابلیت Automatic List Partitioning استفاده کنیم. قبل از...
ادامه مطلب
زمانی که sessionای را در اوراکل kill می کنیم، به صورت پیش فرض آن session در حالت SOFTء، kill خواهد شد: SQL> ALTER SYSTEM KILL SESSION '1025,44801'; System altered. جزییات اجرای این دستور را می توانیم در Alert Log ببنیم: 2023-12-19T13:32:18.731476+03:30 (4):A user has terminated a session. KILL SESSION for sid=(1025, 44801): Reason = alter system kill session Mode = KILL SOFT -/-/-/- Requestor = USER (orapid = 55, ospid = 3267554, inst = 1) User = oracle Program = sqlplus@OEL8 (...
ادامه مطلب