ஹைலோட்++ சைபீரியா 2019 இன் அடிச்சுவடுகளைப் பின்பற்றுகிறது - ஆரக்கிளில் 8 பணிகள்

வாழ்த்துக்கள்!

ஜூன் 24-25 தேதிகளில், ஹைலோடு++ சைபீரியா 2019 மாநாடு நோவோசிபிர்ஸ்கில் நடைபெற்றது. எங்கள் தோழர்களும் அங்கே இருந்தனர். அறிக்கை "ஆரக்கிள் கொள்கலன் தரவுத்தளங்கள் (CDB/PDB) மற்றும் மென்பொருள் மேம்பாட்டிற்கான அவற்றின் நடைமுறை பயன்பாடு", சிறிது நேரம் கழித்து ஒரு உரை பதிப்பை வெளியிடுவோம். நன்றாக இருந்தது, நன்றி ஓலெக்புனின் அமைப்புக்காகவும், வந்த அனைவருக்கும்.

ஹைலோட்++ சைபீரியா 2019 இன் அடிச்சுவடுகளைப் பின்பற்றுகிறது - ஆரக்கிளில் 8 பணிகள்
இந்த இடுகையில், நாங்கள் எங்கள் சாவடியில் இருந்த பிரச்சனைகளை உங்களுடன் பகிர்ந்து கொள்ள விரும்புகிறோம், இதன் மூலம் உங்கள் ஆரக்கிள் அறிவை நீங்கள் சோதிக்கலாம். வெட்டுக்கு கீழே 8 சிக்கல்கள், பதில் விருப்பங்கள் மற்றும் விளக்கம்.

பின்வரும் ஸ்கிரிப்டை இயக்குவதன் விளைவாக நாம் பார்க்கும் அதிகபட்ச வரிசை மதிப்பு என்ன?

create sequence s start with 1;
 
select s.currval, s.nextval, s.currval, s.nextval, s.currval
from dual
connect by level <= 5;

  • 1
  • 5
  • 10
  • 25
  • இல்லை, பிழை இருக்கும்

பதில்ஆரக்கிள் ஆவணங்களின்படி (8.1.6 இலிருந்து மேற்கோள் காட்டப்பட்டுள்ளது):
ஒரு SQL அறிக்கைக்குள், ஆரக்கிள் ஒரு வரிசைக்கு ஒரு முறை மட்டுமே வரிசையை அதிகரிக்கும். ஒரு வரிசைக்கான NEXTVALஐப் பற்றிய ஒன்றுக்கு மேற்பட்ட குறிப்புகளை ஒரு அறிக்கையில் கொண்டிருந்தால், Oracle அந்த வரிசையை ஒருமுறை அதிகரித்து, NEXTVAL இன் அனைத்து நிகழ்வுகளுக்கும் ஒரே மதிப்பை வழங்கும். ஒரு அறிக்கையில் CURRVAL மற்றும் NEXTVAL இரண்டின் குறிப்புகள் இருந்தால், Oracle வரிசையை அதிகரித்து, CURRVAL மற்றும் NEXTVAL இரண்டிற்கும் ஒரே மதிப்பை வழங்கும்.

இவ்வாறு, அதிகபட்ச மதிப்பு வரிகளின் எண்ணிக்கையுடன் ஒத்திருக்கும், அதாவது 5.

பின்வரும் ஸ்கிரிப்டை இயக்குவதன் விளைவாக அட்டவணையில் எத்தனை வரிசைகள் இருக்கும்?

create table t(i integer check (i < 5));
 
create procedure p(p_from integer, p_to integer) as
begin
    for i in p_from .. p_to loop
        insert into t values (i);
    end loop;
end;
/
 
exec p(1, 3);
exec p(4, 6);
exec p(7, 9);

  • 0
  • 3
  • 4
  • 5
  • 6
  • 9

