it-swarm-eu.dev

Import schématu do nového nebo jiného tabulkového prostoru

Existuje vhodný způsob importu schématu do Oracle 11gR2 pomocí jediného nového nebo jiného tabulkového prostoru, než kde data pocházejí?

Jako příklad jsem exportoval BLOG_DATA z OLDDB, kde jsou všechna uživatelská data uložena v tabulkovém prostoru USERS.

Na NEWDB bych chtěl importovat schéma BLOG_DATA, ale ukládat uživatelské objekty do tabulkového prostoru BLOG_DATA vytvořeného speciálně pro tohoto uživatele.

Vytvořil jsem uživatele BLOG_DATA, vytvořil tabulkový prostor BLOG_DATA a nastavil ho jako výchozí tabulkový prostor pro tohoto uživatele a přidal příslušnou neomezenou kvótu.

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

Schéma bylo exportováno z OLDDB s něčím podobným

exp blog_data/[email protected] file=blog_data.dmp 

Po přečtení Philovy vynikající odpovědi níže jsem zjistil, že jsem zvědavý :

Protože data nemají jiné místo, než je výchozí tabulkový prostor - jediný tabulkový prostor, na který má uživatel kvótu - bude to účinně nutit umístit všechny uživatelské objekty do tohoto výchozího tabulkového prostoru?

imp blog_data/[email protected] file=blog_data.dmp

Vložilo by to celé schéma blog_data do tabulkového prostoru blog_data na NEWDB? Existuje nějaký důvod, proč by to nefungovalo nebo že bych narazil na problémy s určitými objekty atd.?

aktualizace:

Udělal jsem rychlý test a zjistil jsem, že tomu tak je. Imp umísťuje objekty do výchozího tabulkového prostoru pro daného uživatele za předpokladu, že jej nemůže umístit do původního tabulkového prostoru (např. tabulkový prostor neexistuje). Úplné vysvětlení: http://www.dolicapax.org/?p=57

Přesto se domnívám, že použití datové pumpy, jakou navrhuje Phil, může být preferovanou možností.

13
Roy

Při importu pomocí obslužného programu Oracle imp není ve skutečnosti možné určit jiný tabulkový prostor. Jako řešení však můžete tabulky předem vytvořit vytvořením ROWS=N importovat do tabulkového prostoru USERS, poté alter table mytable move tablespace BLOG_DATA; pro každou tabulku je přesuňte do nového tabulkového prostoru a poté import proveďte znovu pomocí IGNORE=Y parametr ignorovat chyby vytvoření tabulky a importovat všechna data.

Pokud byla data exportována pomocí datové pumpy (expdp), (stranou by všichni měli používat tyto dny, nikoli staré staré exp/imp nástroje) můžete snadno importovat do jiného tabulkového prostoru pomocí REMAP_TABLESPACE parametr.

např:

impdp scott/[email protected] file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA
15
Philᵀᴹ

Měli byste postupovat podle níže uvedených kroků: -

  • Exportujte uživatele
  • Proveďte import pomocí příkazu
    imp system/manager file=export.dmp indexfile=newfile.sql
    Tím se data importují a všechny definice se uloží do newfile.sql.
  • Vypusťte potřebné objekty.
  • Spusťte skript newfile.sql po změně tabulkových prostorů.
  • Import ze zálohy pro potřebné objekty.
0
Md Wasi