تالار های تخصصی

متن مرتبط با «قابلیت» در سایت تالار های تخصصی نوشته شده است

اوراکل 23c – قابلیت Dictionary Protection

  • زمانی که یکی از مجوزهای 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 usef/a Connected. SQL> select * from sys.tb; ORA-00942: table or view does not exist SQL> select * from v$datafile; ORA-00942: table or view does not exist اگر تصمیم داریم این محدودیت را حداقل در مورد مجوز select any table برای یک کاربر برداریم، می توانیم مجوز SELECT ANY DICTIONARY را به آن کاربر اعطا کنیم: SQL> grant SELECT ANY DICTIONARY to usef; Grant succeeded. SQL> conn usef/a Connected. SQL> select * from sys.tb; D - X SQL> select file# from v$datafile where rownum=1; FILE# ---------- 1 البته از اوراکل 12c، دسترسی به بعضی از جداول Data Dictionary حتی با داشتن مجوز  SELECT ANY DICTIONARY  هم امکان پذیر نیست. لیست بعضی از این جداول را در قسمت زیر می بینید: USER$, ENC$ , DEFAULT_PWD$, LINK$, USER_HISTORY$, CDB_LOCAL_ADMINAUTH$, XS$VERIFIERS نقش SELECT_CATALOG_ROLE هم می تواند دسترسی به ویوهای دیتادیکشنری را به کاربر اعطا کند که قبلا در مورد تفاوت این نقش با مجوز SELECT ANY DICTIONARY مطلبی را نوشته ایم. شکل پیشرفته تر از مجوز SELECT ANY DI, ...ادامه مطلب

  • اوراکل 23c – قابلیت Automatic List Partitioning برای جداول هیبریدی

  • Hybrid Partitioned Table قابلیت جدیدی است که اوراکل در نسخه 19c ارائه کرده است با کمک این قابلیت می توان برای یک جدول، تلفیقی از پارتیشنهای exteal و inteal را ایجاد کرد. این روش از پارتیشن بندی، صرفا متدهای Range و List را پشتیبانی می کند البته در نسخه 19c امکان استفاده از متد Automatic List برای Hybrid Partitioned Table وجود ندارد و این امکان از نسخه 23c به وجود آمد. بنابرین از این نسخه(23c) می توانیم برای جداول Hybrid Partitioned Table از قابلیت Automatic List Partitioning استفاده کنیم. قبل از ایجاد جدول مورد نظر، دایرکتوری مربوط به دیتایی که در سیستم عامل قرار دارند را ایجاد می کنیم: SQL> create directory E_PARTITIONs as '/PARTITIONs'; Directory created جدول mytbl از نوع هیبریدی است و  به روش Automatic List پارتیشن بندی شده است: SQL> CREATE TABLE mytbl 2 ( 3 national_id NUMBER, 4 name VARCHAR2(20), 5 last_name VARCHAR2(20), 6 org_id NUMBER 7 ) 8 EXTERNAL PARTITION ATTRIBUTES( 9 TYPE ORACLE_LOADER 10 DEFAULT DIRECTORY E_PARTITIONs 11 ACCESS PARAMETERS 12 ( 13 FIELDS TERMINATED BY ',' (national_id,name,last_name,org_id) 14 ) 15 REJECT LIMIT UNLIMITED 16 ) 17 PARTITION BY LIST (org_id) AUTOMATIC 18 ( 19 PARTITION p1 VALUES (1), 20 PARTITION p2 VALUES (2), 21 PARTITION p_exteal VALUES (3) EXTERNAL LOCATION('part1.txt') 22 ); Table created در صورت فعال نبودن قابلیت Automatic List Partitioning، ستون org_id صرفا مقادیر 1، 2 و 3 را قبول می کرد اما, ...ادامه مطلب

  • قابلیت SQL Firewall در اوراکل 23c

  • SQL Firewall یکی دیگر از قابلیتهای جدید اوراکل در نسخه 23c است بر اساس این قابلیت می توانیم مجموعه ای از دستورات را به عنوان دستورات مجاز برای دیتابیس تعریف کنیم در این صورت کاربر نمی تواند دستور دیگری خارج از این مجموعه را اجرا کند حتی اگر این کاربر مجوز اجرای آن دستورات را داشته باشد. قصد داریم اقدامات کاربر Usef را تحت نظر بگیریم و تمامی دستورات اجرا شده توسط این کاربر را capture کنیم سپس با تنظیم SQL Firewall، به این کاربر اجازه ندهیم خارج از دستوراتی که capture شده اند، دستور جدیدی را اجرا کند. برای اجرای این سناریو، ابتدا محیط تست را آماده می کنیم. SQL> create user usef identified by a; User created. SQL> grant dba to usef; Grant succeeded. SQL> conn usef/a@OEL8:1521/TEHRANPDB Connected. SQL> create table usef.tbl1 as select * from dual; Table created. SQL> create table usef.tbl2 as select * from dual; Table created. SQL> create or replace procedure usef.prc1 as 2 text varchar2(100); 3 begin 4 select * into text from tbl1; 5 end; 6 / Procedure created. برای مدیریت SQL FIREWALL می توانیم از کاربر sys استفاده کنیم و یا کاربر جدیدی را ایجاد کنیم و با دادن مجوز sql_firewall_admin به این کاربر، اقدامات لازم را از طریق آن انجام دهیم. در قدم اول، کاربر usr_firewall را برای مدیریت SQL FIREWALL ایجاد می کنیم و دسترسی sql_firewall_admin را به آن اهدا می کنیم. SQL> create user usr_firewall identified by a; User created. SQL> grant create session,sql_firewall_admin to usr_firewall; Grant succeeded. برای فعال کردن SQL FIREWALL، از طر, ...ادامه مطلب

  • قابلیتهای جدید اوراکل 23c برای جداول Blockchain و Immutable

  • در این مطلب سعی داریم تعدادی از قابلیتهای جدید اوراکل 23c در زمینه جداول Blockchain و Immutable را مرور کنیم. امکان حذف  و اضافه کردن ستون به جداول Blockchain و Immutable در نسخه 23c می توان به جداول Blockchain ستونی را اضافه کرد(البته در version v2 این نوع از جداول): SQL> create blockchain table blockchaintb1 ( id number(10), desc1 varchar2(100) ) no drop until 20 days idle no delete until 20 days after insert hashing using "SHA2_512" version "v2"; Table created. SQL> alter table blockchaintb1 add (desc2 varchar2(1000)); Table altered. حذف ستون هم در این نسخه امکان پذیر است: SQL> alter table blockchaintb1 drop column desc2; Table altered. در صورت درج اطلاعات در این نوع از جداول، باز هم می توان عملیات فوق را تکرار کرد: SQL> insert into blockchaintb1 values(1,'Amir Hozhabri','Sori Masoud'); 1 row created. SQL> commit; Commit complete. SQL> alter table blockchaintb1 drop column desc2; Table altered. نکته: برای مشاهده version هر کدام از Blockchain Tableها می توان از ویوی user_blockchain_tables استفاده کرد(user_blockchain_tables.TABLE_VERSION). قابلیت فوق برای version V2 جداول immutable هم به وجود آمد: SQL> create immutable table Immtb1 ( id number(10), desc1 varchar2(100) ) no drop until 200 days idle no delete until 200 days after insert version "v2"; Table created. SQL> alter table Immtb1 add (desc2 varchar2(1000)); Table altered. SQL> alter table Immtb1 drop column desc2; Table altered. تنظیم حداکثر مدت زمان برای idle, ...ادامه مطلب

  • قابلیت Shrink کردن Bigfile tablespace در اوراکل 23c

  • از نسخه های قدیمی اوراکل امکان resize کردن دیتافایلها وجود دارد: SQL*Plus: Release 10.1.0.4.2 - Production on Tue Nov 21 11:15:16 2023 SQL> select bytes/1024/1024 SIZE_MB from v$datafile where file#=29; SIZE_MB ---------- 1024 SQL> alter database datafile 29 resize 120m; Database altered. SQL> select bytes/1024/1024 SIZE_MB from v$datafile where file#=29; SIZE_MB ---------- 120 البته resize کردن دیتافایلها همیشه با موفقیت انجام نمی شود و بعضا با آزاد بودن درصد بالایی از فضای دیتافایل، به دلیل قرار گرفتن بعضی از بلاکهای segment بر سر High Water Mark، امکان کاهش سایز دیتافایل وجود ندارد و در این حالت به خطای زیر برخواهیم خورد: SQL> alter database datafile 1 resize 10m; ORA-03297: file contains used data beyond requested RESIZE value برای جلوگیری از خطای ORA-03297، باید segmentای که بر سر راه High Water Mark قرار دارد را جابجا کنیم! که البته قبلا در مطلبی به طور مفصل این مسئله را بررسی کردیم و از تکرار آن خودداری می کنیم. مسئله ای که در این متن به آن خواهیم پرداخت، موضوع shrink کردن در سطح tablespaceها است. در نسخه 11g امکان shrink کردن Temporary tablespaceها به وجود آمد: SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 21 10:35:57 2023 SQL> select FILE#,BYTES/1024/1024 from v$tempfile where file#=5; FILE# BYTES/1024/1024 ---------- --------------- 5 5120 SQL> ALTER TABLESPACE Temp_TBS SHRINK SPACE KEEP 340m; Tablespace altered. SQL> select FILE#,BYTES/1024/1024 from v$tempfile where file#=5; FILE# BYTES/1, ...ادامه مطلب

  • اوراکل 23c – قابلیت Table Values Constructor

  • Table Values Constructor قابلیتی است که در بیشتر دیتابیسهای رابطه ای وجود داشته و اوراکل امکان استفاده از این قابلیت را در نسخه 23c فراهم کرده است. بر اساس این قابلیت، می توانیم با اجرای یک دستور insert ساده(Insert به همراه عبارت Values) چندین رکورد را در یک جدول درج کنیم البته استفاده از کلمه کلیدی Values به دستور insert محدود نمی شود و از این عبارت می توانیم برای دستورات DMLای دیگر نظیر Select و Merge هم استفاده کنیم. ابتدا مثالی از نحوه استفاده از این قابلیت را به همراه دستور insert مشاهده می کنید. SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Tue Aug 29 22:41:17 2023 SQL> insert into Irani values(1,'Vahid'),(2,'Usef'); 2 rows created. SQL> commit; Commit complete. با اجرای دستور فوق دو رکورد در جدول Irani ثبت شده اند: SQL> select * from Irani; ID NAME ---------- -------------- 1 Vahid 2 Usef این کار در نسخه های قبلی اوراکل امکان پذیر نبود: SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023 SQL> create table Irani(id number,name varchar2(14)); Table created. SQL> insert into Irani values(1,'Vahid'),(2,'Usef'); 'ORA-00933: SQL command not properly ended' و برای انجام این کار در نسخه 21c می بایست دو بار دستور insert را اجرا کنیم: SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 29 21:47:30 2023 ID NAME ---------- ----- 1 Vahid 2 Usef SQL> insert into Irani values(1,'Vahid'); 1 row created. SQL> insert into Irani values(2,'Usef'); 1 row created. البته امکان اجرای دستورا, ...ادامه مطلب

  • قابلیت Materialized View Concurrent Refresh در اوراکل 23c

  • بروز شدن همزمان Materialized Viewهای on-commit refresh از طریق sessionهای مختلف می تواند سبب رخ دادن eventای به نام enq: JI – contention شود چرا که این نوع از MVها به طور پیش فرض به صورت سریالی بروز می شوند و امکان بروزرسانی Concurrent را ندارند. در قسمت زیر، از طریق دو session به طور همزمان دیتایی را در جدول مرجع MV درج کرده ایم که این  مسئله سبب شد تعداد زیادی از eventهای enq: JI – contention را شاهد باشیم: SQL> create materialized view auther_contry_mv refresh fast on commit as select country,count(*) from author_tbl group by country; Materialized view created. Session 1: SQL> begin for i in 10000 ..19999 loop insert into author_tbl values(i,'Rahmat Rabbani','m','Oracle DBA','IRAN'); commit; end loop; end; / PL/SQL procedure successfully completed. Elapsed: 00:03:00.18 Session 2: begin for i in 1 ..9999 loop insert into author_tbl values(i,'Rahmat Rabbani','m','Oracle DBA','IRAN'); commit; end loop; end; / PL/SQL procedure successfully completed. Elapsed: 00:03:00.25 در نسخه 23c اوراکل از طریق قابلیت Materialized View Concurrent Refresh این محدودیت از بین برده است و با استفاده از این قابلیت می توان به صورت Concurrent این نوع از MVها را بروزرسانی کرد. برای استفاده از این قابلیت، باید عبارت enable concurrent refresh را به دستور ساخت MV اضافه کرد در ادامه MVای را با استفاده از این عبارت ایجاد می کنیم و بلاک PL/SQLای فوق را مجددا اجرا می کنیم خواهیم دید که زمان اجرا از 3 ثانیه به 2 ثانیه کاهش یافته است و خبری از enq: JI – contention نیست: SQL> create mater, ...ادامه مطلب

  • اوراکل 23c – امکان استفاده از قابلیت Memoptimized Rowstore بدون تنظیم Hint

  • برای استفاده از قابلیت Memoptimized Rowstore در نسخه های 19c و 21c، ابتدا می بایست این قابلیت را در سطح جدول فعال می کردیم و بعد از آن، در زمان درج دیتا، Hintای را به دستور insert اضافه می کردیم با توجه به آنکه ممکن است application از قبل نوشته شده باشد، اضافه کردن Hint به دستور insert می تواند مانعی برای استفاده از قابلیت Memoptimized Rowstore شود. SQL> ALTER TABLE tbl1 MEMOPTIMIZE FOR WRITE; Table altered SQL> INSERT /*+ MEMOPTIMIZE_WRITE */ INTO tbl1 VALUES (1,'usefzadeh.com'); بنابرین در نسخه های یاد شده، بدون استفاده از هینت MEMOPTIMIZE_WRITE امکان استفاده از این قابلیت وجود نداشت. در نسخه 21c اوراکل پارامتری به نام MEMOPTIMIZE_WRITES را اضافه کرده است که از طریق آن می توان بدون تنظیم این Hint، از این قابلیت بهرمند شد: SQL> show parameter memoptimize_writes NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ memoptimize_writes string HINT مقدار پیش فرض این پارامتر برابر با HINT است یعنی برای استفاده از این قابلیت، تنظیم هینت MEMOPTIMIZE_WRITE الزامی است و با تنظیم این پارامتر به مقدار ON، نیازی به استفاده از Hint نخواهد بود: SQL> alter system set memoptimize_writes=ON scope=spfile; System altered. SQL> startup force; پس از تنظیم این پارامتر، جدولی را ایجاد کرده و قابلیت MEMOPTIMIZE FOR WRITE را برای آن فعال می کنیم: Connected to Oracle Database 23c Free, Release 23.0.0.0.0 SQL> create table TBL1 2 ( 3 id NUMBER not null, 4 text, ...ادامه مطلب

  • اوراکل 23c – قابلیت JSON Relational Duality View

  • اوراکل در نسخه 23c قابلیتی به نام JSON Relational Duality View را ارائه کرده است که می توان از طریق آن به طور همزمان از(بسیاری از) مزیتهای Relational data model و JSON data model بهرمند شد. می دانیم که انتخاب هر کدام از این دیتامدلها می تواند بر حسب شرایط، مزایا و معایبی را به همراه داشته باشد. به طور مثال در مدل Relational می توان از مزیتهایی نظیر «جلوگیری از Data duplication، نرمالسازی، consistency» و … بهره گرفت و از طرف دیگر «خوانایی، سادگی، خود توصیفی، hierarchical document» نمونه هایی از مزیتهای JSON هستند. بر اساس قابلیت JSON Relational Duality View، دیتا در جداول به صورت relational ذخیره می شوند و با ایجاد یک Duality View بر روی جداول رابطه ای، امکان دسترسی و دستکاری(Delete، Insert، Update) دیتا به صورت JSON هم به وجود خواهد آمد و Duality Viewها بر خلاف Viewهای معمولی، امکان write را بر روی جداول رابطه ای فراهم می کنند(حتی در حالت Complex View). در زمان استفاده از این قابلیت، با توجه به ذخیره شدن اطلاعات در جداول رابطه ای، دستورات SQLای متعارف برای اجرای عملیات DML کاملا معتبر هستند و در کنار آن Developer این انتخاب را دارد تا با استفاده از Duality Viewها عملیات DML را با فرمت JSON انجام دهد که این مسئله mapping راحت تر بین Application Object و Relational Table را به همراه دارد و در بعضی از موارد می تواند نیاز به convert دیتا به فرمت JSON و یا برعکس را از بین ببرد. در ادامه با ایجاد دو جدول book_tbl و author_tbl سعی خواهیم کرد نحوه کار با JSON Relational Duality View را شرح دهیم: SQL> create table book_tbl( ID number primary key, title varchar2(100), total_pages n, ...ادامه مطلب

  • اوراکل 23c -قابلیت Automatic Transaction Rollback(تنظیم اولویت برای تراکنشها)

  • در صورتی که دو کاربر قصد ویرایش یک رکورد را داشته باشند، کاربری که دیرتر دستور update را اجرا کرده Block خواهد شد و تا زمانی که کاربر اول(کاربری که زودتر رکورد را در اختیار گرفته) به تراکنش خاتمه ندهد، کاربر دوم در حالت Block باقی خواهد ماند. --session 1: SQL> select sid from v$mystat where rownum=1; SID ---------- 2190 SQL> update USEF.TBL1 set id=1; 1 row updated --session 2: SQL> select sid from v$mystat where rownum=1; SID ---------- 944 SQL> update USEF.TBL1 set id=1; Executing… بلاک شدن session دوم را می توانیم از طریق دستور زیر ببینیم: SQL> select SID,ID1,ID2,LMODE,block,request from v$lock where type='TX'; SID ID1 ID2 LMODE BLOCK REQUEST ---------- ---------- ---------- ---------- ---------- ---------- 944 458766 2511 0 0 6 2190 458766 2511 6 1 0 ممکن است کاربر دوم که تراکنشش در حالت انتظار قرار دارد، برای ما اولویت بیشتری داشته باشد. در این حالت چه راهکاری وجود دارد؟ اوراکل در نسخه 23c با ارائه چند پارامتر این مسئله را قابل کنترل کرده است و این امکان را فراهم کرده تا اگر تراکنشهای با اولویت پایین، سد راه تراکنشهای با اولویت بالا شوند، به صورت خودکار و با گذراندن زمان مشخصی، تراکنشهای با اولویت کمتر rollback شوند. پارامترهای مربوط به قابلیت Automatic transaction rollback را در قسمت زیر مشاهده می کنید: txn_priority string HIGH txn_auto_rollback_mode , ...ادامه مطلب

  • اوراکل 23c- قابلیت DEFAULT ON NULL برای update و insert

  • از نسخه های قدیمی اوراکل این امکان را داشتیم که برای ستونهای جداول، مقدار پیش فرض و یا همان Default Value تعریف کنیم. با تنظیم Default Value برای یک ستون، اگر در زمان اجرای دستور insert مقداری را برای آن ستون لحاظ نکرده باشیم، Default Value برای آن ستون اعمال خواهد شد: SQL*Plus: Release 10.1.0.4.2 - Production on Sat Aug 5 16:28:29 2023 SQL> create table tbl1(id number,tarikh date default sysdate+1); Table created. SQL> insert into tbl1(id) values(1); 1 row created. SQL> select * from tbl1; ID TARIKH ---------- --------- 1 06-AUG-23 در این شرایط اگر به صراحت مقدار NULL را برای ستون tarikh در نظر بگیریم چه اتفاقی می افتد؟ SQL> insert into tbl1 values(2,null); 1 row created. SQL> select * from tbl1; ID TARIKH ---------- --------- 1 06-AUG-23 2 همانطور که می بینید، Default value در این حالت اعمال نشده است! اوراکل در نسخه 12cR1 قابلیتی را اضافه کرده تا بتوان در این حالت هم مقدار Default Value به جای NULL برای ستون مورد نظر اعمال شود: SQL*Plus: Release 12.1.0.2.0 Production on Sat Aug 5 16:30:29 2023 SQL> create table tbl1(id number,tarikh date default on null sysdate+1); Table created. SQL> insert into tbl1(id) values(1); 1 row created. SQL> select * from tbl1; ID TARIKH ---------- --------- 1 06-AUG-23 SQL> insert into tbl1 values(2,null); 1 row created. SQL> select * from tbl1; ID TARIKH ---------- --------- 1 06-AUG-23 2 06-AUG-23 در این شرایط، با توجه به شر, ...ادامه مطلب

  • قابلیت SQL History در اوراکل 23c

  • قابلیت SQL History در نسخه 23c امکان مشاهده آخرین دستورات اجرا شده توسط sessionها را فراهم می کند(حدودا 50 دستور برای هر session) اوراکل بر اساس این قابلیت، دستوراتی که اجرای آنها به خطا خورده را هم نمایش می دهد. برای فعال کردن قابلیت SQL History باید پارامتر SQL_HISTORY_ENABLED را به مقدار TRUE تنظیم کرد مقدار پیش فرض این پارامتر برابر با False است: SQL> show parameter SQL_HISTORY_ENABLED NAME TYPE VALUE -------------------- --------- ------- sql_history_enabled boolean FALSE این پارامتر در دو سطح session و system قابل تنظیم است: SQL> alter system set sql_history_enabled=true; System altered بعد از تنظیم این پارامتر، برای مشاهده لیست دستورات اجرا شده می توان از ویوی V$SQL_HISTORY استفاده کرد: SQL> desc v$sql_history Name Type Nullable Default Comments ------------------------------ ------------- -------- ------- -------- KEY NUMBER Y SQL_ID VARCHAR2(13) Y ELAPSED_TIME NUMBER Y CPU_TIME NUMBER Y BUFFER_GETS NUMBER Y IO_INTERCONNECT_BYTES NUMBER Y PHYSICAL_READ_REQUESTS NUMBER Y PHYSICAL_READ_BYTES NUMBER Y PHYSICAL_WRITE_REQ, ...ادامه مطلب

  • قابلیت SQL domain در اوراکل 23c

  • دیتابیس اوراکل در نسخه 23c سعی کرده تا بسیاری از قابلیتهای موجود در دیتابیسهای رابطه ای دیگر را در این version ارائه کند قابلیتهای ساده ای نظیر «Schema level privilege» – «Boolean data type» – «Direct Joins for UPDATE and DELETE» -«SELECT without FROM» و … یکی دیگر از این قابلیتها که موضوع بحث این مستند هم هست، SQL domain می باشد که می تواند شامل مجموعه ای از محدودیتها و خصوصیتها باشد و با تخصیص آن به یک ستون، می توان محدودیتهایی را برای آن ستون اعمال کرد به عبارت دیگر، SQL domain امکان توسعه Data type را متناسب با Business فراهم می کند. یکی از کاربردهای مهم این قابلیت به زمانی برمی گردد که بخواهیم برای مقادیر ورودی یک ستون، شرطهای به خصوصی را اعمال کنیم. مثلا برای ستون Age با نوع داده number، با شرط Age>=18، از ثبت مقادیر کمتر از 18 جلوگیری کنیم و یا به عنوان مثالی کاربردی تر، برای ستونی که قرار است آدرس Email در آن ذخیره شود، شرطی را اعمال کنیم تا این ستون، صرفا اطلاعات ورودی با فرمت [email protected] را بپذیرد. البته در نسخه های قبل از 23c، این کار به روشها مختلفی نظیر trigger، check constraint و … قابل انجام بود به عنوان مثال، از طریق check constraint می توانیم محدودیتی را ایجاد کنیم تا ثبت اطلاعات در ستون Email صرفا به فرمت [email protected] قابل انجام باشد: SQL> CREATE TABLE EMAIL_ADDRESS 2 ( 3 id NUMBER(10), 4 person_id NUMBER(20), 5 email VARCHAR2(500) constraint check_email 6 CHECK (regexp_like (email, '^(S+)@(S+).(S+)$')) 7 ); Table created SQL> insert into EMAIL_ADDRESS values(1,34,'vahidusefzadeh', ...ادامه مطلب

  • قابلیتهای جدید اوراکل 21c در زمینه عملگرهای مجموعه ای

  • تا قبل از نسخه 21c، صرفا می توانستیم از سه عملگر مجموعه ای INTERSECT، MINUS و UNION [ALL] در اوراکل استفاده کنیم اما در نسخه 21c دو عملگر جدید EXCEPT و EXCEPT ALL به این مجموعه اضافه شدند که این دو عملگر معادل عملگرهای MINUS و MINUS ALL هستند و صرفا به دلیل استفاده از عبارتهای EXCEPT و EXCEPT ALL در دیتابیسهای دیگر، اوراکل هم این دو عملگر را به مجموعه عملگرهای خود اضافه کرده است. مجددا تاکید می شود که در عمل تفاوتی بین EXCEPT و MINUS وجود ندارد و حتی در صورت استفاده از عملگر EXCEPT، اوراکل در زمان اجرای پرس و جو، در مرحله Query Transformation، عملگر EXCEPT را به MINUS تبدیل می کند. با این توضیحات، در شرایط زیر، برای برگرداندن رکوردهایی که در t1.c1 وجود دارند اما در t2.c1 وجود ندارد(با حذف رکوردهای تکراری!!) دو انتخاب داریم، عملگرEXCEPT و عملگر MINUS: select t1.c1 from t1 MINUS select t2.c1 from t2; D Z select t1.c1 from t1 EXCEPT select t2.c1 from t2; D Z با فعال کردن تریس هم خواهیم دید که در زمان استفاده از عملگر EXCEPT، اوراکل کماکان از عملگر MINUS استفاده می کند: user_id=0 user_name=SYS module=sqlplus@oLinux7 (TNS V1-V3) action= sql_id=3tkx1k2a2pphc plan_hash_value=1699042171(6545537b) problem_type=3 command_type=3 ----- Current SQL Statement for this session (sql_id=3tkx1k2a2pphc) ----- select t1.c1 from t1 EXCEPT select t2.c1 from t2 Final query after transformations:******* UNPARSED QUERY IS ******* (SELECT "T1"."C1" "C1" FROM "SYS"."T1" "T1")MINUS (SELECT "T2"."C1" "C1" FROM "SYS"."T2" "T2") در نسخه 21c، علاوه بر اضافه شدن دو عملگر EXCEPT و EXCEPT ALL، امکان استفاده, ...ادامه مطلب

  • استفاده از قابلیت flashback query برای برگرداندن تغییرات متن پکیج، پروسیجر و فانکشن

  • همانطور که می دانید، با شروع یک تراکنش، undo segmentای هم به آن اختصاص داده می شود تا اطلاعاتی  که تراکنش در حال کار با ان است را در خود جای دهد به طور مثال، قبل از حذف یک رکورد در یک تراکنش، اطلاعات, ...ادامه مطلب

  • جدیدترین مطالب منتشر شده

    گزیده مطالب

    تبلیغات

    برچسب ها