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. Imp
umieszcza 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ą.
exp
narzędzia lub zexpdp
(pompą danych)?Odpowiedzi:
W rzeczywistości nie jest możliwe określenie innego obszaru tabel podczas importowania za pomocą
imp
narzędzia Oracle . Jednak w celu obejścia tego problemu można wstępnie utworzyć tabele, wykonującROWS=N
import do obszaruUSERS
tabel, a następniealter table mytable move tablespace BLOG_DATA;
dla każdej tabeli, aby przenieść je do nowego obszaru tabel, a następnie wykonać ponownie import zIGNORE=Y
parametrem, 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 wersjiexp
/imp
narzędzi), możesz łatwo zaimportować do innego obszaru tabel za pomocąREMAP_TABLESPACE
parametru.na przykład:
źródło
Powinieneś wykonać następujące kroki: -
imp system/manager file=export.dmp indexfile=newfile.sql
Spowoduje to zaimportowanie danych i zapisanie wszystkich definicji
newfile.sql
.newfile.sql
po zmianie obszarów tabel.źródło