Importowanie schematu do nowego lub innego obszaru tabel

13

Czy istnieje wygodny sposób na zaimportowanie schematu do Oracle 11gR2 przy użyciu jednego nowego lub innego obszaru tabel niż miejsce, z którego pochodzą dane?

Na przykład wyeksportowałem BLOG_DATA z OLDDB, gdzie wszystkie dane użytkownika są przechowywane w obszarze tabel USERS.

Na NEWDB chciałbym zaimportować schemat BLOG_DATA, ale przechowuj obiekty użytkownika w obszarze tabel BLOG_DATA, utworzonym specjalnie dla tego użytkownika.

Utworzyłem użytkownika BLOG_DATA, utworzyłem obszar tabel BLOG_DATA i ustawiłem go jako domyślny obszar tabel dla tego użytkownika i dodałem odpowiedni nieograniczony przydział.

CREATE TABLESPACE blog_data DATAFILE SIZE 1G;

CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;

GRANT connect,resource TO blog_data

Schemat został wyeksportowany z OLDDB za pomocą czegoś podobnego

exp blog_data/secretpassword@OLDDB file=blog_data.dmp 

Po przeczytaniu poniżej doskonałej odpowiedzi Phila zastanawiałem się :

Ponieważ dane nie mają innego miejsca niż domyślny obszar tabel - jedyny obszar tabel, na który użytkownik ma przydział - czy to skutecznie zmusi impa do umieszczenia wszystkich obiektów użytkownika w tym domyślnym obszarze tabel?

imp blog_data/secretpassword@NEWDB file=blog_data.dmp

Czy wówczas umieściłby cały schemat blog_data w obszarze tabel blog_data na NEWDB? Czy jest jakiś powód, dla którego to nie działałoby lub że miałem problemy z niektórymi obiektami itp.?

aktualizacja:

Zrobiłem szybki test i okazało się, że tak jest. Impumieszcza obiekty w domyślnym obszarze tabel dla tego użytkownika, pod warunkiem, że nie może go umieścić w oryginalnym obszarze tabel (np. obszar tabel nie istnieje). Pełne wyjaśnienie: http://www.dolicapax.org/?p=57

Przypuszczam jednak, że używanie Data Pump jak sugeruje Phil może być preferowaną opcją.

Roy
źródło
Czy został wyeksportowany przy użyciu starszego expnarzędzia lub z expdp(pompą danych)?
Philᵀᴹ
W przykładzie został wyeksportowany za pomocą konwencjonalnego narzędzia exp, jak pokazano powyżej. Podejrzewam, że równie łatwo można użyć expdp i pobrać plik ze starego serwera db, czy ułatwiłoby to przejście do nowego obszaru tabel?
Roy,
Oba omówiłem w swojej odpowiedzi. Użyj pompy danych - łatwiej wykonać to zadanie
Philᵀᴹ

Odpowiedzi:

15

W rzeczywistości nie jest możliwe określenie innego obszaru tabel podczas importowania za pomocą impnarzędzia Oracle . Jednak w celu obejścia tego problemu można wstępnie utworzyć tabele, wykonując ROWS=Nimport do obszaru USERStabel, a następnie alter table mytable move tablespace BLOG_DATA;dla każdej tabeli, aby przenieść je do nowego obszaru tabel, a następnie wykonać ponownie import z IGNORE=Yparametrem, aby zignorować błędy tworzenia tabeli i zaimportować wszystkie danych.

Jeśli dane zostały wyeksportowane za pomocą Data Pump ( expdp), (na marginesie, wszyscy powinni korzystać z tych dni, a nie ze starej wersji exp/ impnarzędzi), możesz łatwo zaimportować do innego obszaru tabel za pomocą REMAP_TABLESPACEparametru.

na przykład:

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA
Philᵀᴹ
źródło
Dziękuję bardzo, Phil. Zastanawiałem się: jeśli importowany użytkownik ma wyłącznie limit w domyślnym obszarze tabel, czy zmusi impa do umieszczenia wszystkich importowanych obiektów w tym domyślnym obszarze tabel, niezależnie od układu w źródle danych?
Roy,
Pracuję nad czymś podobnym, ale jest to cała migracja DB przy użyciu expdp / impdp, ponieważ chcę, aby nasze środowisko QA było zgodne z produkcją. Jeśli użyję remap_tablespace, to przemapuje każdy schemat do innego pojedynczego obszaru tabel, jednak myślę, że mogę uruchomić polecenie impdp raz na schemat i używając remap_tablespace. To powinno osiągnąć cel.
Nicolas de Fontenay,
0

Powinieneś wykonać następujące kroki: -

  • Wyeksportuj użytkownika
  • Wykonaj import za pomocą polecenia
    imp system/manager file=export.dmp indexfile=newfile.sql
    Spowoduje to zaimportowanie danych i zapisanie wszystkich definicji newfile.sql.
  • Upuść niezbędne przedmioty.
  • Uruchom skrypt newfile.sqlpo zmianie obszarów tabel.
  • Zaimportuj z kopii zapasowej niezbędnych obiektów.
Md Wasi
źródło