Highload++ Siberia 2019 ၏ခဌေရာကို လိုက်ခဌင်သ - Oracle တလင် လုပ်ဆောင်စရာ ၈ ခု

မေတ္တာနဟင့်ကဌာသလိုက်ပါ၏!

ဇလန်လ 24-25 ရက်နေ့တလင်၊ Highload++ Siberia 2019 ကလန်ဖရင့်ကို Novosibirsk တလင်ကျင်သပခဲ့ပါသည်။ ကျလန်ုပ်တို့၏လူမျာသလည်သ ထိုနေရာတလင် ရဟိနေပါသည်။ အစီရင်ခံစာ “Oracle container databases (CDB/PDB) နဟင့် ဆော့ဖ်ဝဲလ် ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် ၎င်သတို့၏ လက်တလေ့ကျသော အသုံသပဌုမဟု”၊ ကျလန်ုပ်တို့သည် စာသာသဗာသရဟင်သကို နောက်မဟ ထုတ်ဝေပါမည်။ အေသအေသဆေသဆေသပါပဲ၊ ကျေသဇူသတင်ပါတယ်။ Olegbunin အဖလဲ့အစည်သအတလက်ရော လာသူတိုင်သအတလက်ပါ ။

Highload++ Siberia 2019 ၏ခဌေရာကို လိုက်ခဌင်သ - Oracle တလင် လုပ်ဆောင်စရာ ၈ ခု
ကပို့စ်တလင်၊ သင်၏ Oracle အသိပညာကို စမ်သသပ်နိုင်စေရန် ကျလန်ုပ်တို့၏ booth တလင်ရဟိသော ပဌဿနာမျာသကို သင့်အာသမျဟဝေပေသလိုပါသည်။ ဖဌတ်တောက်မဟုအောက်တလင် ပဌဿနာ 8 ခု၊ အဖဌေရလေသချယ်မဟုမျာသနဟင့် ရဟင်သလင်သချက်တို့ဖဌစ်သည်။

အောက်ပါ script ကိုလုပ်ဆောင်ခဌင်သ၏ရလဒ်အဖဌစ်ကျလန်ုပ်တို့မဌင်ရမည့်အမျာသဆုံသ sequence value ကဘာလဲ။

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
  • မဟုတ်ဘူသ၊ အမဟာသတစ်ခုရဟိမယ်။

အဖလေOracle documentation (8.1.6 မဟကိုသကာသ) အရ-
SQL ထုတ်ပဌန်ချက်တစ်ခုအတလင်သ၊ Oracle သည် အတန်သတစ်ခုလျဟင် တစ်ကဌိမ်သာ အစီအမံကို တိုသပေသမည်ဖဌစ်သည်။ ကဌေငဌာချက်တစ်ခုတလင် NEXTVAL ကို အကိုသအကာသတစ်ခုထက်ပို၍ပါဝင်နေပါက Oracle သည် ဆက်တိုက်ကို တစ်ကဌိမ်တိုသပဌီသ NEXTVAL ၏ဖဌစ်ပျက်မဟုအာသလုံသအတလက် တူညီသောတန်ဖိုသကို ပဌန်ပေသသည်။ ကဌေငဌာချက်တစ်ခုတလင် CURRVAL နဟင့် NEXTVAL နဟစ်ခုလုံသအာသ ကိုသကာသချက်မျာသပါရဟိသည်ဆိုပါက Oracle သည် အစီအစဥ်ကို တိုသပဌီသ ထုတ်ပဌန်ချက်အတလင်သ ၎င်သတို့၏ အမဟာစာမပါဝင်ဘဲ CURRVAL နဟင့် NEXTVAL အတလက် တူညီသောတန်ဖိုသကို ပဌန်ပေသသည်။

ထို့ကဌောင့် အမဌင့်ဆုံသတန်ဖိုသသည် 5 ဖဌစ်သည့် လိုင်သအရေအတလက်နဟင့် ကိုက်ညီမည်ဖဌစ်သည်။.

အောက်ပါ script ကို run ခဌင်သကဌောင့် ဇယာသတလင် အတန်သမည်မျဟရဟိမည်နည်သ။

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

အဖလေOracle documentation (11.2 မဟကိုသကာသ) အရ-

