హైలోడ్++ సైబీరియా 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 స్టేట్‌మెంట్‌ను అమలు చేయడానికి ముందు, ఒరాకిల్ ఒక అవ్యక్త సేవ్‌పాయింట్‌ను సూచిస్తుంది (మీకు అందుబాటులో లేదు). అప్పుడు, స్టేట్‌మెంట్ విఫలమైతే, ఒరాకిల్ దానిని స్వయంచాలకంగా వెనక్కి పంపుతుంది మరియు వర్తించే ఎర్రర్ కోడ్‌ని SQLCAలోని SQLCODEకి అందిస్తుంది. ఉదాహరణకు, ఒక ప్రత్యేక సూచికలో నకిలీ విలువను చొప్పించడానికి ప్రయత్నించడం ద్వారా INSERT స్టేట్‌మెంట్ లోపాన్ని కలిగిస్తే, స్టేట్‌మెంట్ వెనక్కి తీసుకోబడుతుంది.

క్లయింట్ నుండి HPకి కాల్ చేయడం కూడా ఒకే స్టేట్‌మెంట్‌గా పరిగణించబడుతుంది మరియు ప్రాసెస్ చేయబడుతుంది. ఈ విధంగా, మొదటి HP కాల్ మూడు రికార్డులను చొప్పించడం ద్వారా విజయవంతంగా పూర్తయింది; రెండవ HP కాల్ లోపంతో ముగుస్తుంది మరియు అది చొప్పించగలిగిన నాల్గవ రికార్డ్‌ను వెనక్కి తీసుకువెళుతుంది; మూడవ కాల్ విఫలమైంది, మరియు పట్టికలో మూడు రికార్డులు ఉన్నాయి.

కింది స్క్రిప్ట్‌ని అమలు చేయడం వల్ల పట్టికలో ఎన్ని అడ్డు వరుసలు ఉంటాయి?

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, శూన్య, 2 మరియు మళ్లీ శూన్యం.

ఏ జతల విలువలు బ్లాక్‌లో ఒకే మొత్తంలో స్థలాన్ని తీసుకుంటాయి?

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, 'Д', 'Вася');

  • A మరియు X
  • బి మరియు వై
  • సి మరియు కె
  • సి మరియు జెడ్
  • K మరియు Z
  • నేను మరియు జె
  • J మరియు X
  • అన్నీ జాబితా చేయబడ్డాయి

సమాధానంఒరాకిల్‌లో వివిధ రకాల డేటాను నిల్వ చేయడంపై డాక్యుమెంటేషన్ (12.1.0.2) నుండి సారాంశాలు ఇక్కడ ఉన్నాయి.

CHAR డేటా రకం
CHAR డేటా రకం డేటాబేస్ క్యారెక్టర్ సెట్‌లో స్థిర-పొడవు అక్షర స్ట్రింగ్‌ను నిర్దేశిస్తుంది. మీరు మీ డేటాబేస్‌ని సృష్టించినప్పుడు డేటాబేస్ క్యారెక్టర్ సెట్‌ను పేర్కొనండి. CHAR నిలువు వరుసలో నిల్వ చేయబడిన అన్ని విలువలు ఎంచుకున్న పొడవు సెమాంటిక్స్‌లో పరిమాణం ద్వారా పేర్కొన్న పొడవును కలిగి ఉండేలా ఒరాకిల్ నిర్ధారిస్తుంది. మీరు కాలమ్ పొడవు కంటే తక్కువ విలువను చొప్పించినట్లయితే, Oracle కాలమ్ పొడవుకు విలువను ఖాళీ ప్యాడ్ చేస్తుంది.

VARCHAR2 డేటా రకం
VARCHAR2 డేటా రకం డేటాబేస్ క్యారెక్టర్ సెట్‌లో వేరియబుల్-లెంగ్త్ క్యారెక్టర్ స్ట్రింగ్‌ను నిర్దేశిస్తుంది. మీరు మీ డేటాబేస్‌ని సృష్టించినప్పుడు డేటాబేస్ క్యారెక్టర్ సెట్‌ను పేర్కొనండి. Oracle మీరు పేర్కొన్న విధంగా VARCHAR2 నిలువు వరుసలో అక్షర విలువను నిల్వ చేస్తుంది, ఎటువంటి ఖాళీ-ప్యాడింగ్ లేకుండా, విలువ కాలమ్ పొడవును మించకుండా ఉంటే.