பதில்ஆரக்கிள் ஆவணங்களின்படி (11.2 இலிருந்து மேற்கோள் காட்டப்பட்டுள்ளது):

எந்த SQL அறிக்கையையும் செயல்படுத்தும் முன், Oracle ஒரு மறைமுகமான சேமிப்புப் புள்ளியைக் குறிக்கிறது (உங்களுக்குக் கிடைக்காது). பின்னர், அறிக்கை தோல்வியுற்றால், ஆரக்கிள் அதை தானாக உருட்டி, SQLCA இல் உள்ள SQLCODE க்கு பொருந்தக்கூடிய பிழைக் குறியீட்டை வழங்கும். எடுத்துக்காட்டாக, ஒரு தனிப்பட்ட குறியீட்டில் நகல் மதிப்பைச் செருக முயற்சிப்பதன் மூலம் ஒரு INSERT அறிக்கை பிழையை ஏற்படுத்தினால், அறிக்கை மீண்டும் உருட்டப்படும்.

கிளையண்டிலிருந்து ஹெச்பியை அழைப்பதும் ஒரே அறிக்கையாகக் கருதப்பட்டு செயலாக்கப்படுகிறது. இவ்வாறு, முதல் ஹெச்பி அழைப்பு வெற்றிகரமாக முடிவடைகிறது, மூன்று பதிவுகளைச் செருகியது; இரண்டாவது ஹெச்பி அழைப்பு ஒரு பிழையுடன் முடிவடைகிறது மற்றும் அது செருக முடிந்த நான்காவது பதிவை மீண்டும் உருட்டுகிறது; மூன்றாவது அழைப்பு தோல்வியடைந்தது மற்றும் அட்டவணையில் மூன்று பதிவுகள் உள்ளன.

பின்வரும் ஸ்கிரிப்டை இயக்குவதன் விளைவாக அட்டவணையில் எத்தனை வரிசைகள் இருக்கும்?

create table t(i integer, constraint i_ch check (i < 3));
 
begin
    insert into t values (1);
    insert into t values (null);
    insert into t values (2);
    insert into t values (null);
    insert into t values (3);
    insert into t values (null);
    insert into t values (4);
    insert into t values (null);
    insert into t values (5);
exception
    when others then
        dbms_output.put_line('Oops!');
end;
/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

பதில்ஆரக்கிள் ஆவணங்களின்படி (11.2 இலிருந்து மேற்கோள் காட்டப்பட்டுள்ளது):

அட்டவணையில் உள்ள ஒவ்வொரு வரிசையும் பூர்த்தி செய்ய வேண்டிய நிபந்தனையை ஒரு சரிபார்ப்பு கட்டுப்பாடு உங்களை அனுமதிக்கிறது. தடையை பூர்த்தி செய்ய, அட்டவணையில் உள்ள ஒவ்வொரு வரிசையும் நிபந்தனையை உண்மையாகவோ அல்லது தெரியாததாகவோ மாற்ற வேண்டும் (பூஜ்யத்தின் காரணமாக). ஆரக்கிள் ஒரு குறிப்பிட்ட வரிசைக்கான காசோலை தடை நிலையை மதிப்பிடும்போது, ​​நிபந்தனையின் எந்த நெடுவரிசைப் பெயர்களும் அந்த வரிசையில் உள்ள நெடுவரிசை மதிப்புகளைக் குறிக்கும்.

எனவே, மதிப்பு பூஜ்யமானது காசோலையை கடந்து செல்லும், மேலும் மதிப்பு 3 ஐச் செருகும் முயற்சி வரை அநாமதேயத் தொகுதி வெற்றிகரமாகச் செயல்படுத்தப்படும். இதற்குப் பிறகு, பிழை கையாளும் தொகுதி விதிவிலக்கை அழிக்கும், மறுபிறப்பு ஏற்படாது, மேலும் அட்டவணையில் நான்கு வரிசைகள் இருக்கும் மதிப்புகளுடன் 1, null, 2 மற்றும் null மீண்டும்.

