it-swarm-eu.dev

Proč je zkrácen DDL?

Mám dotaz na rozhovor, který byl položen během mého rozhovoru. Odpověděl jsem na otázku, ale tazatel nebyl mou odpovědí tak přesvědčen. Takže, někdo mě prosím opravte s mým porozuměním?

Q. Proč je zkrácena DDL Kde jako DML je Smazat? Oba dělají téměř stejnou práci (odstranění řádků)

Ans. Když používáme zkrácení, přidělíme celý prostor přidělený daty bez uložení do undo-tabulkového prostoru. V případě smazání ale vkládáme všechna data do tabulkového prostoru zpět a poté všechna data odstraňujeme.

Pokud někdo zná nejlepší odpověď na výše uvedené, vysvětlete prosím.

15
Ravi

Rozlišení DML versus DDL není tak jasné, jak naznačují jejich jména, takže někdy se věci trochu zablácené.

Oracle jasně klasifikuje TRUNCATE jako DDL v Concepts Guide, ale DELETE jako DML.

Hlavní body, které daly TRUNCATE do tábora DDL na Oracle, jak tomu rozumím, jsou:

  • TRUNCATE může změnit parametry úložiště (parametr NEXT) a ty jsou součástí definice objektu - to je v táboře DDL.
  • TRUNCATE provádí implicitní commit a nelze jej vrátit zpět (stranou vzad) - většina (všech?) DDL operací v Oracle to dělá, žádné DML ne.

Skutečnost, že TRUNCATE neběží ON DELETE triggery ho také nastavují na rozdíl od běžných DML operací (ale některé operace DML s přímou cestou také přeskočí triggery, takže to není jasný indikátor).

Stejná dokumentace uvádí, že DELETE generuje UNDO, ale TRUNCATE ne, takže vaše tvrzení je v tomto ohledu správné. (Všimněte si, že TRUNCATE nevytváří některé REDO, takže zkrácení může být přehráno v případě obnovy/obnovy.) Ale některé operace NOLOGGING mohou také produkovat snížené UNDO (není jisté) téměř vůbec), takže to podle mého názoru není ani jasný ukazatel.

Takže bych to shrnul jako:

  • truncate není „transakční“ v tom smyslu, že se zavazuje a nelze jej vrátit zpět, a může upravovat atributy ukládání objektů. Není to tedy obyčejný DML - Oracle ho klasifikuje jako DDL.
  • delete je obyčejný příkaz DML.
15
Mat

Myslím, že truncate je podobné drop, alter, create, protože všichni pracují na tabulce, tj. Všichni jsou příkazy na úrovni tabulky. Zatímco 'odstranit' je podobné insert, select, update, všechny práce na řádcích, tj. Všechny jsou příkazy na úrovni řádků.

2
RahulDeep Attri