Pages

30 Kasım 2011 Çarşamba

Başka bir veritabanından Statspack verisinin import edilmesi

Analiz etmek için Statspack verisini bir veritabanından başka bir veritabanına taşımak istenebilir. Şöyle diyelim; üretim veritabanının PERFSTAT şeması ayda bir sefer export ediliyor, ardından yer kazanmak için Statpack tabloları TRUNCATE ile  düşürülüyor. Bu silinen snapshotlar, geçmiş snapshotlara ihtiyaç duyulduğu zamanlarda(mesela geçen ayın snapshotlarına bakılmak istendiğinde) başka bir veritabanına import edilebilir. Açık olarak,devam eden snapshot yakalama prosesinde karışıklık yaratabileceğinden dolayı bu import işleminde üretim veritabanı hedef olamaz.  

Örnekteki senaryoda hesaba katılması gereken; STATS$IDLE_EVENT adlı Statpack tablosu belirli Statpack sürümünde eksik olan ilave bekleme olaylarını içerebilmektedir. PERFSTAT sahipliğindeki tabloların kaba kuvvetle düşürülmesi yaklaşımı ve ardından import işlemi ile bu tabloların tekrar oluşturulmasına izin verilmesi bu özelliği ortadan kaldırmaktadır. Bu sebeple bundan sonraki yaklaşım herhangi bir Statpack tablosunu düşürmez.  Bunun yerine bütünlük kısıtlamalarını(integrity constraints) devredışı bırakır, sptrunc.sql ile tabloları düşürür ve mevcut tablolara veriyi import etmek için IGNORE=Y import takısını kullanır.

Başlangıç noktası olarak, spcreate.sql ile Statspack kurulu bir veritabanı gerekmektedir. Bu hedefteki Statspack sürümü export edilen dump dosyasının Statspack sürümü ile aynı olmalıdır. Otomatik snapshot yakalama özelliği devredışı bırakılmış olmalı ve öncelikle sptrunc.sql ile tüm mevcut snapshotlar sistemden temizlenmelidir.

$ sqlplus perfstat/**** @sptrunc
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
Warning
~~~~~~~
Running sptrunc.sql removes ALL data from Statspack tables. You may
wish to export the data before continuing.
About to Truncate Statspack Tables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you would like to continue, press <return>
Enter value for return:
Entered - starting truncate operation
Table truncated.
Truncate operation complete
SQL> EXIT

Ardından, import işlemi esnasında ihlal meydana getirdiğinden dolayı referential(başvurusal) bütünlük kısıtlamaları devredışı bırakılacaktır. “imp” aracı bunları import işlemi sonunda tekrar devreye alacaktır. Kısıtlamaları devredışı bırakmak için ALTER TABLE DISABLE CONSTRAINT komutu çalıştırılır. Aşağıda komut  ile PERFSTAT şemasına ait R tipi tüm kısıtlamalar için çalıştırılması gereken komutlar disable_sp_const.sql scripti içine kaydedilecektir.

spool disable_sp_const.sql
select 'ALTER TABLE perfstat.' || table_name || ' DISABLE CONSTRAINT ' ||constraint_name || ';'
from dba_constraints
where owner='PERFSTAT' and constraint_type='R';

Bu script PERFSTAT kullanıcısı ile oturum açılıp aşağıdaki gibi çalıştırılmaldır.

$ sqlplus -s perfstat/secret @disable_sp_const.sql
Table altered.
Table altered.

Bu aşamada geçmiş snapshot verisini import etmek için şema hazır durumdadır. Mevcut  tabloların içine import etmek için IGNORE=Y  takısı unutulmamalıdır. Import işlemi esnasında birkaç ORA-00001 ve ORA-02264 hataları alınacaktır. Bu hatalar konu dışıdır ve gözardı edilmelidir.

$ imp system/**** file=perfstat.dmp full=y ignore=y log=imp.log

Import: Release 9.2.0.1.0 - Production on Wed Sep 19 18:09:00 2011
. importing PERFSTAT's objects into PERFSTAT
ORA-00001: unique constraint (PERFSTAT.STATS$IDLE_EVENT_PK) violated
Column 1 smon timer
. . importing table "STATS$STATSPACK_PARAMETER" 1 rows imported
IMP-00017: following statement failed with ORACLE error 2264:
"ALTER TABLE "STATS$STATSPACK_PARAMETER" ADD CONSTRAINT "STATS$STATSPACK_P_P"
"IN_CK" CHECK (pin_statspack in ('TRUE', 'FALSE')) ENABLE NOVALIDATE"
IMP-00003: ORACLE error 2264 encountered
ORA-02264: name already used by an existing constraint
. . importing table "STATS$WAITSTAT" 126 rows imported
About to enable constraints...
Import terminated successfully with warnings.

Bu işlem sonunda artık Statspack raporları kullanılabilir durumdadır. Mevcut instance tarafından çekilen snapshotları değerlendirmeye aldığından dolayı spreport.sql çalıştırılamaz. Bunun yerine,  aynı işleve sahip olan sprepins.sql kullanılmalıdır. Bu ikinci script, veritabanı tanımlayıcısı ve instance numarası tanımlanınca spreport.sql tarafından çağrılır. Sprepins.sql ile tüm bu işlemler manueldir. Sprepins.sql çalıştırılınca,  STATS$DATABASE_INSTANCE içinde veritabanı instance’larını listeler. Buradan istenen instance seçilir.

SQL> @sprepins
Instances in this Statspack schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
4273840935 1 PRODDB IPROD dbserver3
Enter value for dbid: 4273840935
Using 4273840935 for database Id
Enter value for inst_num: 1
Using 1 for instance number
Completed Snapshots
Snap Snap
Instance DB Name Id Snap Started Level Comment
------------ ------------ ----- ----------------- ----- --------------
PR02 PROD 104 15 Aug 2006 16:30 10
202 22 Aug 2006 09:15 10
203 22 Aug 2006 09:30 10

Bu aşamada script, başlangıç ve bitiş tanımlayıcılarını ve her zamanki gibi rapor dosyası ismini soracaktır. Instance ismi ve instance sayısı girildiğinde, mevcut instance tarafından yakalanan snapshotlar ve import edilen snapshot verisi üzerinde raporlama arasında farklılık bulunmamaktadır. 

0 yorum:

Yorum Gönder