எந்த ஜோடி மதிப்புகள் தொகுதியில் அதே அளவு இடத்தை எடுக்கும்?

create table t (
    a char(1 char),
    b char(10 char),
    c char(100 char),
    i number(4),
    j number(14),
    k number(24),
    x varchar2(1 char),
    y varchar2(10 char),
    z varchar2(100 char));
 
insert into t (a, b, i, j, x, y)
    values ('Y', 'Вася', 10, 10, 'Д', 'Вася');

  • ஏ மற்றும் எக்ஸ்
  • பி மற்றும் ஒய்
  • சி மற்றும் கே
  • சி மற்றும் இசட்
  • கே மற்றும் இசட்
  • நான் மற்றும் ஜே
  • ஜே மற்றும் எக்ஸ்
  • அனைத்தும் பட்டியலிடப்பட்டுள்ளன

பதில்ஆரக்கிளில் பல்வேறு வகையான தரவுகளை சேமிப்பது குறித்த ஆவணங்களிலிருந்து (12.1.0.2) சில பகுதிகள் இங்கே உள்ளன.

CHAR தரவு வகை
CHAR தரவு வகையானது, தரவுத்தள எழுத்துத் தொகுப்பில் நிலையான-நீள எழுத்து சரத்தை குறிப்பிடுகிறது. நீங்கள் உங்கள் தரவுத்தளத்தை உருவாக்கும் போது தரவுத்தள எழுத்துத் தொகுப்பைக் குறிப்பிடுகிறீர்கள். CHAR நெடுவரிசையில் சேமிக்கப்பட்ட அனைத்து மதிப்புகளும் தேர்ந்தெடுக்கப்பட்ட நீள சொற்பொருளில் அளவு மூலம் குறிப்பிடப்பட்ட நீளத்தைக் கொண்டிருப்பதை ஆரக்கிள் உறுதி செய்கிறது. நெடுவரிசை நீளத்தை விடக் குறைவான மதிப்பைச் செருகினால், Oracle வெற்றுப் பட்டையின் மதிப்பை நெடுவரிசை நீளத்திற்கு மாற்றும்.

VARCHAR2 தரவு வகை
VARCHAR2 தரவு வகையானது தரவுத்தள எழுத்துத் தொகுப்பில் மாறி-நீள எழுத்து சரத்தை குறிப்பிடுகிறது. நீங்கள் உங்கள் தரவுத்தளத்தை உருவாக்கும் போது தரவுத்தள எழுத்து தொகுப்பை குறிப்பிடுகிறீர்கள். ஆரக்கிள் ஒரு எழுத்து மதிப்பை VARCHAR2 நெடுவரிசையில் நீங்கள் குறிப்பிட்டபடி, வெற்று-பேடிங் இல்லாமல், மதிப்பு நெடுவரிசையின் நீளத்தை விட அதிகமாக இல்லை எனில் சேமிக்கிறது.

NUMBER தரவு வகை
NUMBER தரவு வகை பூஜ்ஜியம் மற்றும் நேர்மறை மற்றும் எதிர்மறை நிலையான எண்களை 1.0 x 10-130 இலிருந்து ஆனால் 1.0 x 10126 வரை உள்ளடங்காமல் இருக்கும். 1.0 x 10126, பின்னர் Oracle ஒரு பிழையை வழங்குகிறது. ஒவ்வொரு NUMBER மதிப்புக்கும் 1 முதல் 22 பைட்டுகள் தேவை. இதைக் கணக்கில் எடுத்துக் கொண்டால், ஒரு குறிப்பிட்ட எண் தரவு மதிப்பு NUMBER(p)க்கான பைட்டுகளில் உள்ள நெடுவரிசையின் அளவை, p என்பது கொடுக்கப்பட்ட மதிப்பின் துல்லியமானது, பின்வரும் சூத்திரத்தைப் பயன்படுத்தி கணக்கிடலாம்: சுற்று((நீளம்(p)+கள்)/2))+1 எண் நேர்மறையாக இருந்தால் s பூஜ்ஜியத்திற்கும், எண் எதிர்மறையாக இருந்தால் 1 க்கும் சமம்.