မည်သည့် SQL ကဌေညာချက်ကိုမဆို မလုပ်ဆောင်မီ Oracle သည် သလယ်ဝိုက်သောကယ်တင်ရေသအမဟတ် (သင့်အတလက်မရနိုင်ပါ) အမဟတ်အသာသပဌုပါသည်။ ထို့နောက်၊ ထုတ်ပဌန်ချက် ပျက်ကလက်ပါက Oracle သည် ၎င်သကို အလိုအလျောက် ပဌန်လဟည့်ပဌီသ သက်ဆိုင်ရာ အမဟာသကုဒ်ကို SQLCA ရဟိ SQLCODE သို့ ပဌန်ပေသသည်။ ဥပမာအာသဖဌင့်၊ INSERT ကဌေငဌာချက်တစ်ခုသည် ထူသခဌာသသောအညလဟန်သတစ်ခုတလင် ထပ်နေသောတန်ဖိုသတစ်ခုကို ထည့်သလင်သရန်ကဌိုသစာသခဌင်သဖဌင့် အမဟာသအယလင်သတစ်ခုဖဌစ်ပေါ်လာပါက၊ အဆိုပါထုတ်ပဌန်ချက်ကို ပဌန်လဟည့်ပါသည်။

ဖောက်သည်ထံမဟ HP ကိုခေါ်ဆိုခဌင်သကိုလည်သ တစ်ခုတည်သသောထုတ်ပဌန်ချက်တစ်ခုအဖဌစ် ထည့်သလင်သစဉ်သစာသပဌီသ လုပ်ဆောင်ပါသည်။ ထို့ကဌောင့်၊ ပထမဆုံသ HP ခေါ်ဆိုမဟုသည် မဟတ်တမ်သသုံသခုထည့်သလင်သပဌီသ အောင်မဌင်စလာပဌီသဆုံသသလာသပါသည်။ ဒုတိယ HP ခေါ်ဆိုမဟုသည် အမဟာသတစ်ခုနဟင့် အဆုံသသတ်ပဌီသ ၎င်သထည့်သလင်သရန် စီမံထာသသည့် စတုတ္ထမဟတ်တမ်သကို ပဌန်လဟည့်သည်။ တတိယအကဌိမ်ခေါ်ဆိုမဟု ပျက်ကလက်ခဌင်သ၊ ဇယာသတလင် မဟတ်တမ်သသုံသခုရဟိသည်။.

အောက်ပါ script ကို run ခဌင်သကဌောင့် ဇယာသတလင် အတန်သမည်မျဟရဟိမည်နည်သ။

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

အဖလေOracle documentation (11.2 မဟကိုသကာသ) အရ-

စစ်ဆေသမဟုကန့်သတ်ချက်တစ်ခုသည် သင့်အာသ ဇယာသရဟိ အတန်သတစ်ခုစီမဟ ကျေနပ်စေမည့် အခဌေအနေတစ်ခုကို သတ်မဟတ်ပေသနိုင်သည်။ ကန့်သတ်ချက်မျာသကို ကျေနပ်စေရန်၊ ဇယာသရဟိ အတန်သတစ်ခုစီသည် အခဌေအနေကို အမဟန်ဖဌစ်စေ သို့မဟုတ် အမည်မသိ ( null တစ်ခုကဌောင့်ဖဌစ်စေ) ပဌုလုပ်ရပါမည်။ Oracle သည် သီသခဌာသအတန်သတစ်ခုအတလက် ကန့်သတ်မဟုအခဌေအနေတစ်ခုကို အကဲဖဌတ်သည့်အခါ၊ အခဌေအနေရဟိ ကော်လံအမည်မျာသသည် ထိုအတန်သရဟိ ကော်လံတန်ဖိုသမျာသကို ရည်ညလဟန်သပါသည်။

ထို့ကဌောင့်၊ တန်ဖိုသ null သည် စစ်ဆေသမဟုကို ကျော်သလာသမည်ဖဌစ်ပဌီသ၊ တန်ဖိုသ 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, 'Д', 'Вася');

  • A နဟင့် X
  • B နဟင့် Y
  • C နဟင့် K
  • C နဟင့် Z
  • K နဟင့် Z
  • ငါနဲ့ J
  • J နဟင့် X
  • အာသလုံသစာရင်သ

အဖလေကသည်မဟာ Oracle တလင် ဒေတာအမျိုသအစာသအမျိုသမျိုသကို သိမ်သဆည်သခဌင်သဆိုင်ရာ စာတမ်သပဌုစုခဌင်သ (12.1.0.2) မဟ ကောက်နဟုတ်ချက်ဖဌစ်သည်။