NUMBER డేటా రకం
NUMBER డేటా రకం 1.0 x 10-130 నుండి 1.0 x 10126 వరకు సంపూర్ణ విలువలతో సున్నా అలాగే ధనాత్మక మరియు ప్రతికూల స్థిర సంఖ్యలను నిల్వ చేస్తుంది. 1.0 x 10126, ఆపై ఒరాకిల్ లోపాన్ని అందిస్తుంది. ప్రతి NUMBER విలువకు 1 నుండి 22 బైట్‌లు అవసరం. దీన్ని పరిగణనలోకి తీసుకుంటే, నిర్దిష్ట సంఖ్యా డేటా విలువ NUMBER(p) కోసం బైట్‌లలోని నిలువు వరుస పరిమాణం, ఇక్కడ p అనేది ఇచ్చిన విలువ యొక్క ఖచ్చితత్వం, క్రింది సూత్రాన్ని ఉపయోగించి లెక్కించవచ్చు: ROUND((పొడవు(p)+లు)/2))+1 ఇక్కడ సంఖ్య సానుకూలంగా ఉంటే s సున్నాకి సమానం మరియు సంఖ్య ప్రతికూలంగా ఉంటే s 1కి సమానం.

అదనంగా, శూన్య విలువలను నిల్వ చేయడం గురించి డాక్యుమెంటేషన్ నుండి సారాంశాన్ని తీసుకుందాం.

కాలమ్‌లో విలువ లేకపోవడాన్ని శూన్య అంటారు. శూన్యాలు తప్పిపోయిన, తెలియని లేదా వర్తించని డేటాను సూచిస్తాయి. డేటా విలువలతో నిలువు వరుసల మధ్య పడిపోతే, అవి డేటాబేస్‌లో నిల్వ చేయబడతాయి. ఈ సందర్భాలలో, కాలమ్ (సున్నా) పొడవును నిల్వ చేయడానికి వారికి 1 బైట్ అవసరం. మునుపటి అడ్డు వరుసలోని మిగిలిన నిలువు వరుసలు శూన్యం అని కొత్త అడ్డు వరుస హెడర్ సంకేతాలు ఇచ్చినందున వరుసలో వెనుకబడిన శూన్యాలకు నిల్వ అవసరం లేదు. ఉదాహరణకు, పట్టికలోని చివరి మూడు నిలువు వరుసలు శూన్యంగా ఉంటే, ఈ నిలువు వరుసల కోసం డేటా నిల్వ చేయబడదు.

ఈ డేటా ఆధారంగా, మేము తార్కికతను రూపొందిస్తాము. డేటాబేస్ AL32UTF8 ఎన్‌కోడింగ్‌ని ఉపయోగిస్తుందని మేము అనుకుంటాము. ఈ ఎన్‌కోడింగ్‌లో, రష్యన్ అక్షరాలు 2 బైట్‌లను ఆక్రమిస్తాయి.

1) A మరియు X, ఫీల్డ్ a 'Y' విలువ 1 బైట్ తీసుకుంటుంది, ఫీల్డ్ x 'D' విలువ 2 బైట్‌లను తీసుకుంటుంది
2) B మరియు Y, '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 నుండి కోట్ చేయబడింది):

B-ట్రీ ఇండెక్స్ కోసం, ఇండెక్స్ క్లస్టరింగ్ కారకం సూచిక విలువకు సంబంధించి వరుసల భౌతిక సమూహాన్ని కొలుస్తుంది.

ఇండెక్స్ క్లస్టరింగ్ కారకం నిర్దిష్ట ప్రశ్నలకు ఇండెక్స్ స్కాన్ లేదా పూర్తి టేబుల్ స్కాన్ మరింత ప్రభావవంతంగా ఉందో లేదో నిర్ణయించడంలో ఆప్టిమైజర్‌కి సహాయపడుతుంది). తక్కువ క్లస్టరింగ్ కారకం సమర్థవంతమైన ఇండెక్స్ స్కాన్‌ను సూచిస్తుంది.