கூடுதலாக, பூஜ்ய மதிப்புகளை சேமிப்பது பற்றிய ஆவணத்தில் இருந்து ஒரு பகுதியை எடுத்துக் கொள்வோம்.

பூஜ்யம் என்பது ஒரு நெடுவரிசையில் மதிப்பு இல்லாதது. பூஜ்யங்கள் காணாமல் போன, தெரியாத அல்லது பொருந்தாத தரவைக் குறிக்கின்றன. தரவு மதிப்புகள் கொண்ட நெடுவரிசைகளுக்கு இடையில் அவை விழுந்தால் அவை தரவுத்தளத்தில் சேமிக்கப்படும். இந்த சந்தர்ப்பங்களில், நெடுவரிசையின் நீளத்தை (பூஜ்ஜியம்) சேமிக்க அவர்களுக்கு 1 பைட் தேவைப்படுகிறது. ஒரு வரிசையில் உள்ள nullகளுக்கு சேமிப்பிடம் தேவையில்லை, ஏனெனில் புதிய வரிசை தலைப்பு முந்தைய வரிசையில் மீதமுள்ள நெடுவரிசைகள் பூஜ்யமாக இருப்பதைக் குறிக்கிறது. எடுத்துக்காட்டாக, அட்டவணையின் கடைசி மூன்று நெடுவரிசைகள் பூஜ்யமாக இருந்தால், இந்த நெடுவரிசைகளுக்கு தரவு எதுவும் சேமிக்கப்படாது.

இந்த தரவுகளின் அடிப்படையில், நாங்கள் பகுத்தறிவை உருவாக்குகிறோம். தரவுத்தளம் AL32UTF8 குறியாக்கத்தைப் பயன்படுத்துகிறது என்று நாங்கள் கருதுகிறோம். இந்த குறியாக்கத்தில், ரஷ்ய எழுத்துக்கள் 2 பைட்டுகளை ஆக்கிரமிக்கும்.

1) A மற்றும் X, ஒரு 'Y' புலத்தின் மதிப்பு 1 பைட் எடுக்கும், புலம் x 'D' இன் மதிப்பு 2 பைட்டுகள் ஆகும்
2) B மற்றும் Y, b இல் உள்ள 'Vasya' மதிப்பு 10 எழுத்துகள் வரை இடைவெளிகளுடன் பேட் செய்யப்படும் மற்றும் 14 பைட்டுகளை எடுக்கும், d இல் உள்ள 'Vasya' 8 பைட்டுகளை எடுக்கும்.
3) C மற்றும் K. இரண்டு புலங்களும் NULL மதிப்பைக் கொண்டுள்ளன, அவற்றுக்குப் பிறகு குறிப்பிடத்தக்க புலங்கள் உள்ளன, எனவே அவை 1 பைட்டை ஆக்கிரமித்துள்ளன.
4) C மற்றும் Z. இரண்டு புலங்களும் NULL மதிப்பைக் கொண்டுள்ளன, ஆனால் Z புலம் அட்டவணையில் கடைசியாக உள்ளது, எனவே இது இடத்தை எடுத்துக் கொள்ளாது (0 பைட்டுகள்). புலம் C 1 பைட்டை ஆக்கிரமித்துள்ளது.
5) K மற்றும் Z. முந்தைய வழக்கைப் போன்றது. K புலத்தில் உள்ள மதிப்பு Z – 1 இல் 0 பைட்டை ஆக்கிரமித்துள்ளது.
6) I மற்றும் J. ஆவணங்களின்படி, இரண்டு மதிப்புகளும் 2 பைட்டுகளை எடுக்கும். ஆவணத்திலிருந்து எடுக்கப்பட்ட சூத்திரத்தைப் பயன்படுத்தி நீளத்தைக் கணக்கிடுகிறோம்: சுற்று( (1 + 0)/2) +1 = 1 + 1 = 2.
7) J மற்றும் X. J புலத்தில் உள்ள மதிப்பு 2 பைட்டுகளை எடுக்கும், X புலத்தில் உள்ள மதிப்பு 2 பைட்டுகளை எடுக்கும்.