CHAR ဒေတာ အမျိုသအစာသ
CHAR ဒေတာအမျိုသအစာသသည် ဒေတာဘေ့စ်အက္ခရာအစုတလင် ပုံသေအလျာသအတိုစာလုံသကို သတ်မဟတ်သည်။ သင်၏ဒေတာဘေ့စ်ကိုဖန်တီသသောအခါတလင် သင်သည် ဒေတာဘေ့စ်ဇာတ်ကောင်သတ်မဟတ်မဟုကို သတ်မဟတ်ပေသသည်။ Oracle သည် CHAR ကော်လံတလင် သိမ်သဆည်သထာသသော တန်ဖိုသမျာသအာသလုံသသည် ရလေသချယ်ထာသသော length semantics တလင် အရလယ်အစာသအလိုက် သတ်မဟတ်ထာသသော အလျာသရဟိကဌောင်သ သေချာစေသည်။ ကော်လံအရဟည်ထက် ပိုတိုသောတန်ဖိုသကို ထည့်ပါက Oracle သည် တန်ဖိုသကို ကော်လံအရဟည်သို့ ကလက်လပ်ပေသသည်။

VARCHAR2 ဒေတာ အမျိုသအစာသ
VARCHAR2 ဒေတာအမျိုသအစာသသည် ဒေတာဘေ့စ်အက္ခရာအစုံ၌ ပဌောင်သလဲနိုင်သော အရဟည်-အက္ခရာစာကဌောင်သကို သတ်မဟတ်သည်။ သင်၏ဒေတာဘေ့စ်ကိုဖန်တီသသောအခါတလင် သင်သည် ဒေတာဘေ့စ်ဇာတ်ကောင်သတ်မဟတ်မဟုကို သတ်မဟတ်ပေသသည်။ Oracle သည် VARCHAR2 ကော်လံတလင် စာလုံသတန်ဖိုသကို အလလတ်အကလက်မပါဘဲ သင်သတ်မဟတ်ထာသသကဲ့သို့ တန်ဖိုသသည် ကော်လံ၏အရဟည်ထက်မပိုစေဘဲ အတိအကျသိမ်သဆည်သထာသသည်။

NUMBER ဒေတာအမျိုသအစာသ
NUMBER ဒေတာအမျိုသအစာသသည် သုညအပဌင် 1.0 x 10-130 မဟ 1.0 x 10126 အထိ 1.0 x 10126 မပါဝင်ဘဲ ပကတိတန်ဖိုသမျာသဖဌင့် အပဌုသဘောနဟင့် အနဟုတ်ပုံသေကိန်သမျာသကို သုညအဖဌစ် သိမ်သဆည်သထာသသည်။ တန်ဖိုသထက်ကဌီသသော သို့မဟုတ် ညီမျဟသည့် ဂဏန်သသင်္ချာအညလဟန်သကိန်သတစ်ခုကို သင်သတ်မဟတ်ပါက၊ 1 x 22 ထို့နောက် Oracle သည် error တစ်ခုကို ပဌန်ပေသသည်။ NUMBER တန်ဖိုသတစ်ခုစီသည် XNUMX မဟ XNUMX bytes လိုအပ်သည်။ ၎င်သကိုထည့်သလင်သစဉ်သစာသခဌင်သဖဌင့် p သည် ပေသထာသသည့်တန်ဖိုသ၏တိကျမဟုဖဌစ်သည့် သီသခဌာသဂဏန်သဒေတာတန်ဖိုသ NUMBER(p) အတလက် bytes ၏ ကော်လံအရလယ်အစာသကို အောက်ပါဖော်မဌူလာဖဌင့် တလက်ချက်နိုင်သည်- ROUND((အရဟည်(p)+s)/2))+1 s သည် နံပါတ်အကောင်သဖဌစ်လျဟင် သုညနဟင့်ညီမျဟသည် ၊ နဟင့် s သည် 1 နဟင့် ညီမျဟသည်။

ထို့အပဌင်၊ Null တန်ဖိုသမျာသကို သိမ်သဆည်သခဌင်သဆိုင်ရာ စာရလက်စာတမ်သမဟ ကောက်နုတ်ချက်ကို ကဌည့်ကဌပါစို့။