పట్టికలోని బ్లాక్‌ల సంఖ్యకు దగ్గరగా ఉండే క్లస్టరింగ్ కారకం సూచిక కీ ద్వారా టేబుల్ బ్లాక్‌లలో వరుసలు భౌతికంగా ఆర్డర్ చేయబడిందని సూచిస్తుంది. డేటాబేస్ పూర్తి టేబుల్ స్కాన్‌ను చేస్తే, ఇండెక్స్ కీ ద్వారా క్రమబద్ధీకరించబడిన డిస్క్‌లో నిల్వ చేయబడిన అడ్డు వరుసలను డేటాబేస్ తిరిగి పొందుతుంది. వరుసల సంఖ్యకు దగ్గరగా ఉండే క్లస్టరింగ్ కారకం సూచిక కీకి సంబంధించి డేటాబేస్ బ్లాక్‌లలో వరుసలు యాదృచ్ఛికంగా చెల్లాచెదురుగా ఉన్నాయని సూచిస్తుంది. డేటాబేస్ పూర్తి టేబుల్ స్కాన్ చేస్తే, డేటాబేస్ ఈ సూచిక కీ ద్వారా ఏ క్రమబద్ధీకరించబడిన క్రమంలో అడ్డు వరుసలను తిరిగి పొందదు.

ఈ సందర్భంలో, డేటా ఆదర్శంగా క్రమబద్ధీకరించబడుతుంది, కాబట్టి క్లస్టరింగ్ కారకం పట్టికలోని ఆక్రమిత బ్లాక్‌ల సంఖ్యకు సమానంగా లేదా దగ్గరగా ఉంటుంది. 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 నుండి కోట్ చేయబడింది):

లాజికల్ డేటాబేస్ పరిమితులు

<span style="font-family: Mandali; "> అంశం
పరిమితి రకం
పరిమితి విలువ

సూచికలు
సూచిక చేయబడిన నిలువు వరుస మొత్తం పరిమాణం
డేటాబేస్ బ్లాక్ పరిమాణంలో 75% కొంత ఓవర్‌హెడ్‌ను మైనస్ చేస్తుంది

అందువల్ల, సూచిక చేయబడిన నిలువు వరుసల మొత్తం పరిమాణం 6Kb కంటే ఎక్కువ ఉండకూడదు. తర్వాత ఏమి జరుగుతుందో ఎంచుకున్న బేస్ ఎన్‌కోడింగ్‌పై ఆధారపడి ఉంటుంది. AL32UTF8 ఎన్‌కోడింగ్ కోసం, ఒక అక్షరం గరిష్టంగా 4 బైట్‌లను ఆక్రమించగలదు, కాబట్టి చెత్త సందర్భంలో, 6 కిలోబైట్‌లు దాదాపు 1500 అక్షరాలకు సరిపోతాయి. అందువల్ల, ఒరాకిల్ N = 400 వద్ద ఇండెక్స్ సృష్టిని అనుమతించదు (చెత్త సందర్భంలో కీ పొడవు 1600 అక్షరాలు * 4 బైట్లు + రోయిడ్ పొడవు ఉన్నప్పుడు), అయితే N = 200 వద్ద (లేదా అంతకంటే తక్కువ) సూచికను సృష్టించడం సమస్యలు లేకుండా పని చేస్తుంది.

APPEND సూచనతో INSERT ఆపరేటర్ డైరెక్ట్ మోడ్‌లో డేటాను లోడ్ చేయడానికి రూపొందించబడింది. ట్రిగ్గర్ వేలాడుతున్న టేబుల్‌కి దాన్ని వర్తింపజేస్తే ఏమి జరుగుతుంది?

  • డేటా డైరెక్ట్ మోడ్‌లో లోడ్ చేయబడుతుంది, ట్రిగ్గర్ ఊహించిన విధంగా పని చేస్తుంది
  • డేటా డైరెక్ట్ మోడ్‌లో లోడ్ చేయబడుతుంది, కానీ ట్రిగ్గర్ అమలు చేయబడదు
  • డేటా సాంప్రదాయ మోడ్‌లో లోడ్ చేయబడుతుంది, ట్రిగ్గర్ అది పని చేస్తుంది
  • డేటా సంప్రదాయ మోడ్‌లో లోడ్ చేయబడుతుంది, కానీ ట్రిగ్గర్ అమలు చేయబడదు
  • డేటా లోడ్ చేయబడదు, లోపం నమోదు చేయబడుతుంది

