haegar4020
Goto Top

Oracle 9.2 - Tablespace ändern bei Datenimport bzw. -export

Schema Kopie per exp und imp soll in andere Tablespaces

Hallo!

Bei unserer Oracle 9.2.0.6 speichert eine Applikation alle Daten unter dem Schema/dem User PROD in der Instanz db01. Die DB-Objekte des Schemas sind in 3 verschiedenen Tablespaces (TS1,TS2,TS3) abgelegt.

Nun möchte ich aus Testzwecken eine Testumgebung erstellen und dazu eine Kopie des Schemas in der gleichen Instanz erstellen. Ich exportiere dazu zuerst die Daten per exp.exe von User PROD:

exp system@db01 file=c:	empprod.dmp owner=PROD consistent=y buffer=20000000

Danach mache ich ein DROP auf den Testuser TEST und erstelle ihn neu mit Default-Tablespace TSTEST.

imp system@db01 file=c:	empprod.dmp fromuser=PROD touser=TEST buffer=20000000


Soweit funktioniert es auch noch. Nur liegen die Tabellen im Schema TEST in den gleichen Tablespaces wie die aus dem Schema PROD (TS1-3), und nicht komplett - nämlich überhaupt nicht - in Tablespace TSTEST.

Gibt es dafür eine Lösung?


Klaus

Content-Key: 61327

Url: https://administrator.de/contentid/61327

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: Biber
Biber 14.06.2007 um 10:45:49 Uhr
Goto Top
Moin haegar4020,

willkommen im Forum.


Ich verstehe Dein Problem in zweifacher Hinsicht nicht:
  • die "kopierten" Daten liegen doch in einem anderen Schema ("Test"). Und jedes Schema, also auch das "Original" ("Prod") verwaltet doch eigene Tablespaces. Dann gibt es doch keine Kollisionen zwischen PROD.TS1 und TEST.TS1 ?
  • und WTF sollte Oracle oder sonst irgendjemand auf die Idee kommen, die "importierten" Daten in einen Tablespace namens TSTEST zu stellen? Da verstehe ich Deine Erwartungshaltung nicht ganz

Grüße
Biber
Mitglied: 27234
27234 14.06.2007 um 11:38:10 Uhr
Goto Top
Hallo,

irgendwo hat Biber schon recht.
Ich kann Dich aber auch verstehen, manchmal möchte man die Tabellen/Indizes halt in einen anderen Tablespace haben.
Ich sehe daher zwei Möglichkeiten:

1. CREATE TABLE TEST.xxx AS SELECT * FROM PROD.xxx;
Vorher dem User TEST den gewünschten Tablespace als Default geben, Indizes, Constraints und Rechte alle
manuell anlegen oder vorab Skripte schreiben.

2. Zwei Exports machen, einen mit, einen ohne Daten (ROWS=N). Den ohne Daten importieren,
Tabellen werden angelegt (im "falschen" TS),
diese mit ALTER TABLE xxx MOVE TABLESPACE xxxx; verschieben und dann den vollen Export (mit Daten) mit der Option
IGNORE=Y importieren.

Gruß - René
Mitglied: haegar4020
haegar4020 14.06.2007 um 14:19:00 Uhr
Goto Top
Erstmal danke für die Anregungen.

@Biber:
ad 1. Als in meinem Oracle gibt es den TS1 nur einmal, und sowohl Tabellen vom Schema PROD als auch vom Schema TEST sind darin enthalten.

ad 2. Nunja, meine Erwartung war, dass der Default-Tablespace (TSTEST) des Schemas greift und die importierten Daten allesamt darin landen.

@René:
ad 1. Da die Tabellen aus einer zugekauften Applikation sind habe ich für die ca. 3000 Tabellen, Views, Constraints etc. keine CREATE Skripts. Mir ist auch kein Verfahren bekannt, wie ich die CREATE Skripts aus einer bestehenden DB erstellen könnte, PHPMyAdmin geht ja nicht für Oracle.

ad 2. wäre ev. noch einen Versuch Wert, die DBObjekte müsste ich ja als Liste aus irgendwelchen Oracle-Systemviews/tables bekommen, dann noch ein regexp-Ersetzen und die ALTER-Statements sollten dastehen.


Ich inzwischen selber noch rumgesucht und bin auch auf einen anderen Lösungsvorschläge gestoßen:

Wie unter Orafaq.com zu lesen ist, wird soll man dem neuen User/Schema keinen UNLIMITED TABLESPACE zugestehen, und auf die alten TS - in meinem Fall die der Produktivdatenbank - keine Quota geben. Danach sollte ein Import mit ignore=y die Objekte im Default-Tablespace des Schemas anlegen. Leider funktioniert das in meinem Fall aber nicht mit allen Objekten. Einige Tabellen hat das imp-Util mit expliziten CREATE TABLE [...] TABLESPACE TS1 etc. anzulegen versucht, ist dann aber an den fehlenden Rechten des Users TEST gescheitert, womit die Daten dann nicht vollständig waren.

Hilft mir vielleicht dieser ominöse transportable tablespace Modus vom imp/exp Utility? Kann ich damit irgendwie den Tablespace beim Import umbiegen?

Klaus
Mitglied: 27234
27234 15.06.2007 um 08:26:27 Uhr
Goto Top
Hallo,

nein, der "Transportable Tablespace"-Modus wird Dir nicht helfen, TTS ist für den Transport zwischen 2 Datenbanken gedacht.
Ein neuer Ansatz:
Bei 3000 Objekten solltest Du mal über eine eigene Testdatenbank auf einem eigenen Server nachdenken oder einen zweite Instanz auf deinem Server erstellen. Somit hättest Du mit Import und Export kein Problem mehr.
Noch eine weitere Sache, es gibt bei Oracle ein Package, welches die Definitionen von alles Objekten liefert, der Name fällt mir im Moment nicht ein, ich melde mich nochmal.

Gruß - René
Mitglied: 27234
27234 15.06.2007 um 09:23:57 Uhr
Goto Top
Hallo,

das Package nennt sich DBMS_METADATA .

Gruß - René