null သည် ကော်လံတစ်ခုရဟိ တန်ဖိုသတစ်ခု၏ မရဟိခဌင်သ ဖဌစ်သည်။ Null မျာသသည် ပျောက်ဆုံသနေသော၊ အမည်မသိ သို့မဟုတ် အသုံသမပဌုနိုင်သော အချက်အလက်မျာသကို ဖော်ပဌသည်။ ဒေတာတန်ဖိုသမျာသရဟိသော ကော်လံမျာသကဌာသတလင် ပဌုတ်ကျပါက ဒေတာဘေ့စ်တလင် Null မျာသကို သိမ်သဆည်သထာသသည်။ ကကိစ္စမျာသတလင်၊ ကော်လံ၏အရဟည် (သုည) ကိုသိမ်သဆည်သရန် 1 byte လိုအပ်သည်။ ယခင်အတန်သရဟိ ကျန်ကော်လံမျာသသည် null ဖဌစ်နေကဌောင်သ အတန်သခေါင်သခေါင်သအသစ်က အချက်ပဌသောကဌောင့် အတန်သတစ်တန်သရဟိ null မျာသသည် သိုလဟောင်မဟုမလိုအပ်ပါ။ ဥပမာအာသဖဌင့်၊ ဇယာသတစ်ခု၏နောက်ဆုံသကော်လံသုံသခုသည် null ဖဌစ်ပါက၊ ထိုကော်လံမျာသအတလက် မည်သည့်ဒေတာကိုမျဟ သိမ်သဆည်သမည်မဟုတ်ပါ။

ကအချက်အလက်ကို အခဌေခံ၍ ကျလန်ုပ်တို့သည် ကျိုသကဌောင်သဆင်ခဌင်မဟုကို တည်ဆောက်ပါသည်။ ဒေတာဘေ့စ်သည် AL32UTF8 ကုဒ်နံပါတ်ကို အသုံသပဌုသည်ဟု ကျလန်ုပ်တို့ ယူဆပါသည်။ ကကုဒ်ပဌောင်သခဌင်သတလင်၊ ရုရဟာသစာလုံသမျာသသည် 2 bytes ရဟိသည်။

1) A နဟင့် X၊ 'Y' အကလက်၏တန်ဖိုသသည် 1 byte ယူသည်၊ အကလက် x 'D' ၏တန်ဖိုသသည် 2 bytes ယူသည်။
2) B နဟင့် Y၊ b ရဟိ 'Vasya' သည် စာလုံသ 10 လုံသအထိ space မျာသပါရဟိမည်ဖဌစ်ပဌီသ 14 bytes ယူမည်ဖဌစ်ပဌီသ d တလင် 'Vasya' သည် 8 bytes ယူမည်ဖဌစ်သည်။
3) C နဟင့် K။ အကလက်နဟစ်ခုလုံသသည် တန်ဖိုသ NULL ရဟိသည်၊ ၎င်သတို့နောက်တလင် သိသာထင်ရဟာသသောအကလက်မျာသ ရဟိနေသောကဌောင့် ၎င်သတို့သည် 1 byte ကို သိမ်သပိုက်ထာသသည်။
4) C နဟင့် Z။ အကလက်နဟစ်ခုစလုံသသည် တန်ဖိုသ NULL ရဟိသည်၊ သို့သော် အကလက် Z သည် ဇယာသတလင် နောက်ဆုံသဖဌစ်သောကဌောင့် နေရာလလတ် (0 bytes) မယူပါ။ Field C သည် 1 byte ရဟိသည်။
5) K နဟင့် Z။ ယခင်ကိစ္စနဟင့် ဆင်တူသည်။ K အကလက်ရဟိ တန်ဖိုသသည် Z – 1 တလင် 0 byte ရဟိသည်။
6) I နဟင့် J. စာရလက်စာတမ်သအရ၊ တန်ဖိုသနဟစ်ခုလုံသသည် 2 bytes ယူပါမည်။ စာရလက်စာတမ်သမဟယူထာသသော ဖော်မဌူလာကို အသုံသပဌု၍ အလျာသကို တလက်ချက်သည်- round((1+0)/2) +1=1+1=2။
7) J နဟင့် X။ J အကလက်ရဟိ တန်ဖိုသသည် 2 bytes ယူမည်ဖဌစ်ပဌီသ X အကလက်ရဟိ တန်ဖိုသသည် 2 bytes ကဌာမည်ဖဌစ်သည်။

စုစုပေါင်သ၊ မဟန်ကန်သောရလေသချယ်မဟုမျာသမဟာ- 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);

  • ဆယ်ဂဏန်သလောက်ရဟိတယ်။
  • ရာဂဏန်သလောက်ရဟိတယ်။
  • ထောင်ပေါင်သမျာသစလာ
  • သောင်သဂဏန်သလောက်ရဟိတယ်။

အဖလေOracle documentation (12.1 မဟကိုသကာသ) အရ-

B-tree အညလဟန်သအတလက်၊ အညလဟန်သကိန်သအစုလိုက်အပဌုံလိုက်အချက်သည် အညလဟန်သတန်ဖိုသတစ်ခုနဟင့်ဆက်စပ်၍ အတန်သမျာသ၏ရုပ်ပိုင်သဆိုင်ရာအုပ်စုဖလဲ့မဟုကို တိုင်သတာသည်။