மொத்தத்தில், சரியான விருப்பங்கள்: C மற்றும் K, I மற்றும் J, J மற்றும் X.

T_I குறியீட்டின் கிளஸ்டரிங் காரணி தோராயமாக என்னவாக இருக்கும்?

create table t (i integer);
 
insert into t select rownum from dual connect by level <= 10000;
 
create index t_i on t(i);

  • சுமார் பத்துகள்
  • சுமார் நூறுகள்
  • சுமார் ஆயிரக்கணக்கான
  • சுமார் பல்லாயிரக்கணக்கானவர்கள்

பதில்ஆரக்கிள் ஆவணங்களின்படி (12.1 இலிருந்து மேற்கோள் காட்டப்பட்டுள்ளது):

ஒரு பி-ட்ரீ குறியீட்டிற்கு, குறியீட்டு க்ளஸ்டரிங் காரணி ஒரு குறியீட்டு மதிப்பு தொடர்பாக வரிசைகளின் இயற்பியல் குழுவை அளவிடுகிறது.

குறியீட்டு கிளஸ்டரிங் காரணியானது, குறிப்பிட்ட வினவல்களுக்கு ஒரு குறியீட்டு ஸ்கேன் அல்லது முழு டேபிள் ஸ்கேன் மிகவும் திறமையானதா என்பதை உகப்பாக்கி தீர்மானிக்க உதவுகிறது). குறைந்த கிளஸ்டரிங் காரணி ஒரு திறமையான குறியீட்டு ஸ்கேன் என்பதைக் குறிக்கிறது.

அட்டவணையில் உள்ள தொகுதிகளின் எண்ணிக்கைக்கு நெருக்கமாக இருக்கும் ஒரு கிளஸ்டரிங் காரணி, அட்டவணைத் தொகுதிகளில் குறியீட்டு விசையால் வரிசைகள் வரிசைப்படுத்தப்பட்டுள்ளன என்பதைக் குறிக்கிறது. தரவுத்தளம் முழு டேபிள் ஸ்கேன் செய்தால், தரவுத்தளமானது குறியீட்டு விசையால் வரிசைப்படுத்தப்பட்ட வட்டில் சேமிக்கப்படும் வரிசைகளை மீட்டெடுக்க முனைகிறது. வரிசைகளின் எண்ணிக்கைக்கு அருகில் இருக்கும் ஒரு கிளஸ்டரிங் காரணி, குறியீட்டு விசையுடன் தொடர்புடைய தரவுத்தளத் தொகுதிகள் முழுவதும் வரிசைகள் சீரற்ற முறையில் சிதறிக்கிடப்பதைக் குறிக்கிறது. தரவுத்தளம் முழு டேபிள் ஸ்கேன் செய்தால், தரவுத்தளமானது இந்த குறியீட்டு விசையின் மூலம் எந்த வரிசைப்படுத்தப்பட்ட வரிசையிலும் வரிசைகளை மீட்டெடுக்காது.