సమాధానంప్రాథమికంగా, ఇది తర్కం యొక్క ప్రశ్న. సరైన సమాధానాన్ని కనుగొనడానికి, నేను ఈ క్రింది రీజనింగ్ మోడల్‌ను సూచిస్తాను:

  1. డైరెక్ట్ మోడ్‌లో చొప్పించడం అనేది డేటా బ్లాక్ యొక్క ప్రత్యక్ష నిర్మాణం ద్వారా నిర్వహించబడుతుంది, SQL ఇంజిన్‌ను దాటవేస్తుంది, ఇది అధిక వేగాన్ని నిర్ధారిస్తుంది. అందువల్ల, ట్రిగ్గర్ యొక్క అమలును నిర్ధారించడం చాలా కష్టం, అసాధ్యం కాకపోయినా, మరియు ఇందులో ఎటువంటి పాయింట్ లేదు, ఎందుకంటే ఇది చొప్పించడం ఇప్పటికీ తీవ్రంగా నెమ్మదిస్తుంది.
  2. ట్రిగ్గర్‌ను అమలు చేయడంలో వైఫల్యం, టేబుల్‌లోని డేటా ఒకే విధంగా ఉంటే, డేటాబేస్ మొత్తం స్థితి (ఇతర పట్టికలు) ఈ డేటాను చొప్పించిన మోడ్‌పై ఆధారపడి ఉంటుంది. ఇది స్పష్టంగా డేటా సమగ్రతను నాశనం చేస్తుంది మరియు ఉత్పత్తిలో పరిష్కారంగా వర్తించదు.
  3. అభ్యర్థించిన ఆపరేషన్ చేయలేకపోవడం సాధారణంగా లోపంగా పరిగణించబడుతుంది. కానీ ఇక్కడ మనం గుర్తుంచుకోవాలి, APPEND అనేది సూచన, మరియు సూచనల యొక్క సాధారణ తర్కం ఏమిటంటే, వీలైతే వాటిని పరిగణనలోకి తీసుకుంటారు, కానీ లేకపోతే, సూచనను పరిగణనలోకి తీసుకోకుండా ఆపరేటర్ అమలు చేయబడతారు.

కాబట్టి ఊహించిన సమాధానం డేటా సాధారణ (SQL) మోడ్‌లో లోడ్ చేయబడుతుంది, ట్రిగ్గర్ కాల్చబడుతుంది.

ఒరాకిల్ డాక్యుమెంటేషన్ ప్రకారం (8.04 నుండి కోట్ చేయబడింది):

పరిమితుల ఉల్లంఘనలు హెచ్చరికలు లేదా ఎర్రర్ మెసేజ్‌లు లేకుండా, సాంప్రదాయ చొప్పించు మార్గాన్ని ఉపయోగించి ప్రకటనను సీరియల్‌గా అమలు చేయడానికి కారణమవుతుంది. ఒక మినహాయింపు అనేది లావాదేవీలో ఒకటి కంటే ఎక్కువ సార్లు ఒకే టేబుల్‌ను యాక్సెస్ చేసే స్టేట్‌మెంట్‌లపై పరిమితి, ఇది దోష సందేశాలకు కారణం కావచ్చు.
ఉదాహరణకు, టేబుల్‌పై ట్రిగ్గర్‌లు లేదా రెఫరెన్షియల్ సమగ్రత ఉంటే, మీరు డైరెక్ట్-లోడ్ ఇన్‌సర్ట్ (సీరియల్ లేదా సమాంతరం), అలాగే 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

ఒక వ్యాఖ్యను జోడించండి