Mantıksal Standby Veritabanı Nasıl Oluşturulur?
Oracle, Uncategorized, VERITABANI | Kadir Sert | May 30, 2010 at 11:33 am
Primary Veritabanını Hazırlama
Öncelikle desteklenen veri tiplerini bilmek gerekir.
Desteklenen Veri Tipleri:
BINARY_DOUBLE
BINARY_FLOAT
BLOB
CHAR
CLOB and NCLOB
DATE
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
LONG
LONG RAW
NCHAR
NUMBER
NVARCHAR2
RAW
TIMESTAMP
TIMESTAMP WITH LOCAL TIMEZONE
TIMESTAMP WITH TIMEZONE
VARCHAR2
VARCHAR
Desteklenmeyen Veri Tipleri:
BFILE
Collections (VARRAYS ve nested tablolar dahil)
Encrypted columns
Multimedia data tipleri (Spatial, Image ve Context dahil)
ROWID, UROWID
User-defined tipler
XMLType
Desteklenen Depolama Tipleri:
Cluster tablolar (including index clusters and heap clusters)
Index-organized tablolar (partitioned ve nonpartitioned, overflow segmentler dahil)
Heap-organized tablolar (partitioned ve nonpartitioned)
Desteklenmeyen Depolama Tipleri:
Segment Compression
Desteklenen PL/SQL Paketleri:
Sistem metadatasını değiştirmeyen paketler. DBMS_OUTPUT, DBMS_RANDOM, DBMS_PIPE, DBMS_DESCRIBE, DBMS_OBFUSCATION_TOOLKIT, DBMS_TRACE ve DBMS_METADATA gibi paketler örnek olarak verilebilir.
Sistem metadatasını değiştirmeyen fakat desteklenen veri tiplerini değiştirebilen paketler. DBMS_LOB, DBMS_SQL ve DBMS_TRANSACTION örnek olarak verilebilir.
Desteklenmeyen PL/SQL Paketleri:
Sistem metadatasını değiştiren paketler. DBMS_JAVA, DBMS_REGISTRY, DBMS_ALERT, DBMS_SPACE_ADMIN, DBMS_REFRESH, DBMS_REDEFINITION, DBMS_SCHEDULER ve DBMS_AQ örnek olarak verilebilir.
Desteklenen Tablolar, Sequence’lar ve View’ler:
Oracle veritabanı ile birlikte gelen şemalar SQL Apply tarafından es geçilecektir. Hangi şemaların es geçileceğini öğrenmek için aşağıdaki sorgu çalıştırılabilir.
SELECT OWNER FROM DBA_LOGSTDBY_SKIP WHERE STATEMENT_OPT = ‘INTERNAL SCHEMA’;
Primary veritabanının desteklenmeyen hangi nesneleri içerdiğini sorgulamak için DBA_LOGSTDBY_UNSUPPORTED view’ü kullanılabilir. Örneğin hangi tabloların desteklenmediğini anlamak için şu sorgu çalıştırılır:
SELECT DISTINCT OWNER,TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED ORDER BY OWNER,TABLE_NAME;
Mantıksal Standby Üzerinde Es Geçilen SQL cümleleri:
ALTER DATABASE
ALTER MATERIALIZED VIEW
ALTER MATERIALIZED VIEW LOG
ALTER SESSION
ALTER SYSTEM
CREATE CONTROL FILE
CREATE DATABASE
CREATE DATABASE LINK
CREATE PFILE FROM SPFILE
CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW LOG
CREATE SCHEMA AUTHORIZATION
CREATE SPFILE FROM PFILE
DROP DATABASE LINK
DROP MATERIALIZED VIEW
DROP MATERIALIZED VIEW LOG
EXPLAIN
LOCK TABLE
SET CONSTRAINTS
SET ROLE
SET TRANSACTION
Diğer tüm sql cümleleri mantıksal stanby veritabanı tarafından uygulanır.
Primary Veritabanındaki Her Bir Satır Benzersiz Olmalı
Oracle tablolara primary key ya da null olmayan unique-constraint/index eklemeyi önermektedir. Veritabanı üzerinde benzersiz anahtara sahip olmayan tabloları görmek için:
SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE WHERE (OWNER, TABLE_NAME)
NOT IN (SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED) AND BAD_COLLUMN = ‘Y’
Eğer primary key yönetiminin yük getireceği düşünülüyorsa ihtiyaç duyulan tablo üzerinde etkinleştirilmemiş primary-key RELY constraint oluşturulabilir. Örnek olarak deneme tablosundaki id ve isim sütunları için oluşturalım:
ALTER TABLE deneme ADD PRIMARY KEY (id, isim) RELY DISABLE;
Mantıksal Standby Veritabanını Oluşturma
Kurulum dökümanında kullanılan isimler aşağıdaki tabloda gösterilmiştir.
| Database | DB_UNIQUE_NAME | Oracle Net Service Name |
| Primary | oradb1 | oradb1 |
| Physical standby | oradb2 | oradb2 |
Mantıksal Standby veritabanını oluşturmak için öncelikle Fiziksel Standby oluşturulup daha sonra mantıksal olarak değiştirmek gerekir. Bunu yapmak için Standby sunucusu üzerindeki Redo Apply işlemi durdurulur. Redo Apply işlemini durdurmak için aşağıdaki sorgu çalıştırılır.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Fiziksel Standby Veritabanını Oluşturma
Primary veritabanı FORCE LOGGING moduna alınır.
ALTER DATABASE FORCE LOGGING
Şifre dosyası oluşturulur.
Dataguard konfigürasyonu içerisindeki tüm sunucular şifre dosyası kullanmak zorundadır. Ayrıca SYS kullanıcılarının şifresi aynı olmak zorundadır.
Standby redo log oluşturulur.
Yüksek koruma ve yüksek erişilebilirlik için standby redo logları gerekir. LGWR ASYNC metodu tavsiye edilmektedir. Aşağıdaki adımlar uygulanır.
- Primary ve standby sunucularındaki redo log dosyalarının boyutu aynı olmalıdır.
- Standby redo log dosya gruplarının sayısı belirlenir. Standby’daki grup sayısı primary’dekinden en az bir fazla olmalıdır. Bunun yanında standby’daki grup sayısı primary veritabanındaki thread sayısıyla yakından ilişkilidir. (Her bir thread tarafından kullanılan en yüksek log dosyası sayısı + 1) * en yüksek thread sayısı
- MAXLOGFILES ve MAXLOGMEMBERS parametrelerinin, açılacak olan log grup sayısını kısıtlayıp kısıtlamadığı kontrol edilmelidir. Aksi takdirde Primary veritabanının ya da control dosyasının yeniden oluşturulması gerekebilir.
- Standby redo log dosya grupları oluşturulur. Örnek vermek gerekirse:
- ALTER DATABASE ADD STANDBY LOGFILE THREAD 5 (‘/app/oracle/oradata/oradb2/redo01.log’,’/app/oracle/oradata/oradb2/redo02.log’) SIZE 300M;
- ALTER DATABASE ADD STANDBY LOGFILE GROUP 10 (‘/app/oracle/oradata/oradb2/redo01.log’,’/app/oracle/oradata/oradb2/redo02.log’) SIZE 300M;
- Standby redo loglarının oluşup oluşmadığı kontrol edilir. Bunun için primary veritabanında log switch işlemi yapıldıktan sonra standby tarafında V$STANDBY_LOG ya da V$LOGFILE view’leri sorgulanır.
- SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
Primary veritabanında başlangıç parametreleri değiştirilir.
- Primary Veritabanı:Primary rol başlangıç parametreleri
DB_NAME=oradb1
DB_UNIQUE_NAME=oradb1
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(oradb1,oradb2)’
CONTROL_FILES=’/arch1/oradb1/control1.ctl’, ‘/arch2/oradb1/control2.ctl’
LOG_ARCHIVE_DEST_1=
‘LOCATION=/arch1/oradb1/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=oradb1′
LOG_ARCHIVE_DEST_2=
‘SERVICE=oradb2 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=oradb2′
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
- Primary Veritabanı:Standby rol başlangıç parametreleri
FAL_SERVER=oradb2
FAL_CLIENT=oradb1
DB_FILE_NAME_CONVERT=’oradb2′,’oradb1′
LOG_FILE_NAME_CONVERT=
‘/arch1/oradb2/’,’/arch1/oradb1/’,’/arch2/oradb2/’,’/arch2/oradb1/’
STANDBY_FILE_MANAGEMENT=AUTO
Primary veritabanında arşivleme etkinleştirilir.
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
Primary veritabanı veri dosyalarının yedek kopyaları alınır.
Oracle bu işlem için RMAN kullanmayı tavsiye etmektedir.
Standby veritabanı için control dosyası oluşturulur.
Primary veritabanı kapatıldıktan sonra üzerinde aşağıdaki komutlar koşturulur.
STARTUP MOUNT;
ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/tmp/oradb2.ctl’;
ALTER DATABASE OPEN;
Standby veritabanı için başlangıç parametre dosyası oluşturulur.
Primary veritabanı üzerinde pfile başlangıç parametre dosyası oluşturulur.
CREATE PFILE=’/tmp/initoradb2.ora’ FROM SPFILE;
Bu dosya üzerinde standby sunucu için gerekli değişiklikler yapılır.
DB_NAME=oradb1
DB_UNIQUE_NAME=oradb2
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(oradb1,oradb2)’
CONTROL_FILES=’/arch1/oradb2/control1.ctl’, ‘/arch2/oradb2/control2.ctl’
DB_FILE_NAME_CONVERT=’oradb1′,’oradb2′
LOG_FILE_NAME_CONVERT=
‘/arch1/oradb1/’,’/arch1/oradb2/’,’/arch2/oradb1/’,’/arch2/oradb2/’
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1=
‘LOCATION=/arch1/oradb2/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=oradb2′
LOG_ARCHIVE_DEST_2=
‘SERVICE=oradb1 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=oradb1′
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=oradb1
FAL_CLIENT=oradb2
Hazırlanan dosyalar primary sunucudan standby sunucuya kopyalanır.
- Veri dosyalarının yedekleri.
- Oluşturulan standby kontrol dosyası.
- Oluşturulan standby başlangıç dosyası.
Standby veritabanı desteği için gerekli ortam değişkenleri ayarlanır.
- Şifre dosyası oluşturulur. Primary ve standby için sys kullanıcı şifresi aynı yapılır.
- Primary ve standby veritabanları için dinleyici hizmetleri düzenlenir. Oracle Net Manager ile dinleyici servisi düzenlenerek yeniden başlatılır.
- Her bir veritabanı üzerinde Oracle Net Manager ile redo transport servisi tarafından kullanılacak olan net service name oluşturulur.
- Standby veritabanı üzerinde daha önce parametreleri hazırlanan başlangıç dosyası kullanılarak spfile oluşturulur.
CREATE SPFILE FROM PFILE=’initoradb2.ora’;
Fiziksel standby veritabanı başlatılır.
- Veritabanı mount edilir.
STARTUP MOUNT;
- Redo apply başlatılır.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
- Log arşivleme işleminin çalışıp çalışmadığı kontrol edilir. Primary sunucu tarafında log dosyası değiştirlir.
ALTER SYSTEM SWITCH LOGFILE;
Fiziksel standby veritabanının doğru çalışıp çalışmadığı test edilir.
- Varolan arşiv logları belirlenir.
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
- Online redo log dosyasının arşivlenmesi için primary veritabanı üzerinde log değiştirilir.
ALTER SYSTEM SWITCH LOGFILE;
- Standby sunucu üzerinde redo log’unun arşivlenip arşivlenmediği kontrol edilir.
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
- Arşiv loglarının uygulanıp uygulanmadığı kontrol edilir.
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
Fiziksel Standby Veritabanı Üzerinde Redo Apply İşlemini Durdurma
Veritabanını fizikselden mantıksala çevirmeden önce redo apply işlemi durdurulur.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Primary Veritabanını Mantıksal Standby Veritabanını Destekleyecek Şekilde Hazırlama
Primary veritabanı rol değişimleri için hazırlanır.
Bunu yapabilmek için primary veritabanı üzerindeki başlangıç parametre dosyasına LOG_ARCHIVE_DEST_3 parametresi eklenir. Bu parametre sadece primary veritabanının rolü standby olarak değiştiğinde etkili olur.
LOG_ARCHIVE_DEST_3=
‘LOCATION=/arch2/oradb1/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=oradb1′
LOG_ARCHIVE_DEST_STATE_3=ENABLE
Bu iki parametreyi veritabanı çalışıyorken değiştirmek için ALTER SYSTEM SET komutu kullanılır ayrıca SCOPE=BOTH eklenerek veritabanı kapanıp açıldığında yapılan değişikliklerin kaybolmaması sağlanır.
Redo verisi için kullanılacak dictionary oluşturulur.
LogMiner Multiversioned Data Dictionary sayesinde primary key ve unique-constraint/index sütunlarının redo loglarına eklenmesi sağlanır. Böylece her bir kayıt birbirinden ayrılabilir. Dictionary’yi oluşturmak için:
EXECUTE DBMS_LOGSTDBY.BUILD;
DBMS_LOGSTDBY.BUILD prosedürü varolan tüm transaction’ların tamamlanmasını bekleyecektir.
Mantıksal standby veritabanına geçilir.
- Geçiş için:
ALTER DATABASE RECOVER TO LOGICAL STANDBY db_ismi;
db_ismi yerine yeni mantıksal veritabanı adı yazılır. Primary veritabanında dictionary oluşturma işlemi bitmemiş ise geçiş işlemi başarılı olmayacaktır. Böyle bir durumda yapılan işlemi iptal etmek için başka bir sql oturumu açılarak, ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL komutu çalıştırılır.
- Yeni bir şifre dosyası oluşturulur. Mantıksal veritabanına geçme işlemi veritabanı ismini değiştirdiği için şifre dosyası yeniden oluşturulmalıdır.
- Mantıksal standby veritabanı için başlangıç parametreleri belirlenir. Öncelikle veritabanı kapatılıp mount durumuna getirilir.
SHUTDOWN;
STARTUP MOUNT;
Fiziksel standby veritabanlarının aksine mantıksal standby veritabanları sorguya açık olduklarından çoklu log dosyalarına sahiptirler. Bu sebeple LOG_ARCHIVE_DESTINATION_n parametresi belirlenmelidir.
LOG_ARCHIVE_DEST_1=LOCATION=/arch1/oradb2 olarak belirlenen hedef dizinde mantıksal standby tarafından üretilen redo loglarının arşivleri tutulmaktadır.
LOG_ARCHIVE_DEST_3=LOCATION=/arch2/oradb2 olarak belirlenen hedef dizinde ise primary veritabanından gelen redo log verisinin arşivi tutulmaktadır.
Mantıksal standby sunucusundaki başlangıç parametre dosyası aşağıdaki gibi düzenlenir.
LOG_ARCHIVE_DEST_1=
‘LOCATION=/arch1/oradb2/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=oradb2′
LOG_ARCHIVE_DEST_2=
‘SERVICE=oradb1 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=oradb1′
LOG_ARCHIVE_DEST_3=
‘LOCATION=/arch2/oradb2/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=oradb2′
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_STATE_3=ENABLE
Mantıksal standby veritabanı açılır.
Burada veritabanı RESETLOGS ile açılmalıdır.
ALTER DATABASE OPEN RESETLOGS;
Daha sonra redo verilerinin uygulanması için aşağıdaki komut çalıştırılır.
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Bundan sonra mantıksal standby veritabanımızın doğru çalışıp çalışmadığı kontrol edilir.
Tags: oracle 10g standby, oracle logical standby, oracle mantıksal standby

Tweet This
Digg This
Save to delicious
Stumble it