இந்த வழக்கில், தரவு சிறந்த முறையில் வரிசைப்படுத்தப்படுகிறது, எனவே கிளஸ்டரிங் காரணி அட்டவணையில் உள்ள ஆக்கிரமிக்கப்பட்ட தொகுதிகளின் எண்ணிக்கைக்கு சமமாக அல்லது நெருக்கமாக இருக்கும். நிலையான தொகுதி அளவு 8 கிலோபைட்டுகளுக்கு, சுமார் ஆயிரம் குறுகிய எண் மதிப்புகள் ஒரு தொகுதிக்குள் பொருந்தும் என்று நீங்கள் எதிர்பார்க்கலாம், எனவே தொகுதிகளின் எண்ணிக்கை, அதன் விளைவாக, கிளஸ்டரிங் காரணி சுமார் பத்துகள்.

N இன் எந்த மதிப்புகளில் பின்வரும் ஸ்கிரிப்ட் நிலையான அமைப்புகளுடன் வழக்கமான தரவுத்தளத்தில் வெற்றிகரமாகச் செயல்படுத்தப்படும்?

create table t (
    a varchar2(N char),
    b varchar2(N char),
    c varchar2(N char),
    d varchar2(N char));
 
create index t_i on t (a, b, c, d);

  • 100
  • 200
  • 400
  • 800
  • 1600
  • 3200
  • 6400

பதில்ஆரக்கிள் ஆவணங்களின்படி (11.2 இலிருந்து மேற்கோள் காட்டப்பட்டுள்ளது):

தருக்க தரவுத்தள வரம்புகள்

பொருள்
வரம்பு வகை
வரம்பு மதிப்பு

குறியீடுகளால்
அட்டவணைப்படுத்தப்பட்ட நெடுவரிசையின் மொத்த அளவு
75% டேட்டாபேஸ் பிளாக் அளவு கழித்தல் சில மேல்நிலை

எனவே, அட்டவணைப்படுத்தப்பட்ட நெடுவரிசைகளின் மொத்த அளவு 6Kb ஐ விட அதிகமாக இருக்கக்கூடாது. அடுத்து என்ன நடக்கும் என்பது தேர்ந்தெடுக்கப்பட்ட அடிப்படை குறியாக்கத்தைப் பொறுத்தது. AL32UTF8 குறியாக்கத்திற்கு, ஒரு எழுத்து அதிகபட்சமாக 4 பைட்டுகளை ஆக்கிரமிக்கலாம், எனவே மோசமான சூழ்நிலையில், சுமார் 6 எழுத்துகள் 1500 கிலோபைட்டுகளுக்குள் பொருந்தும். எனவே, ஆரக்கிள் N = 400 இல் குறியீட்டு உருவாக்கத்தை அனுமதிக்காது (மோசமான முக்கிய நீளம் 1600 எழுத்துகள் * 4 பைட்டுகள் + வரிசை நீளமாக இருக்கும் போது), N = 200 இல் (அல்லது குறைவாக) குறியீட்டை உருவாக்குவது எந்த பிரச்சனையும் இல்லாமல் வேலை செய்யும்.

APPEND குறிப்பைக் கொண்ட INSERT ஆபரேட்டர், நேரடி பயன்முறையில் தரவை ஏற்றும் வகையில் வடிவமைக்கப்பட்டுள்ளது. தூண்டுதல் தொங்கும் அட்டவணையில் அதைப் பயன்படுத்தினால் என்ன ஆகும்?

  • தரவு நேரடி பயன்முறையில் ஏற்றப்படும், தூண்டுதல் எதிர்பார்த்தபடி செயல்படும்
  • தரவு நேரடி பயன்முறையில் ஏற்றப்படும், ஆனால் தூண்டுதல் செயல்படுத்தப்படாது
  • தரவு வழக்கமான முறையில் ஏற்றப்படும், தூண்டுதல் செயல்படும்
  • தரவு வழக்கமான பயன்முறையில் ஏற்றப்படும், ஆனால் தூண்டுதல் செயல்படுத்தப்படாது
  • தரவு ஏற்றப்படாது, பிழை பதிவு செய்யப்படும்

