Dani's IT Blog

…moving from Oracle to Software Development

PL/SQL Basics für den DBA, Teil I (…oder wie die Arbeit als DBA Spass macht)

leave a comment »

Dies ist mein erster Blog Eintrag. Ich habe vor eine Serie über “PL/SQL Basics für den DBA” zu schreiben, sowie verschiedene interessante Themen Rund um Oracle zu behandeln. Alle Blog Einträge werden auf Englisch erscheinen, einige Themen, von denen ich denke, dass das Pulbikum im Deutschen Sprachraum genügend gross ist, werden zusätzlich in Deutsch erscheinen. Dazu wird auch die Serie “PL/SQL Basics für den DBA” gehören

[English] As I said in German, I will write all my posts in English and a part of it will be available in German as well. If you prefer English, please look out for the English version of this post.[/English]

Als DBA müssen immer wieder Änderugen an einer Menge von Datenbankobjekten machen. Zum Beispiel:

  • Lese Zugriff auf alle Objekte eines Schemas einem anderen Datenbank Benutzer erteilen
  • Löschen aller Tabellen eines Schemas
  • Verschieben aller Indexe eines Schemas von einem Tablespace in einen anderen

Oftmals sehe ich DBA’s welche versuchen diesen Job mit Hilfe von grafischen Tools, wie Toad oder SqlDeveloper und einem Text Editor auszuführen. Aber eigentlich liesse sich die Arbeit einiges einfacher, mit Hilfe der Standardmittel von SQL und der Oracle Datenbank, ausführen.

Um unser Ziel zu erreichen, können wir die Tatsache nutzen, dass man mit SQL nicht nur Daten, welche in Tabellen gespeichert sind selektieren kann. Es ist auch möglich fixe Textblöcke zu selektieren.

SQL> SELECT 'hello world!' FROM dual;

‘HELLOWORLD!’
————————————
hello world!

Dies können wir nutzen um fixe Textblöcke mit Daten, welche in der Datenbank gespeichert sind zu kombinieren.

SQL> SELECT 'The signs O and '|| dummy ||' are needed to play TicTacToe' FROM dual;

‘THESIGNSOAND’||DUMMY||’ARENEEDEDTOPLAYTICTACTOE’
—————————————————————-
The signs O and X are needed to play TicTacToe

Aber, wie hilft uns das jetzt bei unserer Aufgabe? Erinnern wir uns an den Auftrage “Lösche alle Tabellen eines Schemas”. Die Information welche Tabellen zu einem Schema gehören finden wir in der View USER_TABLES (natürlich auch in ALL_TABLES und DBA_TABLES). Wenn wir diese Informationen mit dem Statement zum Löschen einer Tabelle kombinieren, können wir die Befehle zum Löschen aller Tabellen eines Schemas generieren.


CONNECT t/t

SQL> SELECT ‘DROP TABLE “‘|| table_name ||'”;’ FROM user_tables;
‘DROPTABLE”‘||TABLE_NAME||'”;’
—————————————————————-
DROP TABLE “T2”;
DROP TABLE “T1”;

2 rows selected.

Wer meine Scripts in der eigenen TEST Datenbank nachvollziehen möchte, kann dafür mit den folgenden Statements ein Test Schema erstellen.

CREATE USER t IDENTIFIED BY t;
GRANT CONNECT,RESOURCE TO t;
CONNECT t/t;
CREATE TABLE t1 (x number);
CREATE TABLE t2 (x number);
SELECT table_name FROM user_tables;

Jetzt müssen wir diese Befehle nur noch mittels Copy&Paste in ein geeignetes Tool (sqlplus) kopieren und die DDL Statments ausführen. Falls wir Copy&Paste nicht verwenden können- oder wollen, zum Beispiel, weil es in einem Patch verwendet werden soll, so können wir die Befehle mittels SPOOL aus einem Script in eine Datei schreiben. Diese kann dann via sqlplus als Script ausgeführt werden. Der dafür notwendige Code könnte etwa wie folgt aussehen.

CONNECT t/t

set heading off
set feedback off
spool drop_user_tables.sql
prompt spool drop_tables.log
SELECT 'DROP TABLE "'|| table_name ||'";' FROM user_tables;
prompt spool off
spool off
@drop_user_tables.sql
Advertisements

Written by danirey

June 6, 2009 at 20:40

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: