Şemayı yeni veya farklı tablo alanına aktarma


13

Bir şemayı, verilerin kaynaklandığı yerden yeni veya farklı bir tablo alanı kullanarak Oracle 11gR2'ye aktarmanın uygun bir yolu var mı?

Örnek olarak, tüm kullanıcı verilerinin USERS tablo alanında saklandığı OLDDB'den BLOG_DATA verdim.

NEWDB'de, BLOG_DATA şemasını almak istiyorum, ancak kullanıcı nesnelerini, bu kullanıcı için özel olarak oluşturulan BLOG_DATA tablo alanında depolamak istiyorum.

BLOG_DATA kullanıcısı oluşturdum, BLOG_DATA tablo alanını oluşturdum ve bu kullanıcı için varsayılan tablo alanı olarak ayarladım ve uygun bir sınırsız kota ekledim.

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

Şema OLDDB'den aşağıdaki gibi bir şeyle dışa aktarıldı

exp blog_data/secretpassword@OLDDB file=blog_data.dmp 

Phil'in aşağıdaki mükemmel cevabını okuduktan sonra kendimi merak ettim :

Verilerin varsayılan tablo alanından (kullanıcının kotasına sahip olduğu tek tablo alanı) başka bir yeri olmadığından, bu, imp'yi tüm kullanıcı nesnelerini varsayılan tablo alanına koymak için etkili bir şekilde zorlar mı?

imp blog_data/secretpassword@NEWDB file=blog_data.dmp

Bu daha sonra blog_data şemasının tamamını NEWDB'deki blog_data tablo alanına yerleştirir mi? Bunun işe yaramamasının ya da belirli nesnelerle vb. Sorunları yaşamanın bir nedeni var mı?

Güncelleme:

Hızlı bir test yaptım ve bunu böyle buldum. Impnesneleri orijinal tablo alanına yerleştiremediği takdirde, bu tablo için varsayılan tablo alanına yerleştirir (örn. tablo alanı mevcut değildir). Tam açıklama: http://www.dolicapax.org/?p=57

Yine de, Phil'in önerdiği gibi Data Pump kullanmanın tercih edilen seçenek olabileceğini düşünüyorum.


Eski expyardımcı program kullanılarak expdpmı (veri pompası) kullanılarak dışa aktarıldı mı?
Philᵀᴹ

Örnekte, yukarıda gösterildiği gibi geleneksel exp yardımcı programı ile ihraç edilmiştir. Ben sadece kolayca expdp kullanmak ve eski bir db sunucusundan dosyayı almak, bu yeni bir tablo alanına geçiş daha kolay olur herhalde varsayalım?
Roy

Her ikisini de cevabımda ele aldım. Veri pompasını kullanın - bu görevi gerçekleştirmek daha kolaydır
Philᵀᴹ

Yanıtlar:


15

Oracle impyardımcı programını kullanarak içe aktarırken farklı bir tablo alanı belirtmek aslında mümkün değildir . Ancak, geçici bir çözüm olarak, tablo ROWS=Nalanına bir içe aktarma yaparak tabloları önceden oluşturabilir USERS, ardından alter table mytable move tablespace BLOG_DATA;her tablonun bunları yeni tablo alanına taşımaları IGNORE=Yiçin tablo oluşturma hatalarını yok saymak ve tümünü içe aktarmak için parametreyle yeniden içe aktarma yapabilirsiniz veri.

Veriler Data Pump ( expdp) kullanılarak dışa aktarıldıysa (bir yana, herkes eski miras exp/ impyardımcı programlar yerine bugünlerde bunu kullanmalıdır) REMAP_TABLESPACEparametresini kullanarak başka bir tablo alanına kolayca aktarabilirsiniz .

Örneğin:

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA

Çok teşekkür ederim Phil. Merak ediyordum: Eğer kullanıcı içe aktarılan yalnızca varsayılan tablo alanında bir kotaya sahipse, bu, imp'nin veri kaynağındaki düzenden bağımsız olarak tüm varsayılan nesneleri bu varsayılan tablo alanına yerleştirmeye zorlar mı?
Roy

Ben benzer bir şey üzerinde çalışıyorum ama bizim QA env üretimi maç için istiyorum çünkü expdp / impdp kullanarak bir bütün DB geçiş. Remap_tablespace kullanırsanız, her şemayı başka bir tek tablo alanına yeniden eşleştirir, ancak ben impdp komutunu bir kez şema başına ve remap_tablespace kullanarak çalıştırabileceğimi düşünüyorum. Bu işi başarmalıdır.
Nicolas de Fontenay

0

Aşağıdaki adımları izlemelisiniz: -

  • Kullanıcıyı dışa aktar
  • Komutu kullanarak içe aktarma gerçekleştir
    imp system/manager file=export.dmp indexfile=newfile.sql
    Bu, verileri içe aktarır ve tüm tanımları içine kaydeder newfile.sql.
  • Gerekli nesneleri bırakın.
  • newfile.sqlTablo alanlarını değiştirdikten sonra komut dosyasını çalıştırın .
  • Gerekli nesneler için yedeklemeden içe aktarın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.