பதில்அடிப்படையில், இது தர்க்கத்தின் கேள்வி அதிகம். சரியான பதிலைக் கண்டுபிடிக்க, நான் பின்வரும் பகுத்தறிவு மாதிரியைப் பரிந்துரைக்கிறேன்:

  1. நேரடி பயன்முறையில் செருகுவது ஒரு தரவுத் தொகுதியின் நேரடி உருவாக்கம் மூலம் செய்யப்படுகிறது, SQL இயந்திரத்தைத் தவிர்த்து, அதிக வேகத்தை உறுதி செய்கிறது. எனவே, தூண்டுதலை செயல்படுத்துவதை உறுதி செய்வது மிகவும் கடினம், சாத்தியமற்றது இல்லை என்றால், இதில் எந்த அர்த்தமும் இல்லை, ஏனெனில் இது இன்னும் தீவிரமாக செருகுவதை மெதுவாக்கும்.
  2. தூண்டுதலை இயக்கத் தவறினால், அட்டவணையில் உள்ள தரவு ஒரே மாதிரியாக இருந்தால், தரவுத்தளத்தின் ஒட்டுமொத்த நிலை (பிற அட்டவணைகள்) இந்தத் தரவு செருகப்பட்ட பயன்முறையைப் பொறுத்தது. இது வெளிப்படையாக தரவு ஒருமைப்பாட்டை அழிக்கும் மற்றும் உற்பத்தியில் ஒரு தீர்வாக பயன்படுத்த முடியாது.
  3. கோரப்பட்ட செயல்பாட்டைச் செய்ய இயலாமை பொதுவாக பிழையாகக் கருதப்படுகிறது. ஆனால் இங்கே நாம் APPEND என்பது ஒரு குறிப்பு என்பதை நினைவில் கொள்ள வேண்டும், மேலும் குறிப்புகளின் பொதுவான தர்க்கம் என்னவென்றால், முடிந்தால் அவை கணக்கில் எடுத்துக்கொள்ளப்படும், ஆனால் இல்லையெனில், குறிப்பை கணக்கில் எடுத்துக் கொள்ளாமல் ஆபரேட்டர் செயல்படுத்தப்படுவார்.

எனவே எதிர்பார்த்த பதில்தான் தரவு சாதாரண (SQL) பயன்முறையில் ஏற்றப்படும், தூண்டுதல் சுடும்.

ஆரக்கிள் ஆவணங்களின்படி (8.04 இலிருந்து மேற்கோள் காட்டப்பட்டுள்ளது):

கட்டுப்பாடுகளை மீறினால், எச்சரிக்கைகள் அல்லது பிழைச் செய்திகள் இல்லாமல், வழக்கமான செருகும் பாதையைப் பயன்படுத்தி, அறிக்கையை தொடர்ச்சியாகச் செயல்படுத்தும். ஒரு விதிவிலக்கு என்பது ஒரு பரிவர்த்தனையின் போது ஒரே அட்டவணையை ஒன்றுக்கு மேற்பட்ட முறை அணுகும் அறிக்கைகள் மீதான கட்டுப்பாடு, இது பிழை செய்திகளை ஏற்படுத்தும்.
எடுத்துக்காட்டாக, டேபிளில் தூண்டுதல்கள் அல்லது குறிப்பு ஒருமைப்பாடு இருந்தால், நீங்கள் நேரடி-சுமை INSERT (தொடர் அல்லது இணை), அத்துடன் PARALLEL குறிப்பு அல்லது பிரிவு ஏதேனும் இருந்தால், APPEND குறிப்பு புறக்கணிக்கப்படும்.

பின்வரும் ஸ்கிரிப்ட் செயல்படுத்தப்படும்போது என்ன நடக்கும்?

create table t(i integer not null primary key, j integer references t);
 
create trigger t_a_i after insert on t for each row
declare
    pragma autonomous_transaction;
begin
    insert into t values (:new.i + 1, :new.i);
    commit;
