


{"id":187,"date":"2011-02-19T09:38:20","date_gmt":"2011-02-19T07:38:20","guid":{"rendered":"http:\/\/lwibs01.gm.fh-koeln.de\/blogs\/sqlexpert\/?p=187"},"modified":"2011-02-20T11:41:49","modified_gmt":"2011-02-20T09:41:49","slug":"fallstricke-kapitel-11","status":"publish","type":"post","link":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/2011\/02\/19\/fallstricke-kapitel-11\/","title":{"rendered":"Fallstricke, Kapitel 11"},"content":{"rendered":"<h3>ALTER TABLE<\/h3>\n<ol>\n<li>Bei einem ALTER-Table MODIFY Spalte gibt es keine automatische Datentypkonvertierung, d.h. das \u00c4ndern einer Spalte wird abgewiesen, wenn die Spalte Daten enth\u00e4lt und der Datentyp nicht passt oder die L\u00e4nge , z.B. VARCHAR(100) nicht ausreicht.<\/li>\n<li>ALTER Table MODIFY Spalte kann nur ausgef\u00fchrt werden, wenn die zugrunde liegenden\u00a0 CONSTRAINTS erf\u00fcllt bleiben.<\/li>\n<li>Das Schl\u00fcsselwort COLUMNS kommt in ALTER TABLE <strong>ADD nicht <\/strong>vor: ALTER TABLE Test <strong>ADD <\/strong>Spaltenname; ist korrekt.\u00a0 Aber um die Verwirrung zu erh\u00f6hen ist ALTER TABLE Test <strong>RENAME COLUMN <\/strong>Spalte to Spalte_neu ; korrekt.<\/li>\n<li>Ein CONSTRAINT l\u00f6scht man mit einem ALTER TABLE DROP CONSTRAINT, nicht mit DROP CONSTRAINT.<\/li>\n<li>Alle DDL-Befehle, wie ALTER, CREATE oder DROP beinhalten ein automatisches COMMIT.<\/li>\n<li>Man kann eine Spalte in einer Tabelle mit ALTER TABLE XYZ DROP Spalte l\u00f6schen, alternativ kann man eine Spalte auch auf UNUSED setzen: ALTER TABLE XYZ SET UNUSED\u00a0 Spalte;.\u00a0 Allerdings ist die Spalte auch nach einem UNUSED nicht mehr verf\u00fcgbar (RECOVER) , der Befehl dient nur dazu, die Performance zu erh\u00f6hen.<\/li>\n<li>Mit ALTER TABLE table_name DROP UNUSED COLUMNS; werden alle UNUSED COLUMNS gel\u00f6scht.<\/li>\n<li>Ein ALTER TABLE DROP PRIMARY KEY oder ALTER TABLE DROP UNIQUE l\u00f6scht auch den zugrunde liegenden Index.<\/li>\n<li>Ein\u00a0 CREATE TABLE oder ein ALTER TABLE kann nur eine USING-Index-Klausel benutzen, die sich auf einen Prim\u00e4rschl\u00fcssel oder einen UNIQUE-Index bezieht (Frage 10, Seite 481).<\/li>\n<\/ol>\n<h3>FLASHBACK<\/h3>\n<ol>\n<li>Mit diesem ORACLE-Befehl kann man komplette Tabellen rekonstruieren, Daten wiederherstellen oder SELECTs auf einem Datenbestand in der Vergangenheit ausf\u00fchren.<\/li>\n<li>Dazu muss der RECYCLEBIN mit ALTER SESSION SET recyclebin ON; eingestellt sein.<\/li>\n<li>PURGE Table TEST;\u00a0 oder DROP TABLE Test PURGE;\u00a0 l\u00f6scht die Tabelle TEST\u00a0 aus dem Papierkorb. danach ist kein FLASHBACK mehr m\u00f6glich.<\/li>\n<li>Man kann mit FLASHBACK eine Tabelle auch auf einen fr\u00fcheren Zeitpunkt (SCN, TIMESTAMP oder RESTORE POINT) zur\u00fcckspielen, allerdings nur, wenn die Tabelle mit ALTER TABLE test_f ENABLE ROW MOVEMENT; darauf vorbereitet wurde.<\/li>\n<li>Die SCN ist eine Art numerischer Schl\u00fcssel f\u00fcr Transaktionen, der vom Oracle-System automatisch mit jeder Transaktion vergeben wird.<\/li>\n<li>Flashbacks k\u00f6nnen nur ausgef\u00fchrt werden, wenn vorher kein ALTER TABLE auf die Tabelle ausgef\u00fchrt wurde.<\/li>\n<li>FLASHBACKS fahren nur den letzten DROP-Befehl zur\u00fcck, wenn Tabellen zweimal gl\u00f6scht wurden.<\/li>\n<\/ol>\n<h4>Syntax f\u00fcr flashback<\/h4>\n<p class=\"lead\"><em> CREATE TABLE Test_f (NR Number);<br \/>\nINSERT into Test_f VALUES (2);<br \/>\nCOMMIT;<br \/>\nDROP TABLE test_f;<br \/>\nFLASHBACK TABLE TEST_F TO BEFORE DROP;<br \/>\nSELECT * FROM test_F;<\/em><\/p>\n<h4>Externe Tabellen<\/h4>\n<ol>\n<li>Eine externe Tabelle ist eine Tabelle, deren Metadaten in der Datenbank abgespeichert ist, w\u00e4hrend die Daten selber au\u00dferhalb der Datenbank liegen. Sie werden dazu eingesetzt, Dateien, die normalerweise nicht in der Datenbank gespeichert sind, f\u00fcr einen SELECT zug\u00e4nglich zu machen. Sie ersetzen damit Werkzeuge wie SQL*LOADER oder Data Pump.<\/li>\n<li>Die Daten einer externen Tabelle liegen in einem Verzeichnis , dass auf dem Datenbankserver mit dem Befehl CREATE DIRECTORY angelegt werden muss.<\/li>\n<li>Externe Tabellen k\u00f6nnen mit einem SELECT abgefragt werden, aber es kann keine andere DML-Operation darauf angewendet werden.<\/li>\n<li>Externe Tabellen k\u00f6nnen keine Spalten vom Typ BLOB, CONSTRAINT oder UNUSED Spalten besitzen.<\/li>\n<\/ol>\n<h4>Directory<\/h4>\n<ol>\n<li> Ein CREATE DIRECTORY NAME AS &#8218;Verzeichnis&#8216;, erzeugt einen Zeiger im Dateisystem des Datenbankservers.<\/li>\n<li>DIRECTORY werden f\u00fcr BFiles und externe Tabellen verwendet.<\/li>\n<li>Das Directory ist nur ein Zeiger und pr\u00fcft nicht, ob das Verzeichnis tats\u00e4chlich existiert und beschreibbar ist.<\/li>\n<li>CREATE DIRECTORY erfordert ein eigenen SYSTEM-GRANT und sollte normalerweise nur von Systemadministrator ausgef\u00fchrt werden.<\/li>\n<li>Lesender \/Schreibender Zugriff wird durch ein GRANT READ | WRITE on\u00a0 directory to user;\u00a0 vergeben.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>ALTER TABLE Bei einem ALTER-Table MODIFY Spalte gibt es keine automatische Datentypkonvertierung, d.h. das \u00c4ndern einer Spalte wird abgewiesen, wenn die Spalte Daten enth\u00e4lt und der Datentyp nicht passt oder die L\u00e4nge , z.B. VARCHAR(100) nicht ausreicht. ALTER Table MODIFY Spalte kann nur ausgef\u00fchrt werden, wenn die zugrunde liegenden\u00a0 CONSTRAINTS erf\u00fcllt bleiben. Das Schl\u00fcsselwort COLUMNS&#8230;  <a href=\"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/2011\/02\/19\/fallstricke-kapitel-11\/\" class=\"more-link\" title=\"Read Fallstricke, Kapitel 11\"><?php _e(\"Read more &raquo;\",\"wpbootstrap\"); ?><\/a><\/p>\n","protected":false},"author":23,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[254],"tags":[328,330,323,331,339,329,338,333,326,334,335,336,337,271,332],"class_list":["post-187","post","type-post","status-publish","format-standard","hentry","category-11-managing-schema-objects","tag-alter","tag-commit","tag-constraint","tag-create","tag-directory","tag-drop","tag-externe-tabelle","tag-flashback","tag-index","tag-purge","tag-recyclebin","tag-scn","tag-transaktion","tag-unique","tag-unused"],"acf":[],"_links":{"self":[{"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/posts\/187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/comments?post=187"}],"version-history":[{"count":42,"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/posts\/187\/revisions"}],"predecessor-version":[{"id":396,"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/posts\/187\/revisions\/396"}],"wp:attachment":[{"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/media?parent=187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/categories?post=187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gm.fh-koeln.de\/sqlexpert\/wp-json\/wp\/v2\/tags?post=187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}