it-swarm-tr.com

Oracle Data Pump Export dosyasının içindeki Şemalar nasıl belirlenir

  • Expdp ile oluşturulan bir Oracle veritabanı yedekleme dosyası (.dmp) var.
  • .Dmp dosyası tüm veritabanının dışa aktarımıydı.
  • Şemaların 1'ini bu döküm dosyasının içinden geri yüklemem gerekiyor.
  • Bu döküm dosyasının içindeki şemaların isimlerini bilmiyorum.
  • Verileri almak için impdp kullanmak için, yüklenecek şemanın adına ihtiyacım var.

Bu yüzden, .dmp dosyasını kontrol etmem ve içindeki tüm şemaları listelemem gerekir, bunu nasıl yaparım?


Güncelleme (2008-09-18 13:02) - Daha detaylı bilgi:

Kullanmakta olduğum şu anki impdp komutu şudur:

impdp user/[email protected] directory=DPUMP_DIR 
      dumpfile=EXPORT.DMP logfile=IMPORT.LOG  

Ve DPUMP_DIR doğru şekilde yapılandırılmış. 

SQL> SELECT directory_path
2  FROM dba_directories
3  WHERE directory_name = 'DPUMP_DIR';

DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\

Ve evet, EXPORT.DMP dosyası bu klasörde tam olarak bulunmuyor. 

İmpdp komutunu çalıştırdığımda aldığım hata mesajı:

Connected to: Oracle Database 10g Enterprise Edition ...
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import

Bu hata mesajı çoğunlukla bekleniyor. İmpdp komutunun şöyle olması gerekir:

impdp user/[email protected] directory=DPUMP_DIR dumpfile=EXPORT.DMP 
      SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA

Fakat bunu yapmak için kaynak şemasına ihtiyacım var.

35
KyleLanser

DMP dosyasını büyük dosyaları işleyebilecek bir düzenleyiciyle açarsanız, şema adlarının belirtildiği alanları bulabilirsiniz. Sadece hiçbir şeyi değiştirmediğinizden emin olun. Orijinal çöplüğün bir kopyasını açtıysanız daha iyi olur.

12
Petros

impdp, dmp parametresini kullanıyorsanız, SQLFILE yedeğinin DDL dosyasını bir dosyaya verir. Örneğin, bunu bir metin dosyasına yerleştirin 

impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt

Ardından, yedek tabloları, kullanıcıları ve şemaları için ddl_dump.txt denetleyin.

Belgelere göre, bu aslında veritabanını değiştirmez:

SQL aslında yürütülmez ve hedef sistem değişmeden kalır.

76
Factor Mystic

Güncelleme (2008-09-19 10:05) - Çözüm:

Çözümüm: Sosyal mühendislik, çok sert kazdım ve şema adını bilen birini buldum.
Teknik Çözüm: .dmp dosyasını aramak did şema adını verir.
Şema adını öğrendiğimde, döküm dosyasını araştırdım ve nerede bulacağımı öğrendim. 

Şema adının .dmp dosyasında görüldüğü yerler:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME>Bu tablo adı/tanımından önce görülmüştür.

  • SCHEMA_LIST 'SOURCE_SCHEMA' Bu .dmp dosyasının sonuna doğru görülmüştür. 

İlginç bir şekilde, SCHEMA_LIST 'SOURCE_SCHEMA' bölümünün etrafında, dökümü oluşturmak için kullanılan komut satırı, kullanılan dizinler, kullanılan par dosyaları, çalıştırıldığı pencereler sürümü ve dışa aktarma oturumu ayarları (dil, tarih biçimleri) vardı.

Yani, problem çözüldü :)

9
KyleLanser

İlk etapta dosyayı oluşturan expdp işinden log dosyasına sahip olmadığınızı varsayarsak, en kolay seçenek muhtemelen SQLFILE parametresini kullanmaktır. ithalat). Daha sonra şema adlarını bu dosyadan alabilirsiniz. Tabii ki ideal değil, çünkü impdp DDL'yi çıkarmak için tüm döküm dosyasını okumak zorunda ve ardından tekrar ilgilendiğiniz şemaya ulaşmak için ve çeşitli CREATE USER deyimlerini aramak için bir miktar metin dosyası yapmak zorundasınız. , ama yapılabilir olmalıdır.

6
Justin Cave

Bir sqlfile oluşturmak için impdp komutunu çalıştırdığınızda, onu DATAPUMP_IMP_FULL_DATABASE rolüne sahip bir kullanıcı olarak çalıştırmanız gerekir.

Veya ... düşük ayrıcalıklı bir kullanıcı olarak çalıştırın ve MASTER_ONLY = YES seçeneğini kullanın, sonra ana tabloyu inceleyin. Örneğin. 

select value_t 
from SYS_IMPORT_TABLE_01 
where name = 'CLIENT_COMMAND' 
and process_order = -59;

col object_name for a30
col processing_status head STATUS for a6
col processing_state head STATE for a5
select distinct
  object_schema,
  object_name,
  object_type,
  object_tablespace,
  process_order,
  duplicate,
  processing_status,
  processing_state
from sys_import_table_01
where process_order > 0
and object_name is not null
order by object_schema, object_name
/

http://download.Oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/oow2011_dp_mastering.pdf

4
Peter Wiseman

Adım 1: İşte size basit bir örnek. SQLFILE seçeneğini kullanarak döküm dosyasından bir SQL dosyası oluşturmanız gerekir.

Adım 2: Oluşturulan SQL dosyasında CREATE USER için Grep (burada tables.sql)

Burada örnek:

$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp  logfile=imp_exp_user1_tab sqlfile=tables.sql

İthalat: Yayın 11.2.0.3.0 - Cuma 26 Nisan 08:29:06 tarihinde üretim

Telif Hakkı (c) 1982, 2011, Oracle ve/veya bağlı kuruluşları. Tüm hakları Saklıdır.

Kullanıcı Adı:/sysdba olarak

SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA nesne türü işleniyor "SYS". "SYS_SQL_FILE_FULL_01" 08:29:12 tarihinde başarıyla tamamlandı.

$ grep "CREATE USER" tables.sql

DEĞERLERİN TARAFINDAN TANIMLANAN "KULLANICI1" OLUŞTURMA: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E;

Burada açıklanan birçok veri pompası seçeneği http://www.acehints.com/p/site-map.html

4
DBA

Benim çözümüm (KyleLanser'in cevabına benzer şekilde) (bir Unix kutusunda):

strings dumpfile.dmp | grep SCHEMA_LIST
2
slafs

OWNER_NAME adlı kullanıcıyı aramanız gerekiyor. 

cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u

cat -v, dumpfile dosyasını görünür metne çevirin. 

grep -o sadece eşleşmeyi gösterir, bu yüzden gerçekten uzun çizgiler göremiyoruz.

uniq -u yinelenen satırları kaldırır, böylece daha az çıktı görürsünüz. 

Bu, büyük döküm dosyalarında bile oldukça iyi çalışır ve bir komut dosyasında kullanım için ince ayar yapılabilir.

0
Aldur