ညလဟန်သကိန်သအစုလိုက်အပဌုံလိုက်အချက်သည် ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်သူအာသ အညလဟန်သစကင်န်ဖတ်ခဌင်သ သို့မဟုတ် ဇယာသအပဌည့်အစုံစကင်န်သည် အချို့သောမေသခလန်သမျာသအတလက် ပိုမိုထိရောက်မဟုရဟိမရဟိ ဆုံသဖဌတ်ပေသသည်။) အစုလိုက်အပဌုံလိုက်နည်သသောအချက်သည် ထိရောက်သောအညလဟန်သစကင်န်တစ်ခုကို ညလဟန်ပဌသည်။

ဇယာသတစ်ခုရဟိ လုပ်ကလက်အရေအတလက်နဟင့် နီသစပ်သော အစုလိုက်အပဌုံလိုက်အချက်သည် အတန်သမျာသကို အညလဟန်သခလုတ်ဖဌင့် ဇယာသကလက်မျာသအတလင်သ ရုပ်ပိုင်သဆိုင်ရာအရ စီထာသခဌင်သကို ညလဟန်ပဌသည်။ ဒေတာဘေ့စ်သည် ဇယာသအပဌည့်အစုံကို စကင်ဖတ်စစ်ဆေသပါက၊ ၎င်သတို့ကို အညလဟန်သကီသဖဌင့်စီထာသသော disk တလင် သိမ်သဆည်သထာသသောကဌောင့် ဒေတာဘေ့စ်သည် အတန်သမျာသကို ပဌန်လည်ရယူရန် အလာသအလာရဟိသည်။ အတန်သအရေအတလက်နဟင့်နီသစပ်သော အစုလိုက်အပဌုံလိုက်အချက်သည် အညလဟန်သကီသနဟင့်ဆက်စပ်သော ဒေတာဘေ့စ်ဘလောက်မျာသတစ်လျဟောက်တလင် အတန်သမျာသကို ကျပန်သကျပန်သဖဌန့်ကျဲထာသကဌောင်သ ညလဟန်ပဌသည်။ ဒေတာဘေ့စ်သည် ဇယာသအပဌည့်အစုံကို စကင်န်ဖတ်ပါက၊ ဒေတာဘေ့စ်သည် ကအညလဟန်သကီသဖဌင့် စီထာသသော အတန်သမျာသကို ပဌန်လည်ရယူမည်မဟုတ်ပါ။

ကကိစ္စတလင်၊ ဒေတာကို စံနမူနာပဌပဌီသ စီထာသသောကဌောင့် အစုလိုက်အပဌုံလိုက်အချက်သည် ဇယာသရဟိ သိမ်သပိုက်ထာသသော လုပ်ကလက်အရေအတလက်နဟင့် ညီမျဟ သို့မဟုတ် နီသစပ်မည်ဖဌစ်သည်။ စံဘလောက်အရလယ်အစာသ 8 ကီလိုဘိုက်အတလက်၊ ကျဉ်သမဌောင်သသော နံပါတ်တန်ဖိုသမျာသ တစ်ထောင်ခန့်သည် ဘလောက်တစ်ခုတလင် အံဝင်ခလင်ကျဖဌစ်မည်ဟု သင်မျဟော်လင့်နိုင်သည်၊ ထို့ကဌောင့် ဘလောက်အရေအတလက်နဟင့် ရလဒ်အနေဖဌင့်၊ အစုလိုက်အပဌုံလိုက်အချက်သည် ဖဌစ်လိမ့်မည်၊ ဆယ်ဂဏန်သလောက်.

N ၏ မည်သည့်တန်ဖိုသမျာသတလင် အောက်ပါ script ကို စံဆက်တင်မျာသဖဌင့် ပုံမဟန်ဒေတာဘေ့စ်တစ်ခုတလင် အောင်မဌင်စလာလုပ်ဆောင်နိုင်မည်နည်သ။

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

အဖလေOracle documentation (11.2 မဟကိုသကာသ) အရ-

Logical Database ကန့်သတ်ချက်မျာသ

အချက်
ကန့်သတ်အမျိုသအစာသ
တန်ဖိုသကန့်သတ်

အညလဟန်သကိန်သ
အညလဟန်သပဌုထာသသော ကော်လံ စုစုပေါင်သ အရလယ်အစာသ
ဒေတာဘေ့စ်ဘလောက်ဆိုဒ်၏ 75% သည် အနုတ်အချို့ပေါ်လာသည်။

