Table–Schema–Database İstatistiklerinin Farklı Bir Database Üzerine Taşınması …

Kritik işlemler öncesinde tablo istatistiklerinin alınıp backuplanması çoğu zaman ciddi performans kayıplarının önüne bir anda geçmemizi sağlamaktadır. Bu duruma şöyle bir örnekde verebiliriz, örneğin bir report ortamını var ise bu ortamı her gece production dan yüklü miktarda veri aktararak besliyorsunuz. Hal böyle olunca reporter ortamındaki tablo istatistiklerini sürekli olarak güncellemeniz gerekecektir. Bu işlemde tablolarınızın size’ ına üzerlerindeki index yapılarına ve adetlerine bağlı olarak hem ciddi zaman almakta hemde ciddi kaynak kullanımına yol açmaktadır. Dolayısıyla bu tarz bir durumla karşılaştığınızda istatistikleri bir şekilde orjinal kaynaktan taşıyabilmeniz ciddi yarar sağlayacaktır.

Bu durumu bir örnekle açıklamaya devam edelim;

Öncelikle production ortamda istatistiklerimizi backuplayacağımız tablomuzu oluşturalım;

exec sys.dbms_stats.create_stat_table(‘CAS’, ‘BACKUP_STATS’);
PL/SQL procedure successfully completed.

tablomuzu kontrol edelim,
select count(*) from cas.backup_stats ;

COUNT(*)
———-
0

istatistikleri toplayacağımız tabloya diğer kullanıcılar için yetki verelim;
grant all on CAS.BACKUP_STATS to public ;
Grant succeeded.

sadece belirli tabloların istatistiklerini diğer database’ imize taşımak istersek ;
exec dbms_stats.export_table_stats(‘CAS’,’CAS_APP’,NULL,’BACKUP_STATS’,NULL,TRUE);

Tablo istatistiklerinin tabloya insert edilmiş olması gerekiyor, kontrol edelim;
select count(*) from cas.backup_stats ;

COUNT(*)
———-
53484

Eğer schema bazında istatistikleri taşımak isterseksek;
exec dbms_stats.export_schema_stats(‘CAS’,’BACKUP_STATS’);
PL/SQL procedure successfully completed.

Production database’ inde tabloya çıkartmış olduğumuz istatistiklerimizi şimdi report database’imize taşıyalım. Hangi yöntemle taşıyacağınız önemli değil, yani exp-imp ile veya dblink ile taşıyabilirsiniz.

Prod ortamdaki backup_stats tablomuzun DDL’ ini öncesinde report ortamda çalıştırdıkdan sonra dblink aracılığı ile veriyi report ortamına çekiyoruz;

insert into cas.backup_stats select * from cas.backup_stats@casptocasr;
53484 rows created.

commit;
Commit complete.

Eğer tablo istatistikleri aldıysak ve burada bunu döneceksek ;
exec dbms_stats.import_table_stats(‘CAS’,’CAS_APP’,NULL,’BACKUP_STATS’,NULL,TRUE);

— schemanın istatistiğini diğer tarafa import etmek için ;
exec dbms_stats.import_schema_stats(‘CAS’,’BACKUP_STATS’);

Database bazında istatistikleri taşımak istersek ;

source database’ imizde istatistiklerin exportunu tutacağımız tabloyu create ediyoruz;

exec DBMS_STATS.CREATE_STAT_TABLE(‘owner’,’table_name>’,’tbs_name’);
PL/SQL procedure successfully completed.

exec DBMS_STATS.CREATE_STAT_TABLE(‘DBADATA’,’STAT_DB’,’DBADATA’);
PL/SQL procedure successfully completed.

Database’ inin full istatistiğinin exportunu almak için
exec dbms_stats.EXPORT_DATABASE_STATS(‘STAT_DB’,’FULL_DB_STATS’,’DBADATA’);

İstatistikleri taşımak için, database’ imize sys ile bağlanıyoruz;
Source database’ imizde dbadata scheması altında STAT_DB tablosunu import edeceğimiz database’ e taşıyoruz.

exec dbms_stats.IMPORT_DATABASE_STATS(‘istatistiklerin_export_edildiği_tablonun_adı>’,’tanımlayısı’>’,’owner’);

exec dbms_stats.IMPORT_DATABASE_STATS(‘STAT_DB’,’FULL_DB_STATS’,’DBADATA’);
PL/SQL procedure successfully completed.

Bu haliyle istersek sadece bir tablonun, sadece bir schemanın veya tüm database’ in istatistiklerini hızlıca farklı bir db üzerine taşımış olduk.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


+ 6 = ondört