Çarşamba, 27 Ekim 2010 13:03

Tabloları bir Schema’dan Diğerine Taşımak

Yazan&Gönderen  Yusuf Arslan
Bu Öğeyi Derecelendir
(1 Oy)

Oracle’da tabloları (ve diğer objeleri) bir tablespace’den diğerine taşımak için komut olmasına rağmen, taboları bir schemadan diğerine taşımak her hangi bir komut yok. Eğer tabloları schemalar arasında taşımak istiyorsanız şu yöntemleri kullanabilirsiniz:
1) CREATE TABLE komutu ile tablonun bir kopyasını oluşturabilirsiniz:
SQL> CREATE TABLE gokhan.employees AS SELECT * FROM hr.employees;
Eğer tablonuzda çok fazla sayıda kayıt varsa, bu işlemi hızlandırmak için ilk başta tablonun yapısını oluşturup daha sonra /*+ APPEND */ ve NOLOGGING ile hızlandırılmış INSERT yapabilirsiniz.
SQL> CREATE TABLE gokhan.employees AS SELECT * FROM hr.employees WHERE 1=0;
SQL> INSERT /*+ APPEND */ INTO gokhan.employees SELECT * FROM hr.employees NOLOGGING;
Bu yöntem tablo üzerindeki indexleri, (constraint) kısıtları, triggerları kopyalamayacaktır. Bunları eklemek için exp/imp veya datapump araçlarını kullanabilirsiniz.
# exp system/password file=kopya.dmp tables=HR.EMPLOYEES rows=N
# imp system/password file=kopya.dmp fromuser=HR touser=GOKHAN ignore=Y
2) INSERT ile uğraşmadan direk olarak exp/imp kullanabilirsiniz. Bu yöntem daha pratik olmasına karşın INSERT kullanımından daha yavaş olacaktır.
# exp system/password file=kopya.dmp tables=HR.EMPLOYEES
# imp system/password file=kopya.dmp fromuser=HR touser=GOKHAN
imp/exp ve DataPump (impdp, expdp) kullanımını başka bir yazıda daha ayrıntılı anlatacağım için burada detaya girmeyeceğim. araçlarlar ile schemalar arasında tabloları tek tek kopyalamak yerine bir schema’daki bütün objeleri başka schemaya aktarabilirsiniz. imp/exp için:
# exp system/password file=kopya.dmp owner=HR
# imp system/password file=kopya.dmp fromuser=HR touser=GOKHAN
3) Her iki yöntem de, bir schemadan diğerine kayıtları SQL sorguları ile aktardığı için, yüzmilyonlarca kayıdın olduğu tablolarda bu işlemler yavaş olabilir. Eğer Oracle Enterprise Server kulanıyorsak, yani veritabanı sunucumuz partitionları destekliyorsa, taşıma işini daha hızlı yapabilmek için “partition exchange” yöntemini kullanabiliriz. Bu yöntemi bir örnek ile açıklayım. Diyelim ki HR.employees tablosunu GOKHAN schemasına taşıyamak istiyoruz. Sisteme SYS veya DBA rolü olan bir kullanıcı ile bağlanıp, kaynak tablomuzun bir partitioned, bir de partitioned olmayan kopyasını oluşturalım:
SQL> CREATE TABLE gokhan.gecici PARTITION BY RANGE( employee_id) ( PARTITION p1 VALUES LESS THAN (9999999) ) AS SELECT * FROM hr.employees WHERE 1=0;
SQL> CREATE TABLE gokhan.employees AS SELECT * FROM hr.employees WHERE 1=0;
Şimdi partitioned olarak yaratılan tablonun “p1″ partition’ını HR.employees tablosunun içeriği ile değiştriyoruz:
SQL> ALTER TABLE gokhan.gecici EXCHANGE PARTITION p1 WITH TABLE hr.employees;
Daha sonra da “p1″ partition’ı hedef tablomuzun içeriği ile değiştiriyoruz:
SQL> ALTER TABLE gokhan.gecici EXCHANGE PARTITION p1 WITH TABLE gokhan.employees;
Bu yöntem ile içerisinde 5.5 milyon kayıt olan bir tabloyu yaklaşık 10 saniyede GOKHAN schemasına taşıyabildim. CREATE TABLE/INSERT ile bu işlem yaklaşık 6 dakika sürdü.
Eğer bu işlemi yaparken INDEX’leri de taşımak istiyorsanız partitionları değiştirmek için kullandığımız ALTER komutlarına ”INCLUDING INDEXES WITHOUT VALIDATION” parametresini eklemeniz ve geçici olarak oluşturduğunuz tabloya kaynak tablodaki tüm indexleri yaratmanız gerekiyor. Bu dökümante edilmemiş bir yöntem olduğu için yavaş olmasına rağmen ilk iki yöntemi kullanmanızı tavsiye ederim

Son Düzenleme Cuma, 10 Aralık 2010 12:18
Yusuf Arslan

Yusuf Arslan

Oracle Open Source

1985 Tokat/Reşadiye doğumluyum.İlk-orta-lise hayatını Amasya/Suluova ilçesinde geçirdim.Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerime Oracle,SAP alanlarında danışmanlık vermek üzere devam etmekteyim. Kullandığım,bildiğim teknolojiler ve diller; SAP BO Oracle BI Applications Oracle Data Mining Oracle BI Reports(http://www.iski.gov.tr/web/statik.aspx?KID=1000717) Oracle Data Integrator Oracle BI Publisher(XML Publisher) Oracle Database 10g Oracle Mapviewer PL/SQL,Java,Oracle JDeveloper,Oracle Forms-Reports,C# Data warehouse process optimization Database system implementation Using encoding for security systems Software development, test and deployment Presentation and communication skills Bu adreslerden de bana ulaşabilirsiniz, [email protected] https://datawarehouse.gen.tr/ http://www.arslanyusuf.blogspot.com/ http://yusufarslaneng.blogspot.com/ http://twitter.com/yusars http://tr.linkedin.com/pub/yusuf-arslan/27/35b/57b

Website: arslanyusuf.blogspot.com/ E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir

En Son Yusuf Arslan

İlgili Öğeler (Etikete Göre)

Başa Dön