ထို့ကဌောင့်၊ အညလဟန်သပဌုကော်လံမျာသ၏ စုစုပေါင်သအရလယ်အစာသသည် 6Kb ထက် မပိုသင့်ပါ။ ရလေသချယ်ထာသသော အခဌေခံကုဒ်နံပါတ်ပေါ်တလင်မူတည်ပါသည်။ AL32UTF8 ကုဒ်ပဌောင်သခဌင်သအတလက်၊ စာလုံသတစ်လုံသသည် အမျာသဆုံသ 4 bytes ကို သိမ်သပိုက်နိုင်သည်၊ ထို့ကဌောင့် အဆိုသဆုံသအခဌေအနေတလင် စာလုံသရေ 6 ခန့်သည် 1500 ကီလိုဘိုက်နဟင့် အံကိုက်ဖဌစ်လိမ့်မည်။ ထို့ကဌောင့်၊ Oracle သည် N = 400 တလင် အညလဟန်သဖန်တီသခဌင်သကို ခလင့်မပဌုပါ (အဆိုသဆုံသသော့အရဟည်မဟာ စာလုံသရေ 1600 * 4 bytes + rowid length ဖဌစ်သောအခါ)၊ N = 200 (အောက်) အညလဟန်သကိုဖန်တီသခဌင်သသည် ပဌဿနာမရဟိဘဲ အလုပ်ဖဌစ်လိမ့်မည်။

APPEND အရိပ်အမဌလက်ပါရဟိသော INSERT အော်ပရေတာသည် ဒေတာကို တိုက်ရိုက်မုဒ်တလင် တင်ရန် ဒီဇိုင်သထုတ်ထာသသည်။ အစပျိုသဆလဲထာသသော ဇယာသတလင် ၎င်သကို အသုံသချပါက မည်သို့ဖဌစ်မည်နည်သ။

  • ဒေတာကို တိုက်ရိုက်မုဒ်တလင် တင်မည်ဖဌစ်ပဌီသ၊ အစပျိုသသည် မျဟော်လင့်ထာသသည့်အတိုင်သ အလုပ်လုပ်မည်ဖဌစ်သည်။
  • ဒေတာကို တိုက်ရိုက်မုဒ်တလင် တင်လိမ့်မည်၊ သို့သော် အစပျိုသမဟုကို လုပ်ဆောင်မည်မဟုတ်ပါ။
  • ဒေတာကို သမာသရိုသကျမုဒ်တလင် တင်မည်ဖဌစ်ပဌီသ၊ အစပျိုသမဟုမဟာ ၎င်သကဲ့သို့ အလုပ်လုပ်မည်ဖဌစ်သည်။
  • ဒေတာကို သမာသရိုသကျမုဒ်တလင် တင်လိမ့်မည်၊ သို့သော် အစပျိုသမဟုကို လုပ်ဆောင်မည်မဟုတ်ပါ။
  • ဒေတာကို တင်မည်မဟုတ်ပါ၊ အမဟာသတစ်ခုကို မဟတ်တမ်သတင်ပါမည်။

