วิธีการถ่ายโอนข้อมูลโดยใช้คำสั่ง expdp และ impdp?


29

ฉันเป็น Oracle noob และความตั้งใจของฉันคือการถ่ายโอนข้อมูลและข้อมูลเมตาทั้งหมดจากสคีมาหนึ่งไปยังสคีมาอื่นภายในฐานข้อมูล Oracle ฉันวางแผนที่จะใช้ datapump expdpและimpdpคำสั่ง ฉันมีคำถามเกี่ยวกับเรื่องนี้:

  • ฉันสามารถสร้างสคีมาเป้าหมายโดยไม่มีผู้ใช้หรือฉันควรสร้างผู้ใช้ก่อน (ซึ่งจะสร้างสคีมาด้วย)
  • ฉันสามารถดำเนินการexpdpและimpdpสั่งงานด้วยบัญชี SYS (as sysdba) ได้หรือไม่ นั่นเป็นวิธีที่ต้องการหรือไม่
  • คำสั่งนี้ใช้วัตถุทั้งหมด (ข้อมูลและข้อมูลเมตา) จากสคีมาและย้ายสิ่งเหล่านี้ไปเป็นสคีมาที่แตกต่างกันหรือไม่?

    expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log  

    สกีมาเป้าหมายคือสำเนาที่ถูกต้องของซอร์สสกีมาหลังจากimpdpคำสั่งหรือไม่

คำตอบ:


31

impdp จะสร้างผู้ใช้หากยังไม่ปรากฏดังนั้นคุณไม่ต้องกังวลเกี่ยวกับมันเว้นแต่จะไม่ใช่สิ่งที่คุณต้องการ

ไม่ได้ทำงานimpdbหรือexpdpเป็นsysdbaทำเพียงว่าถ้าร้องขอการสนับสนุนของออราเคิลในสถานการณ์ที่เฉพาะเจาะจง ใช้ผู้ใช้ธรรมดาสำหรับสิ่งนั้น - ผู้ที่ได้รับdbaบทบาทเช่น (มี[IMPORT|EXPORT]_FULL_DATABASEสิทธิ์พิเศษสำหรับสิ่งประเภทนี้คุณจะต้องให้สิทธิ์การเข้าถึงวัตถุไดเรกทอรี Oracle ด้วย)

การเอ็กซ์พอร์ตสกีมาแบบเต็ม (ข้อมูลเมตาและเนื้อหา) จะมีลักษณะดังนี้:

expdp user/pass schemas=<schemaname> directory=dumpdir \
      dumpfile=<schemaname>.dmp \
      logfile=expdp_<schemaname>.log

หากคุณต้องการนำเข้าผู้ใช้ / สคีมาอื่น (ฐานข้อมูลเป้าหมายสามารถเหมือนกับแหล่งที่มา) คุณสามารถใช้:

impdp user/pass schemas=schema1 directory=dumpdir \
      remap_schema=schema1:schema2 \
      dumpfile=schema1.dmp \
      logfile=impdp_schema2.log

หากคุณไม่ต้องการนำเข้าทั้งหมดคุณสามารถตั้งค่าตัวกรองบางอย่างได้ทั้งในข้อมูลและข้อมูลเมตา ดูการกรองในระหว่างการดำเนินงานนำเข้า

คู่มือสาธารณูปโภคมีรายละเอียดทั้งหมดผมขอแนะนำให้อ่านอย่างน้อยส่วนภาพรวม


2

สำหรับการนำเข้าตารางที่ถูกตัดทอนนั่นคือคุณต้องการนำเข้าข้อมูลกลับไปที่ตารางเท่านั้น:

impdp user/pass TABLES=dept DIRECTORY=TEST_dir dumpfile=TEST.dmp logfile=expdpTEST.log TABLE_EXISTS_ACTION=REPLACE

เหนือตารางของฉันคือdeptสิ่งที่ฉันต้องการนำเข้า ฉันได้ตัดทอนมันก่อนหน้านี้ จาก dumpfile ซึ่งเป็นTEST.dmpและlogfileซึ่งเป็นexpdpTEST.logฉันต้องการเฉพาะข้อมูลที่จะนำเข้า (โครงสร้างตารางจะเหมือนกันดังนั้นเราจึงใช้พารามิเตอร์TABLE_EXISTS_ACTION)

หากคุณมีการตัดทอน 2 ตารางตัวอย่างเช่นempและdeptและempตารางมีdept_idรหัสต่างประเทศคุณต้องนำเข้าdeptตารางก่อนจากนั้นจึงempต้องหลีกเลี่ยงข้อผิดพลาดระหว่างการนำเข้า

ข้อมูลเพิ่มเติมhttp://satya-dba.blogspot.in/2009/05/datapump.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.