Jak zaimportować dane do innego tablespace
Oracle nie oferuje parametru do zmiany tablespace podczas importowania danych. Domyślnie importowane obiekty tworzone są w tablespace takim samym z jakiego zostały wyeksportowane nawet mimo tego, że użytkownik ma ustawiony inny domyślny tablespace. Aby zaimportować do innego robimy:
Użytkownik z którego eksportujemy dane (uprawnienia w zasadzie dowolne oprócz tego, że nie może to być DBA):
-- USER SQL
CREATE USER "NIKT1"
PROFILE "DEFAULT"
IDENTIFIED BY "hasło"
DEFAULT TABLESPACE "HART1"
TEMPORARY TABLESPACE "TEMP"
ACCOUNT UNLOCK
-- ROLES
GRANT "RESOURCE" TO NIKT1 ;
GRANT "CONNECT" TO NIKT1 ;
-- SYSTEM PRIVILEGES
GRANT CREATE SESSION TO NIKT1;
Eksport danych:
exp NIKT/hasło file=nikt.dmp log=niktexp.log full=n owner=NIKT1
Użytkownik do którego będziemy importować (ważne jest żeby miał tylko te 2 uprawnienia + unlimited quota na tablespace do którego chcemy ładować dane):
CREATE USER "NIKT2"
PROFILE "DEFAULT"
IDENTIFIED BY "hasło"
DEFAULT TABLESPACE "HART2"
QUOTA UNLIMITED ON "HART2"
ACCOUNT UNLOCK;
-- ROLES
GRANT "CONNECT" TO NIKT2 ;
-- SYSTEM PRIVILEGES
GRANT CREATE TABLE TO "NIKT2"
Import Danych:
imp NIKT2/hasło file=nikt.dmp log=niktimp.log full=n fromuser=NIKT1 touser=NIKT2
A nie łatwiej stworzyć najpierw przestrzeń z wykonanego dmp a następnie po prostu wczytać import? Pobranie skryptu tworzącego przestrzeń z importu jest bardzo proste: strings /sciezka/do/pliku/baza.dmp | grep „CREATE TABLESPACE” >> spaces.sql Następnie edytujemy ten plik, zmieniamy ścieżkę do pliku na taką jaka się nam podoba, wykonujemy skrypt i puszczamy import.
Chyba raczej nie. Ponieważ chcemy zaimportować do przestrzeni o innej nazwie a nie o innej lokalizacji.