Wie kann ich alle Benutzertabellen in Oracle ablegen?
Ich habe Probleme mit Einschränkungen. Wenn ich alles deaktiviere, ist es immer noch nicht möglich.
Wie kann ich alle Benutzertabellen in Oracle ablegen?
Ich habe Probleme mit Einschränkungen. Wenn ich alles deaktiviere, ist es immer noch nicht möglich.
Antworten:
BEGIN
FOR cur_rec IN (SELECT object_name, object_type
FROM user_objects
WHERE object_type IN
('TABLE',
'VIEW',
'MATERIALIZED VIEW',
'PACKAGE',
'PROCEDURE',
'FUNCTION',
'SEQUENCE',
'SYNONYM',
'PACKAGE BODY'
))
LOOP
BEGIN
IF cur_rec.object_type = 'TABLE'
THEN
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '" CASCADE CONSTRAINTS';
ELSE
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"';
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('FAILED: DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"'
);
END;
END LOOP;
FOR cur_rec IN (SELECT *
FROM all_synonyms
WHERE table_owner IN (SELECT USER FROM dual))
LOOP
BEGIN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM ' || cur_rec.synonym_name;
END;
END LOOP;
END;
/
Wenn Sie nur einen wirklich einfachen Weg wollen, dies zu tun. Hier ist ein Skript, das ich in der Vergangenheit verwendet habe
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Dadurch wird eine Reihe von Drop-Befehlen für alle Tabellen im Schema ausgedruckt. Spoolen Sie das Ergebnis dieser Abfrage und führen Sie es aus.
Quelle: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Wenn Sie mehr als nur Tabellen löschen möchten, können Sie Folgendes entsprechend Ihren Anforderungen bearbeiten
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Eine andere Antwort, die für mich funktioniert hat, ist (Dank an http://snipt.net/Fotinakis/drop-all-tables-and-constraints-within-an-oracle-schema/ )
BEGIN
FOR c IN (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE ('DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS');
END LOOP;
FOR s IN (SELECT sequence_name FROM user_sequences) LOOP
EXECUTE IMMEDIATE ('DROP SEQUENCE ' || s.sequence_name);
END LOOP;
END;
Beachten Sie, dass dies sofort nach dem Ausführen funktioniert . Es wird KEIN Skript erstellt, das Sie irgendwo einfügen müssen (wie andere Antworten hier). Es läuft direkt in der DB.
'DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'
. Dies ist erforderlich, wenn die Tabellennamen in Kleinbuchstaben geschrieben sind.
PURGE
am Ende der DROP
Erklärung hinzufügen .
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
Am einfachsten ist es, den Benutzer, dem die Objekte gehören, mit dem Befehl cascade zu löschen.
DROP USER username CASCADE
USER
ist a getrennt von a DATABASE
. DROP USER username CASCADE
arbeitete für mich. Aber in MySQL müsste ich nur DROP DATABASE
ein neues erstellen
Der einfachste Weg wäre, den Tablespace zu löschen und dann den Tablespace wieder aufzubauen. Aber das müsste ich lieber nicht tun. Dies ist ähnlich wie bei Henry, außer dass ich nur die Ergebnismenge in meiner GUI kopiere / einfüge.
SELECT
'DROP'
,object_type
,object_name
,CASE(object_type)
WHEN 'TABLE' THEN 'CASCADE CONSTRAINTS;'
ELSE ';'
END
FROM user_objects
WHERE
object_type IN ('TABLE','VIEW','PACKAGE','PROCEDURE','FUNCTION','SEQUENCE')
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;'
FROM user_tables;
user_tables
ist eine Systemtabelle, die alle Tabellen des Benutzers enthält. Die SELECT-Klausel generiert eine DROP-Anweisung für jede Tabelle, in der Sie das Skript ausführen können
So entfernen Sie alle Objekte im Orakel:
1) Dynamisch
DECLARE
CURSOR IX IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE ='TABLE'
AND OWNER='SCHEMA_NAME';
CURSOR IY IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE
IN ('SEQUENCE',
'PROCEDURE',
'PACKAGE',
'FUNCTION',
'VIEW') AND OWNER='SCHEMA_NAME';
CURSOR IZ IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('TYPE') AND OWNER='SCHEMA_NAME';
BEGIN
FOR X IN IX LOOP
EXECUTE IMMEDIATE('DROP '||X.OBJECT_TYPE||' SCHEMA_NAME.'||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
END LOOP;
FOR Y IN IY LOOP
EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' SCHEMA_NAME.'||Y.OBJECT_NAME);
END LOOP;
FOR Z IN IZ LOOP
EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' SCHEMA_NAME.'||Z.OBJECT_NAME||' FORCE ');
END LOOP;
END;
/
2) Statisch
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables
union ALL
select 'drop '||object_type||' '|| object_name || ';' from user_objects
where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION')
union ALL
SELECT 'drop '
||object_type
||' '
|| object_name
|| ' force;'
FROM user_objects
WHERE object_type IN ('TYPE');
Bitte befolgen Sie die folgenden Schritte.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tb from user_tables)
loop
execute immediate i.tb;
end loop;
commit;
end;
purge RECYCLEBIN;