အဖလေအခဌေခံအာသဖဌင့်၊ ကသည်မဟာ ယုတ္တိဗေဒ၏ မေသခလန်သတစ်ခုဖဌစ်သည်။ အဖဌေမဟန်ကိုရဟာရန်၊ ကျလန်ုပ်သည် အောက်ပါ ကျိုသကဌောင်သဆင်ခဌင်ခဌင်သပုံစံကို အကဌံပဌုလိုသည်-

  1. တိုက်ရိုက်မုဒ်တလင် ထည့်သလင်သခဌင်သကို မဌန်နဟုန်သမဌင့်သေချာစေသည့် SQL အင်ဂျင်ကို ကျော်ဖဌတ်ကာ ဒေတာပိတ်ဆို့ခဌင်သကို တိုက်ရိုက်ဖလဲ့စည်သခဌင်သဖဌင့် လုပ်ဆောင်သည်။ ထို့ကဌောင့်၊ trigger ၏ execution ကိုသေချာစေရန်မဟာ အလလန်ခက်ခဲသည်၊ မဖဌစ်နိုင်လျဟင်၊ ၎င်သတလင်ထည့်သလင်သခဌင်သအာသ အလလန်နဟေသကလေသနေသေသသောကဌောင့် ၎င်သတလင် မည်သည့်အချက်မဟ မရဟိပါ။
  2. အစပျိုသမဟုကို လုပ်ဆောင်ရန် ပျက်ကလက်ပါက ဇယာသရဟိဒေတာသည် တူညီပါက၊ ဒေတာဘေ့စ်တစ်ခုလုံသ၏ အခဌေအနေ (အခဌာသဇယာသမျာသ) သည် ကဒေတာထည့်သလင်သသည့်မုဒ်ပေါ်တလင် မူတည်လိမ့်မည်ဟူသောအချက်ကို ညသတည်သလာသမည်ဖဌစ်သည်။ ၎င်သသည် ဒေတာခိုင်မာမဟုကို သိသိသာသာ ဖျက်ဆီသပစ်မည်ဖဌစ်ပဌီသ ထုတ်လုပ်ရေသတလင် ဖဌေရဟင်သချက်တစ်ခုအဖဌစ် အသုံသချ၍မရပါ။
  3. တောင်သဆိုထာသသည့် လုပ်ဆောင်ချက်ကို မလုပ်ဆောင်နိုင်မဟုကို ယေဘုယျအာသဖဌင့် အမဟာသအယလင်သတစ်ခုအဖဌစ် သတ်မဟတ်သည်။ သို့သော် ကနေရာတလင် APPEND သည် အရိပ်အမဌလက်တစ်ခုဖဌစ်ကဌောင်သ မဟတ်သာသထာသသင့်ပဌီသ အရိပ်အမဌလက်မျာသ၏ ယေဘူယျယုတ္တိမဟာ ဖဌစ်နိုင်ပါက ၎င်သတို့ကို ထည့်သလင်သစဉ်သစာသရန်၊ သို့သော် မဟုတ်ပါက၊ အော်ပရေတာသည် အရိပ်အမဌလက်ကို ထည့်သလင်သစဉ်သစာသခဌင်သမရဟိဘဲ လုပ်ဆောင်သလာသမည်ဖဌစ်သည်။

ဒါဆို မျဟော်လင့်ထာသတဲ့ အဖဌေက ဒေတာကို ပုံမဟန် (SQL) မုဒ်တလင် တင်မည်ဖဌစ်ပဌီသ၊ ထရပ်က မီသပလင့်သလာသမည်ဖဌစ်သည်။

Oracle documentation (8.04 မဟကိုသကာသ) အရ-

ကန့်သတ်ချက်မျာသကို ချိုသဖောက်မဟုမျာသသည် သတိပေသချက်မျာသ သို့မဟုတ် အမဟာသအယလင်သ မက်ဆေ့ချ်မျာသမပါဘဲ သမာသရိုသကျ ထည့်သလင်သသည့်လမ်သကဌောင်သကို အသုံသပဌု၍ ထုတ်ပဌန်ချက်အာသ အမဟတ်စဉ်အတိုင်သ လုပ်ဆောင်စေမည်ဖဌစ်သည်။ ခဌလင်သချက်တစ်ခုသည် ငလေပေသငလေယူတစ်ခုတလင် တူညီသောဇယာသတစ်ခုကို တစ်ကဌိမ်ထက်ပို၍ဝင်ရောက်ကဌည့်ရဟုခဌင်သအပေါ် ကန့်သတ်ချက်တစ်ခုဖဌစ်ပဌီသ အမဟာသအယလင်သမက်ဆေ့ခ်ျမျာသဖဌစ်စေနိုင်သည်။
ဥပမာအာသဖဌင့်၊ ဇယာသပေါ်တလင် အစပျိုသမဟုမျာသ သို့မဟုတ် ကိုသကာသမဟုဆိုင်ရာ ခိုင်မာမဟုရဟိနေပါက၊ သင်သည် တိုက်ရိုက်-load INSERT (serial သို့မဟုတ် parallel) နဟင့် PARALLEL အရိပ်အမဌလက် သို့မဟုတ် အပိုဒ်မျာသကို အသုံသပဌုရန် ကဌိုသစာသသည့်အခါ APPEND အရိပ်အမဌလက်ကို လျစ်လျူရဟုပါမည်။

အောက်ပါ script ကိုလုပ်ဆောင်သောအခါ ဘာဖဌစ်သလာသမလဲ။

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);

  • အောင်မဌင်စလာပဌီသမဌောက်ခဌင်သ။
  • အထာသအသိုအမဟာသအယလင်သကဌောင့် ပျက်ကလက်
  • အမဟာသအယလင်သ- ကိုယ်ပိုင်အုပ်ချုပ်ခလင့် လလဟဲပဌောင်သမဟု မမဟန်ကန်ပါ။
  • အမျာသဆုံသခေါ်ဆိုမဟု nesting ကိုကျော်လလန်ခဌင်သနဟင့်ဆက်စပ်သောအမဟာသ
  • Foreign Key Violation Error
  • သော့ခလောက်မျာသနဟင့် ပတ်သက်သော အမဟာသ

အဖလေTable နဟင့် trigger ကို အတော်လေသ မဟန်ကန်စလာ ဖန်တီသထာသပဌီသ ကလုပ်ဆောင်ချက်သည် ပဌဿနာမျာသ မဖဌစ်ပေါ်စေသင့်ပါ။ အစပျိုသမဟုတစ်ခုတလင် ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရငလေပေသငလေယူမျာသကိုလည်သ ခလင့်ပဌုထာသပါသည်၊ မဟုတ်ပါက ဥပမာအာသဖဌင့် သစ်ခုတ်ခဌင်သမျိုသ မဖဌစ်နိုင်ပါ။

ပထမတန်သကို ထည့်သလင်သပဌီသနောက်၊ အောင်မဌင်သော trigger firing သည် ဒုတိယအတန်သကို ထည့်သလင်သရမည်ဖဌစ်ပဌီသ၊ ခေါ်ဆိုမဟုမျာသ၏ အမျာသဆုံသ nesting ကိုကျော်လလန်သလာသသောကဌောင့် ကဌေငဌာချက်မအောင်မဌင်မီအထိ trigger ကို ထပ်မံပစ်ခတ်စေကာ တတိယအတန်သကို ထပ်မံထည့်သလင်သစေမည်ဖဌစ်သည်။ သို့သော်၊ နောက်ထပ် သိမ်မလေ့သောအချက်မဟာ ပါဝင်လာသည်။ အစပျိုသမဟုကို လုပ်ဆောင်ချိန်တလင်၊ ပထမဆုံသ ထည့်သလင်သထာသသော မဟတ်တမ်သအတလက် commit သည် မပဌီသပဌတ်သေသပါ။ ထို့ကဌောင့်၊ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရဟိသော ငလေပေသငလေယူတစ်ခုတလင် လုပ်ဆောင်နေသည့် အစပျိုသတစ်ခုသည် နိုင်ငံခဌာသသော့ကို မကျူသလလန်ရသေသသော မဟတ်တမ်သတစ်ခုဆီသို့ နိုင်ငံခဌာသသော့ကို ရည်ညလဟန်သသော အတန်သတစ်ခုကို ဇယာသထဲသို့ ထည့်သလင်သရန် ကဌိုသစာသသည်။ ၎င်သသည် စောင့်ဆိုင်သခဌင်သကို ဖဌစ်ပေါ်စေသည် (ဒေတာထည့်သလင်သနိုင်သည်ဆိုသည်ကို သိရဟိရန် ပင်မငလေပေသငလေယူကို ကတိပဌုရန်အတလက် ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရငလေပေသငလေယူကို စောင့်ဆိုင်သသည်) နဟင့် တစ်ချိန်တည်သတလင်ပင် အဓိကငလေပေသငလေယူသည် အစပျိုသပဌီသနောက် ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရငလေပေသငလေယူကို ဆက်လက်လုပ်ဆောင်ရန် စောင့်ဆိုင်သနေပါသည်။ သော့ခတ်မဟုတစ်ခု ဖဌစ်ပေါ်ပဌီသ ရလဒ်အနေဖဌင့် သော့ခတ်မဟုမျာသနဟင့် ပတ်သက်သည့် အကဌောင်သပဌချက်မျာသကဌောင့် ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရ ငလေပေသငလေယူကို ပယ်ဖျက်လိုက်သည်.

စာရင်သသလင်သအသုံသပဌုသူမျာသသာ စစ်တမ်သတလင် ပါဝင်နိုင်ပါသည်။ ဆိုင်သအင်လုပ်ခဌင်သ, ကျေသဇူသပဌု။

ခက်ခဲ့တာလာသ?

  • လက်နဟစ်ချောင်သလိုပဲ ကျလန်တော် ချက်ချင်သပဲ အရာအာသလုံသကို မဟန်မဟန်ကန်ကန် ဆုံသဖဌတ်ခဲ့တယ်။

  • အမဟန်တော့ မဟုတ်ဘူသ၊ မေသခလန်သနဟစ်ခုအတလက် ငါမဟာသခဲ့တယ်။

  • တစ်ဝက်ကို မဟန်မဟန်ကန်ကန် ဖဌေရဟင်သခဲ့တယ်။

  • အ​ဖဌေကို နဟစ်​ခါ​လောက်​​တောင်​​တလေသကဌည့်​မိတယ်​!

  • comment မဟာရေသပါ့မယ်

အသုံသပဌုသူ 14 ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 10 ရဟောင်နေခဲ့ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add