end;
/
 
insert into t values (1, null);

  • வெற்றிகரமான செயல்படுத்தல்
  • தொடரியல் பிழை காரணமாக தோல்வி
  • பிழை: தன்னாட்சி பரிவர்த்தனை செல்லுபடியாகாது
  • அதிகபட்ச அழைப்பு கூட்டை மீறுவது தொடர்பான பிழை
  • வெளிநாட்டு விசை மீறல் பிழை
  • பூட்டுகள் தொடர்பான பிழை

பதில்அட்டவணை மற்றும் தூண்டுதல் மிகவும் சரியாக உருவாக்கப்பட்டுள்ளது மற்றும் இந்த செயல்பாடு சிக்கல்களுக்கு வழிவகுக்கக்கூடாது. தூண்டுதலில் தன்னாட்சி பரிவர்த்தனைகளும் அனுமதிக்கப்படுகின்றன, இல்லையெனில் பதிவு செய்வது சாத்தியமில்லை, எடுத்துக்காட்டாக.

முதல் வரிசையைச் செருகிய பிறகு, ஒரு வெற்றிகரமான தூண்டுதல் துப்பாக்கிச் சூடு இரண்டாவது வரிசையைச் செருகுவதற்கு வழிவகுக்கும், தூண்டுதல் மீண்டும் சுடுவதற்கு காரணமாகிறது, மூன்றாவது வரிசையைச் செருகுகிறது, மேலும் அழைப்புகளின் அதிகபட்ச கூட்டை மீறுவதால் அறிக்கை தோல்வியடையும் வரை. இருப்பினும், மற்றொரு நுட்பமான புள்ளி நாடகத்திற்கு வருகிறது. தூண்டுதல் செயல்படுத்தப்படும் நேரத்தில், முதலில் செருகப்பட்ட பதிவிற்கான உறுதி இன்னும் முடிக்கப்படவில்லை. எனவே, ஒரு தன்னாட்சி பரிவர்த்தனையில் இயங்கும் ஒரு தூண்டுதல், இதுவரை செய்யப்படாத ஒரு பதிவுக்கு வெளிநாட்டு விசையைக் குறிப்பிடும் ஒரு வரிசையை அட்டவணையில் செருக முயற்சிக்கிறது. இதன் விளைவாக ஒரு காத்திருப்பு (தன்னாட்சி பரிவர்த்தனையானது முக்கிய பரிவர்த்தனையானது தரவைச் செருக முடியுமா என்பதைப் பார்க்க காத்திருக்கிறது) மற்றும் அதே நேரத்தில் முக்கிய பரிவர்த்தனை தூண்டுதலுக்குப் பிறகு தன்னாட்சி பரிவர்த்தனை தொடர்ந்து செயல்படும் வரை காத்திருக்கிறது. ஒரு முட்டுக்கட்டை ஏற்படுகிறது, இதன் விளைவாக, பூட்டுகள் தொடர்பான காரணங்களால் தன்னாட்சி பரிவர்த்தனை ரத்து செய்யப்படுகிறது.

பதிவு செய்த பயனர்கள் மட்டுமே கணக்கெடுப்பில் பங்கேற்க முடியும். உள்நுழையவும், தயவு செய்து.

கடினமாக இருந்ததா?

  • இரண்டு விரல்களைப் போல, நான் உடனடியாக எல்லாவற்றையும் சரியாக முடிவு செய்தேன்.

  • உண்மையில் இல்லை, இரண்டு கேள்விகளில் நான் தவறாக இருந்தேன்.

  • பாதியை சரியாக தீர்த்துவிட்டேன்.

  • பதிலை இரண்டு முறை யூகித்தேன்!

  • கருத்துகளில் எழுதுகிறேன்

14 பயனர்கள் வாக்களித்தனர். 10 பயனர்கள் வாக்களிக்கவில்லை.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்