Bazen hedef veritabanının ne zaman açıldığını,açıldığı zamanı, açık olup olmadığını kontrol etmemiz gerekebilir. Veri ambarları sisteminde ETL sürecinde verilerin çekiceleceği database'lerin durumunu bu şekilde kontrol edebiliriz. Aslında şu anda aklıma somut örnekler gelmiyor ama bir şekilde ikinci bir database'den veri çekiyor yada veri gönderiyor iseniz bu bilgiye ihtiyaç duyabilirsiniz.
Şu şekilde bir kullanım yaptım. Hedef database'de (SID) kendim için bir user oluşturuyorum, daha sonra bu user için v$instance erişim yetkisi veriyorum.
grant select on v$instance to scott;
ORA-02030: sadece sabit tablolardan/görünümlerden seçebilir
bu hatadann kurtulmak için yapmamız gereken çok basit oracle görünümün adında ufak bir değişiklik yapıyoruz.
grant select on v_$instance to scott;
Daha sonra SCOTT kullancısı ile bağlanıyorum ve instance durumuna bakıyorum.
SELECT STARTUP_TIME,INSTANCE_NAME FROM V$INSTANCE
Kendi database'imde bu buradaki zamanı yada statu'yü kontrol ederek kendi işlerimi yapıyorum.
v_$instance yetkisini geri almak için
revoke select on v_$instance from scott
Thursday, September 3, 2009
ALERT LOG DOSYASI OKUMA
Çoğu zaman herkez alert log dosyalarında neler döndüğünü merak eder. Bu merakı gidermenin en kısa yolu dosyayı işletim sistemi ortamında açmak ve okumaktır. Yada alert log dosyalarını okuyan işleyen bir tool kullanmak olabilir. Ben bu yazım da kendi SQL cümlelerimiz ile alert loglarını okumanın birkaç yolunu göstermeye çalışacağım.
Alert log dosyasına ne için ihtiyacımız olduğunu kısaca soylemek gerekir ise DB de olan olayları yakalamamızı sağla ne zaman açıldı hangi hataları aldı DB parametreleri neler gibi....
Alert log dosyaları eğer siz konumunu değiştirmediyseniz
C:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\BDUMP dizininde bulabilirsiniz. Ama ben yerini değiştirdim ve şu anda nerede olduğunu bilmiyorum diyorsanız
SELECT value FROM v$parameter WHERE name='background_dump_dest';
sorgusu ile konumunu görebiliriz. Farkettiyseniz v$parameter view'inde database için tanımladığız parametleri bulacaksınız.
select * from dba_directories
Sorgusu ile directories'lere bakıyoruz. Eğer ilgili directory yok ise oluşturacağiz.
Asagidaki kod ile bir DIRECTORIES olusturuyorum. Daha sonra scott kullanicisi için bu directory okuma hakki veriyoruz. Sonrasinda SCOTT kullanici için bir external tablo olusturuyorum.Asagidaki islemleri tek tek de yapabiliriz.
DECLARE
--alert_SID.log dosyasinin oldugu dizin
bdump_dizini VARCHAR2(200);
--Hangi SID ilebagli oldugumuz bunu kullanmamizdaki amaç alert_SID.log (alert_orcl.log) seklinde bir dosya olmasi.SID ismi dinamik olarak veriliyor.
v_sid VARCHAR2(16);
--bunu External table olusturma sirasinda dogru script üretim üretmedigimi görmek için tanimladim.
v_dyn_sql VARCHAR2(5000);
--hatalar için tanimlamalar.
objectexists EXCEPTION;
PRAGMA EXCEPTION_INIT(objectexists,-955);
BEGIN
-- alert_orcl.log dosyasinin konumunu ögreniyorruz.
SELECT VALUE
INTO bdump_dizini
FROM v$parameter
WHERE NAME = 'background_dump_dest';
--ekrana dizini yazdiriyorum.
dbms_output.Put_line(bdump_dizini);
-- database'e yeni bir directory tanimliyoruz.
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY bdump_dir AS '''
||bdump_dizini
||'''';
--bu directory için SCOTT kullanicina okuma (erisim) hakki veriyorum.
EXECUTE IMMEDIATE 'GRANT READ ON DIRECTORY bdump_dir TO scott
';
--Database'e baglandigim SID ismini ögreniyorum.
SELECT instance_name
INTO v_sid
FROM v$instance;
--ekrana V_SID'yi yazdiriyorum kontrol amaçli.
dbms_output.Put_line(v_sid);
COMMIT;
-- yukarida external table için olusturdugum parametlerler ile simdi external tablomu olusturyorum.
v_dyn_sql := 'CREATE TABLE scott.ALERT_LOG_EXTERNAL
(TEXT VARCHAR2(255)
) ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY BDUMP_DIR
ACCESS PARAMETERS
(records delimited by newline
nobadfile
nologfile
)
LOCATION (''alert_'
||v_sid
||'.log'')
)
REJECT LIMIT UNLIMITED';
--dogru script üretip üretmedgimi kontrol için ekrana basiyorum.
dbms_output.Put_line(v_dyn_sql);
EXCEPTION
WHEN objectexists THEN
NULL;
END;
/
External tablomuzu oluşturduktan sonra artık alert loglarımız okuyabiliriz.
SELECT rownum row_num ,text FROM SCOTT.alert_log_external order by 1 desc;
İlk olarak log filemizi okumayı başardık fakat bu çokda kullanışlı görünmüyor şu aşamada. Çeşitli süslemeler ile daha okunabilir bir hale getirmeyeçalışacağiz.
alert log zamanlarını yakalamak için aşağıdaki gibi bir foksiyon oluşturalım.
CREATE OR REPLACE FUNCTION scott.Alert_log_date
(text IN VARCHAR2)
RETURN DATE
IS
invaliddate EXCEPTION;
PRAGMA EXCEPTION_INIT(invaliddate,-1846);
BEGIN
RETURN To_date(text,'Dy Mon DD HH24:MI:SS YYYY','NLS_DATE_LANGUAGE=AMERICAN');
EXCEPTION
WHEN invaliddate THEN
RETURN NULL;
END;
/
Şimdi bu fonksiyonu kullarak alert loglarımızı okuyalım , burada tarih gördüğü satırlarda tarih column'u ekliyor.
SELECT ROWNUM row_num ,scott.alert_log_date(text) alert_date, text
FROM scottt.alert_log_external
WHERE ROWNUM <50
Yukarıdaki sorguda tarih alanı boş gelen yerlere tarihi eklemek için aşağıdaki yapıyı kullanmabiliriz. Burada iki tarih arasına bir önceki tarihi ekleyerek her satırın başına tarih değerini atıyor. Bu sayede olayların hangi tarihte meydana geldiğini daha iyi gözlemleyebiliyoruz (monitor edebiliyoruz).
SELECT row_num ,LAST_VALUE(alert_date IGNORE NULLS) OVER(ORDER BY row_num
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) alert_date
,alert_text
FROM (SELECT ROWNUM row_num
,SCOTT.alert_log_date(text) alert_date
,text alert_text
FROM SCOTT.alert_log_external
)
WHERE ROWNUM < 50>
Aşağıdaki sorguda ise her bir hatanın ,olayın gerekleştiği zamanıki ilk satırın numarasını diğer satırlara yayıyor.
SELECT row_num
,LAST_VALUE(low_row_num IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) start_row
,LAST_VALUE(alert_date IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) alert_date
,alert_text
FROM (SELECT ROWNUM row_num
,NVL2(SCOTT.alert_log_date(text),ROWNUM,NULL) low_row_num
,SCOTT.alert_log_date(text) alert_date
,text alert_text
FROM SCOTT.alert_log_external
)
WHERE ROWNUM < 50
en son oluşturduğumuz sorgu sonucundan bir view oluşturuyoruz.
CREATE OR REPLACE FORCE VIEW scott.alert_log as
SELECT row_num
,LAST_VALUE(low_row_num IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) start_row
,LAST_VALUE(alert_date IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) alert_date
,alert_text
FROM (SELECT ROWNUM row_num
,NVL2(scott.alert_log_date(text),ROWNUM,NULL) low_row_num
,scott.alert_log_date(text) alert_date
,text alert_text
FROM scott.alert_log_external
);
--SYNONYM oluşturuyorum.
DECLARE
objectexists EXCEPTION;
PRAGMA EXCEPTION_INIT(objectexists,-955);
BEGIN
EXECUTE IMMEDIATE 'CREATE PUBLIC SYNONYM alert_log FOR scott.alert_log:';
-- E?er böyle bir synonym var ise silip yeniden yarat?yoruz.
EXCEPTION
WHEN objectexists THEN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM alert_log
';
EXECUTE IMMEDIATE 'CREATE PUBLIC SYNONYM alert_log FOR scott.alert_log
';
END;
/
--evet gerekli hazırlıkalrı yaptıktan sonra şimdi artık view üzerinde çeşitli sorgular yapabiliriz.
SELECT row_num,
alert_text
FROM alert_log
WHERE alert_date > SYSDATE - 1 / 24
/
ora hatalarını görmek için aşağıdaki sorguyu kullanabiliriz
regexp_like kullanımı ile ilgi bilgi için buraya bakabilrisiniz
SELECT row_num,
alert_date,
alert_text
FROM alert_log
WHERE start_row IN (SELECT start_row
FROM alert_log
WHERE Regexp_like(alert_text,'ORA-'))
AND alert_date > Trunc(SYSDATE,'MON')
/
Alert log dosyasına ne için ihtiyacımız olduğunu kısaca soylemek gerekir ise DB de olan olayları yakalamamızı sağla ne zaman açıldı hangi hataları aldı DB parametreleri neler gibi....
Alert log dosyaları eğer siz konumunu değiştirmediyseniz
C:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\BDUMP dizininde bulabilirsiniz. Ama ben yerini değiştirdim ve şu anda nerede olduğunu bilmiyorum diyorsanız
SELECT value FROM v$parameter WHERE name='background_dump_dest';
sorgusu ile konumunu görebiliriz. Farkettiyseniz v$parameter view'inde database için tanımladığız parametleri bulacaksınız.
select * from dba_directories
Sorgusu ile directories'lere bakıyoruz. Eğer ilgili directory yok ise oluşturacağiz.
Asagidaki kod ile bir DIRECTORIES olusturuyorum. Daha sonra scott kullanicisi için bu directory okuma hakki veriyoruz. Sonrasinda SCOTT kullanici için bir external tablo olusturuyorum.Asagidaki islemleri tek tek de yapabiliriz.
DECLARE
--alert_SID.log dosyasinin oldugu dizin
bdump_dizini VARCHAR2(200);
--Hangi SID ilebagli oldugumuz bunu kullanmamizdaki amaç alert_SID.log (alert_orcl.log) seklinde bir dosya olmasi.SID ismi dinamik olarak veriliyor.
v_sid VARCHAR2(16);
--bunu External table olusturma sirasinda dogru script üretim üretmedigimi görmek için tanimladim.
v_dyn_sql VARCHAR2(5000);
--hatalar için tanimlamalar.
objectexists EXCEPTION;
PRAGMA EXCEPTION_INIT(objectexists,-955);
BEGIN
-- alert_orcl.log dosyasinin konumunu ögreniyorruz.
SELECT VALUE
INTO bdump_dizini
FROM v$parameter
WHERE NAME = 'background_dump_dest';
--ekrana dizini yazdiriyorum.
dbms_output.Put_line(bdump_dizini);
-- database'e yeni bir directory tanimliyoruz.
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY bdump_dir AS '''
||bdump_dizini
||'''';
--bu directory için SCOTT kullanicina okuma (erisim) hakki veriyorum.
EXECUTE IMMEDIATE 'GRANT READ ON DIRECTORY bdump_dir TO scott
';
--Database'e baglandigim SID ismini ögreniyorum.
SELECT instance_name
INTO v_sid
FROM v$instance;
--ekrana V_SID'yi yazdiriyorum kontrol amaçli.
dbms_output.Put_line(v_sid);
COMMIT;
-- yukarida external table için olusturdugum parametlerler ile simdi external tablomu olusturyorum.
v_dyn_sql := 'CREATE TABLE scott.ALERT_LOG_EXTERNAL
(TEXT VARCHAR2(255)
) ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY BDUMP_DIR
ACCESS PARAMETERS
(records delimited by newline
nobadfile
nologfile
)
LOCATION (''alert_'
||v_sid
||'.log'')
)
REJECT LIMIT UNLIMITED';
--dogru script üretip üretmedgimi kontrol için ekrana basiyorum.
dbms_output.Put_line(v_dyn_sql);
EXCEPTION
WHEN objectexists THEN
NULL;
END;
/
External tablomuzu oluşturduktan sonra artık alert loglarımız okuyabiliriz.
SELECT rownum row_num ,text FROM SCOTT.alert_log_external order by 1 desc;
İlk olarak log filemizi okumayı başardık fakat bu çokda kullanışlı görünmüyor şu aşamada. Çeşitli süslemeler ile daha okunabilir bir hale getirmeyeçalışacağiz.
alert log zamanlarını yakalamak için aşağıdaki gibi bir foksiyon oluşturalım.
CREATE OR REPLACE FUNCTION scott.Alert_log_date
(text IN VARCHAR2)
RETURN DATE
IS
invaliddate EXCEPTION;
PRAGMA EXCEPTION_INIT(invaliddate,-1846);
BEGIN
RETURN To_date(text,'Dy Mon DD HH24:MI:SS YYYY','NLS_DATE_LANGUAGE=AMERICAN');
EXCEPTION
WHEN invaliddate THEN
RETURN NULL;
END;
/
Şimdi bu fonksiyonu kullarak alert loglarımızı okuyalım , burada tarih gördüğü satırlarda tarih column'u ekliyor.
SELECT ROWNUM row_num ,scott.alert_log_date(text) alert_date, text
FROM scottt.alert_log_external
WHERE ROWNUM <50
Yukarıdaki sorguda tarih alanı boş gelen yerlere tarihi eklemek için aşağıdaki yapıyı kullanmabiliriz. Burada iki tarih arasına bir önceki tarihi ekleyerek her satırın başına tarih değerini atıyor. Bu sayede olayların hangi tarihte meydana geldiğini daha iyi gözlemleyebiliyoruz (monitor edebiliyoruz).
SELECT row_num ,LAST_VALUE(alert_date IGNORE NULLS) OVER(ORDER BY row_num
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) alert_date
,alert_text
FROM (SELECT ROWNUM row_num
,SCOTT.alert_log_date(text) alert_date
,text alert_text
FROM SCOTT.alert_log_external
)
WHERE ROWNUM < 50>
Aşağıdaki sorguda ise her bir hatanın ,olayın gerekleştiği zamanıki ilk satırın numarasını diğer satırlara yayıyor.
SELECT row_num
,LAST_VALUE(low_row_num IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) start_row
,LAST_VALUE(alert_date IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) alert_date
,alert_text
FROM (SELECT ROWNUM row_num
,NVL2(SCOTT.alert_log_date(text),ROWNUM,NULL) low_row_num
,SCOTT.alert_log_date(text) alert_date
,text alert_text
FROM SCOTT.alert_log_external
)
WHERE ROWNUM < 50
en son oluşturduğumuz sorgu sonucundan bir view oluşturuyoruz.
CREATE OR REPLACE FORCE VIEW scott.alert_log as
SELECT row_num
,LAST_VALUE(low_row_num IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) start_row
,LAST_VALUE(alert_date IGNORE NULLS)
OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) alert_date
,alert_text
FROM (SELECT ROWNUM row_num
,NVL2(scott.alert_log_date(text),ROWNUM,NULL) low_row_num
,scott.alert_log_date(text) alert_date
,text alert_text
FROM scott.alert_log_external
);
--SYNONYM oluşturuyorum.
DECLARE
objectexists EXCEPTION;
PRAGMA EXCEPTION_INIT(objectexists,-955);
BEGIN
EXECUTE IMMEDIATE 'CREATE PUBLIC SYNONYM alert_log FOR scott.alert_log:';
-- E?er böyle bir synonym var ise silip yeniden yarat?yoruz.
EXCEPTION
WHEN objectexists THEN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM alert_log
';
EXECUTE IMMEDIATE 'CREATE PUBLIC SYNONYM alert_log FOR scott.alert_log
';
END;
/
--evet gerekli hazırlıkalrı yaptıktan sonra şimdi artık view üzerinde çeşitli sorgular yapabiliriz.
SELECT row_num,
alert_text
FROM alert_log
WHERE alert_date > SYSDATE - 1 / 24
/
ora hatalarını görmek için aşağıdaki sorguyu kullanabiliriz
regexp_like kullanımı ile ilgi bilgi için buraya bakabilrisiniz
SELECT row_num,
alert_date,
alert_text
FROM alert_log
WHERE start_row IN (SELECT start_row
FROM alert_log
WHERE Regexp_like(alert_text,'ORA-'))
AND alert_date > Trunc(SYSDATE,'MON')
/
TEMPORARY TABLESPACE TEMPFILE EKLEME
TEMPORARY TABLESPACE HATASI
ORA-25153: Temporary Tablespace is Empty
ORA-25153: Geçici Tablo Alanı Boş
yukaridaki hatayi aldiğimizda bakamiz gereken bazi yerler var Öncelik ile tablespcelerimizin yerinde olup olamadığına bakalim.
l - select tablespace_name, STATUS from dba_tablespaces;
Tablespace ve bu tablespacelere ait datafilelerin konumunu görelim. Burada TEMP tablespace'i göremiyoruz.
2- select tablespace_name, file_name from dba_data_files;
Temp tablespace'leri görmek için dba_temp_files bakmamız gerekiyor.
select tablespace_name, file_name from dba_temp_files;
Bu sorgunun sonucunun boş gelmesi durumunda ORA-25153 hatasını alıyoruz.Bir şekilde temp tablespacemize temp datafile eklemeliyiz.
ALTER TABLESPACE "TEMP" ADD TEMPFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF' SIZE 100M AUTOEXTEND ON NEXT 1024K MAXSIZE 100M
ALTER TABLESPACE "TEMP" ADD TEMPFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF' SIZE 100M AUTOEXTEND ON NEXT 1024K MAXSIZE 100M
3- select tablespace_name, file_name from dba_temp_files;
TABLESPACE_NAME FILE_NAME
TEMP C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF
TEMP C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF
Tempfile silmek işleminde aşağıdaki scripti kullanırsanız
ALTER TABLESPACE "TEMP" DROP DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF'
Bu hatayı alırsınız burada TEMPFILE cümleciğini kullanmanız gerekiyor.
ORA-03219: Tablo alani 'TEMP' sözlük tarafindan yönetiliyor, çevrimdisi veya geçici
Tempfile silmek için ise aşağıdaki cümleciği kullanmalısınız.
ALTER TABLESPACE "TEMP" DROP TEMPFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF'
Bu işlemlerden sonra aynı hatayı almayabilirsiniz. Alsanızda sebebi bu olmayacaktir.
Tuesday, September 1, 2009
DATABASE HIZLI BİR ŞEKİLDE KAPATMAK
RESTORE POINT (KURTARMA NOKTASI)
Bazen öyle durumlar olur ki veritabanınızı bir an önce kapatmanız gerekebilir.
böyle durumlarda SHUTDOWN IMMEDIATE demek yeterli olmayacaktır. SHUTDOWN ABORT komutunu kullanmak isteyeceksiniz.
fakat shutdown abort komutunun bazı dezavantajları var, veri kaybı yaşayabilrsiniz. Bu tip durumları aşmak için öncelik ile
restore point(kurtarma noktası) oluşturuyoruz.
Veritabanımızın kurtarma noktası özelliğini kullanabilmemiz için flashback modu'nun açılmış olması gerekmektedir.
Bu konu ilgili bilgiyi buradan alabilirsiniz.
Database'i kapatmadan hemen önce bir kurtarma noktası oluşturuyorum.
SQL> create restore point kapatmadan_once;
Geri yükleme noktası yaratıldı.
database'i hızlı bir şekilde kapatmak için
SQL> shutdown abort;
ORACLE anı kapatıldı.
daha sonra mount modda açıyoruz.Bu şekilde kullanıcıların sisteme erişmelerini kısıtlamış oluyoruz.
SQL> startup mount;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 234883972 bytes
Database Buffers 369098752 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
En son aldığımız restore point'e dönüyoruz.
SQL> flashback database to restore point kapatmadan_once;
Gerisinyal tamamlandı.
Son olarak Veritabanını bütün kullanıcıları açıyoruz. Hadi hayırlısı.
SQL> alter database open resetlogs;
Veritabanı değiştirildi.
oluştuşturduğumuz restore point silmek için
SQL> drop restore point kapatmadan_once;
Geri yükleme noktası bırakıldı.
SQL> drop restore point deneme1;
Geri yükleme noktası bırakıldı.
restore point(kuratma noktaları) listelemek için
SQL> select scn,name from v$restore_point ;
satır seçilmedi
http://www.oracle.com/technology/oramag/oracle/06-nov/o66recovery.html
Bazen öyle durumlar olur ki veritabanınızı bir an önce kapatmanız gerekebilir.
böyle durumlarda SHUTDOWN IMMEDIATE demek yeterli olmayacaktır. SHUTDOWN ABORT komutunu kullanmak isteyeceksiniz.
fakat shutdown abort komutunun bazı dezavantajları var, veri kaybı yaşayabilrsiniz. Bu tip durumları aşmak için öncelik ile
restore point(kurtarma noktası) oluşturuyoruz.
Veritabanımızın kurtarma noktası özelliğini kullanabilmemiz için flashback modu'nun açılmış olması gerekmektedir.
Bu konu ilgili bilgiyi buradan alabilirsiniz.
Database'i kapatmadan hemen önce bir kurtarma noktası oluşturuyorum.
SQL> create restore point kapatmadan_once;
Geri yükleme noktası yaratıldı.
database'i hızlı bir şekilde kapatmak için
SQL> shutdown abort;
ORACLE anı kapatıldı.
daha sonra mount modda açıyoruz.Bu şekilde kullanıcıların sisteme erişmelerini kısıtlamış oluyoruz.
SQL> startup mount;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 234883972 bytes
Database Buffers 369098752 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
En son aldığımız restore point'e dönüyoruz.
SQL> flashback database to restore point kapatmadan_once;
Gerisinyal tamamlandı.
Son olarak Veritabanını bütün kullanıcıları açıyoruz. Hadi hayırlısı.
SQL> alter database open resetlogs;
Veritabanı değiştirildi.
oluştuşturduğumuz restore point silmek için
SQL> drop restore point kapatmadan_once;
Geri yükleme noktası bırakıldı.
SQL> drop restore point deneme1;
Geri yükleme noktası bırakıldı.
restore point(kuratma noktaları) listelemek için
SQL> select scn,name from v$restore_point ;
satır seçilmedi
http://www.oracle.com/technology/oramag/oracle/06-nov/o66recovery.html
DATABASE FLASHBACK AYARLARI
Veritabanımızın flashback özelliğini açmak için aşağıdaki adımları izlemiz yeterli olacaktır.
Bu işlemleri yapmaya başlamadan önce bazı FLASHBACK parametrelerini ayarlamamız gerekecektir.
* DB_RECOVERY_FILE_DEST
* DB_RECOVERY_FILE_DEST_SIZE
* DB_FLASHBACK_RETENTION_TARGET
Bu parametreleri kısaca açıklamak gerekir ise
DB_RECOVERY_FILE_DEST FLASHBACK için kullanılacak olan dosyaların yerini belirtiyoruz.
DB_RECOVERY_FILE_DEST_SIZE ne kadarlık bir alanı bu iş için ayrıcağımızı belirtiyoruz. Bu parametreyi belirlerken FLASHBACK özelliğini kaç gün (ne kadarlık bir zaman dilimi ) için kullanacağız, Bu zaman diliminde üretilmesini tahmin ettiğimiz veri miktarı ne olacak, son olarak disk kapasitemiz ne kadar. Bu iş için ayırdığımız 500GB lik bir diskimiz var ise bunun tamamını buraya tahsis etmeyelim 450 GB sini verelim olurda disk dolar ve database'de işlemler devam ederken DB_RECOVERY_FILE_DEST_SIZE alanı doldu doluyor uyarısı alırsak tam dolmadan önlem alabiliriz.
DB_FLASHBACK_RETENTION_TARGET parametresi verileminiz ne kadarlık bir zaman dilimi için saklayacağimi belirtiyor. Burada 24 saat (1 günlük) olsun derseniz 24*60=1440 değerini belirlememiz gerekir. Anlaşılacağı gibi dakika olarak belirliyoruz.
DB_FLASHBACK_RETENTION_TARGET ve DB_RECOVERY_FILE_DEST_SIZE parametreleri sizin de farkedebileceğiniz gibi birbirleri ile ilişki içerisindeler.
senaryomuzun şu şekilde olduğunu varsayarsak benim günlük olarak 100 gb flashback datam oluşuyor, flashback dönme süremi 7 gün olarak belirliyorum.
bu durumda en az 700 GB lik bir DB_RECOVERY_FILE_DEST_SIZE alanına ihtiyacım olacak.
ORA-38700: Limit of %s flashback database logs has been exceed
Bu hata ile karşılaşmanız kaçınılmaz olacaktır.
Kurulum ile beraber varsayılan olarak gelen parametreler aşağıdaki sorgu ile görülebilir.
select * from v$parameter where name like '%db_recovery%' or name like '%db_flashback%'
Şimdi parametreleri ayarlamaya geldi sıra. Dosyalarımızı nerede saklayacağımızı belirliyoruz.
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='C:\flashback_alani\';
Ne kadarlık bir süre için saklayacağımızı belirliyoruz.
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=10080; -- 1 hafta haftalık full backup aldığımı varsayıyorum. Yeterli alanımda var :))
FLASHBACK için ayırdığım disk alanını belirliyorum.
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=30G; -- 30 Gb olarak belirledim.
Evet flashback parametrelerini belirdik. Şimdi veritabanımızı flashback moda geçirelim. Ben makinamda yaptığım adımları aşağıda belirtiyorum.
Veritabanını açıyoruz.
SQL> startup;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 201329540 bytes
Database Buffers 402653184 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
Veritabanı açıldı.
SQL>
Hangi modda olduğunu görelim. Ben daha önce ARCHIVELOG moda almıştım (RMAN için). Flashback özelliğinin ARCHIVELOG mod istediğini belirtmek için
gecici olarak NOARCHIVELOG moda gececeğim.
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ORCL ARCHIVELOG
FLASHBACK özelliğini kontrol ediyoruz.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
SQL> shutdown immediate;
Veritabanı kapatıldı.
Veritabanı kullanıma kapatıldı.
ORACLE anı kapatıldı.
SQL> alter database noarchivelog;
alter database noarchivelog
*
1 satırında HATA:
ORA-01034: ORACLE not available
SQL> startup mount
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 205523844 bytes
Database Buffers 398458880 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
SQL> alter database noarchivelog;
Veritabanı değiştirildi
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
NOARCHIVELOG modda olmadığını görüyoruz.
SQL> alter database flashback on;
alter database flashback on
*
1 satırında HATA:
ORA-38706: FLASHBACK VERITABANI günlüge kaydetme açilamiyor.
ORA-38707: Ortam kurtarma etkin degil.
SQL> ALTER DATABASE FLASHBACK ON;
ALTER DATABASE FLASHBACK ON
*
1 satırında HATA:
ORA-38706: FLASHBACK VERITABANI günlüge kaydetme açilamiyor.
ORA-38707: Ortam kurtarma etkin degil.
SQL> alter database archivelog;
Veritabanı değiştirildi
ve işlem tamam.
SQL> ALTER DATABASE FLASHBACK ON;
Veritabanı değiştirildi
SQL> alter database open;
ve işlem tamam. Artık anlık olarak yedekten dönebileceğiz. Kullanıcıların yanlışlık ile sildiği tablolar geri gelebicek.
Veritabanı değiştirildi
SQL>
FLASHBACK alanının son durumunu görmek için
SELECT NAME, TO_CHAR (space_limit, '999,999,999,999') AS flashback_max_size,
TO_CHAR (space_limit - space_used + space_reclaimable,
'999,999,999,999'
) AS flashback_kalan_alan,
ROUND ((space_used - space_reclaimable) / space_limit * 100,
1
) AS pct_full
FROM v$recovery_file_dest;
ayrıntılı bilgili buradan alabilirsiniz.
http://www.oracle.com/technology/deploy/availability/htdocs/Flashback_Overview.htm
http://www.cagataycebi.com/oracle/oracle_flashback_db.pdf
Bu işlemleri yapmaya başlamadan önce bazı FLASHBACK parametrelerini ayarlamamız gerekecektir.
* DB_RECOVERY_FILE_DEST
* DB_RECOVERY_FILE_DEST_SIZE
* DB_FLASHBACK_RETENTION_TARGET
Bu parametreleri kısaca açıklamak gerekir ise
DB_RECOVERY_FILE_DEST FLASHBACK için kullanılacak olan dosyaların yerini belirtiyoruz.
DB_RECOVERY_FILE_DEST_SIZE ne kadarlık bir alanı bu iş için ayrıcağımızı belirtiyoruz. Bu parametreyi belirlerken FLASHBACK özelliğini kaç gün (ne kadarlık bir zaman dilimi ) için kullanacağız, Bu zaman diliminde üretilmesini tahmin ettiğimiz veri miktarı ne olacak, son olarak disk kapasitemiz ne kadar. Bu iş için ayırdığımız 500GB lik bir diskimiz var ise bunun tamamını buraya tahsis etmeyelim 450 GB sini verelim olurda disk dolar ve database'de işlemler devam ederken DB_RECOVERY_FILE_DEST_SIZE alanı doldu doluyor uyarısı alırsak tam dolmadan önlem alabiliriz.
DB_FLASHBACK_RETENTION_TARGET parametresi verileminiz ne kadarlık bir zaman dilimi için saklayacağimi belirtiyor. Burada 24 saat (1 günlük) olsun derseniz 24*60=1440 değerini belirlememiz gerekir. Anlaşılacağı gibi dakika olarak belirliyoruz.
DB_FLASHBACK_RETENTION_TARGET ve DB_RECOVERY_FILE_DEST_SIZE parametreleri sizin de farkedebileceğiniz gibi birbirleri ile ilişki içerisindeler.
senaryomuzun şu şekilde olduğunu varsayarsak benim günlük olarak 100 gb flashback datam oluşuyor, flashback dönme süremi 7 gün olarak belirliyorum.
bu durumda en az 700 GB lik bir DB_RECOVERY_FILE_DEST_SIZE alanına ihtiyacım olacak.
ORA-38700: Limit of %s flashback database logs has been exceed
Bu hata ile karşılaşmanız kaçınılmaz olacaktır.
Kurulum ile beraber varsayılan olarak gelen parametreler aşağıdaki sorgu ile görülebilir.
select * from v$parameter where name like '%db_recovery%' or name like '%db_flashback%'
Şimdi parametreleri ayarlamaya geldi sıra. Dosyalarımızı nerede saklayacağımızı belirliyoruz.
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='C:\flashback_alani\';
Ne kadarlık bir süre için saklayacağımızı belirliyoruz.
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=10080; -- 1 hafta haftalık full backup aldığımı varsayıyorum. Yeterli alanımda var :))
FLASHBACK için ayırdığım disk alanını belirliyorum.
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=30G; -- 30 Gb olarak belirledim.
Evet flashback parametrelerini belirdik. Şimdi veritabanımızı flashback moda geçirelim. Ben makinamda yaptığım adımları aşağıda belirtiyorum.
Veritabanını açıyoruz.
SQL> startup;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 201329540 bytes
Database Buffers 402653184 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
Veritabanı açıldı.
SQL>
Hangi modda olduğunu görelim. Ben daha önce ARCHIVELOG moda almıştım (RMAN için). Flashback özelliğinin ARCHIVELOG mod istediğini belirtmek için
gecici olarak NOARCHIVELOG moda gececeğim.
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ORCL ARCHIVELOG
FLASHBACK özelliğini kontrol ediyoruz.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
SQL> shutdown immediate;
Veritabanı kapatıldı.
Veritabanı kullanıma kapatıldı.
ORACLE anı kapatıldı.
SQL> alter database noarchivelog;
alter database noarchivelog
*
1 satırında HATA:
ORA-01034: ORACLE not available
SQL> startup mount
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 205523844 bytes
Database Buffers 398458880 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
SQL> alter database noarchivelog;
Veritabanı değiştirildi
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
NOARCHIVELOG modda olmadığını görüyoruz.
SQL> alter database flashback on;
alter database flashback on
*
1 satırında HATA:
ORA-38706: FLASHBACK VERITABANI günlüge kaydetme açilamiyor.
ORA-38707: Ortam kurtarma etkin degil.
SQL> ALTER DATABASE FLASHBACK ON;
ALTER DATABASE FLASHBACK ON
*
1 satırında HATA:
ORA-38706: FLASHBACK VERITABANI günlüge kaydetme açilamiyor.
ORA-38707: Ortam kurtarma etkin degil.
SQL> alter database archivelog;
Veritabanı değiştirildi
ve işlem tamam.
SQL> ALTER DATABASE FLASHBACK ON;
Veritabanı değiştirildi
SQL> alter database open;
ve işlem tamam. Artık anlık olarak yedekten dönebileceğiz. Kullanıcıların yanlışlık ile sildiği tablolar geri gelebicek.
Veritabanı değiştirildi
SQL>
FLASHBACK alanının son durumunu görmek için
SELECT NAME, TO_CHAR (space_limit, '999,999,999,999') AS flashback_max_size,
TO_CHAR (space_limit - space_used + space_reclaimable,
'999,999,999,999'
) AS flashback_kalan_alan,
ROUND ((space_used - space_reclaimable) / space_limit * 100,
1
) AS pct_full
FROM v$recovery_file_dest;
ayrıntılı bilgili buradan alabilirsiniz.
http://www.oracle.com/technology/deploy/availability/htdocs/Flashback_Overview.htm
http://www.cagataycebi.com/oracle/oracle_flashback_db.pdf
Monday, August 31, 2009
RMAN KATALOG İŞLEMLERİ
RMAN database'inde Katalog için kullanacağimiz user'ı yaratıyoruz.
CREATE USER rman IDENTIFIED BY rman
TEMPORARY TABLESPACE temp
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users;
GRANT RECOVERY_CATALOG_OWNER TO rman;
-- Komut satırında RMAN bağlanıyoruz..
//////////////////////////////////////////////////////////////////////////////////////
C:\Documents and Settings\rdcaates>rman catalog rman/rman@rman
Kurtarma idarecisi : Release 10.2.0.1.0 - Production on Pzt Ağu 31 11:36:55 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
kurtarma kataloğu veritabanına bağlanıldı
RMAN>
//////////////////////////////////////////////////////////////////////////////////////
--şimdi katalog için yaratmış olduğumuz databse ve schema'ı RMAN a tanıyoruz.
RMAN> create catalog
kurtarma kataloğu yaratıldı
RMAN>
Şimdi yarattğimiz bu katalog ile Backuplarını almak isteğimiz Database ilişkilendiriyoruz.
RMAN> exit
Recovery Manager tamamlandı.
C:\Documents and Settings\rdcaates>rman target sys/o123@orcl catalog rman/rman@rman
Kurtarma şdarecisi : Release 10.2.0.1.0 - Production on Pzt Au 31 11:39:34 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
hedef veritabanına bağlanıldı: ORCL (DBID=1223590477)
kurtarma kataloğu veritabanına bağlanıldı
//////////////////////////////////////////////////////////////////////////////////////
RMAN> register database;
veritabanı kurtarma kataloğuna kaydedildi
kurtarma kataloğunun tam eşzamanlamasını başlatma
tam eşzamanlama tamamlandı
RMAN>
şu an son durum elimizde İki tane database (SID) var bunlardan birisi;
Backuplarını düzenli olarak almak istediğimiz diğeri ise aldığımız bu backupları saklayacağımız database diyebiliriz.
hangisinin katalog hangisinin target (hedef) olduğunu belirledik.
bunları birbirine tanıttık.
//////////////////////////////////////////////////////////////////////////////////////
oluşturduğumuz bir katalog'u silmek için DROP catalog çümleciğini kullanabiliriz.
RMAN> drop catalog
kurtarma kataloğunun sahibi: RMAN
kataolg kaldırmayı teyit etmek için DROP CATALOG komutunu yeniden girin
RMAN> drop catalog;
kurtarma kataloğu bırakıldı
RMAN>
silindiğini görmek için report schema diyebiliriz.
RMAN> report schema;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: report komutu, 08/31/2009 12:12:45 konumunda başarısız.
RMAN-06428: kurtarma kataloğu yüklü değil
RMAN>
//////////////////////////////////////////////////////////////////////////////////////
kayıtlı olan bir katalog'un geçerliliğini kaldırmak için unregister komutunu kullanabiliriz.
C:\Documents and Settings\rdcaates>rman target sys/o123@orcl catalog rman/rman@rman
Kurtarma şdarecisi : Release 10.2.0.1.0 - Production on Pzt Au 31 12:16:50 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
hedef veritabanına bağlanıldı: ORCL (DBID=1223590477)
kurtarma kataloğu veritabanına bağlanıldı
RMAN> unregister database;
veritabanı adı: "ORCL" ve DBID: 1223590477
Veritabanının kaydını silmek istediinizden emin misiniz (EVET veya HAYIR girin)
? yes
veritabanının kaydı kurtarma kataloğundan silindi
RMAN>
//////////////////////////////////////////////////////////////////////////////////////
Kataloğumuzun Versiyonu öğrenmek için Sqlplus!a bağlanarak aşağıdaki sorguyu çalıştırabiliriz.
C:\Documents and Settings\rdcaates>sqlplus rman/rman@rman
SQL> SELECT * FROM rman.rcver;
VERSION
------------
10.02.00.00
//////////////////////////////////////////////////////////////////////////////////////
KOMPLE BACKUP ALMA
--Komple Backup için aşağıdaki sourguyu RMAN da çalıştırmanız yeteli olacaktır. Ne Var ne yok Backup'ını alırsınız.
--Burada dizini ve etiketi kendiniz belirleyebilirsiniz. Kullanımı Aşağıdaki şekildedir.
C:\Documents and Settings\rdcaates>rman target sys/o123@orcl catalog rman/rman@rman
RMAN> BACKUP as COMPRESSED BACKUPSET DATABASE FORMAT 'C:\RMAN_BACKUP\dbf_%d_%t_%s.rman' TAG='KOMPLEBACKUP_DBF' PLUS
2> ARCHIVELOG format 'C:\RMAN_BACKUP\arc_%d_%t_%s.rman'
3> TAG='KOMPLEBACKUP_ARC'
4> ;
backup başlatılıyor; saat 31/08/2009
geçerli günlük arşivlendi
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: sıkıştırılmış arşiv günlüğü yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinde arşiv günlüğü belirleniyor
girdi arşiv günlüğü thread=1 sıra=1 kayıt no=71 damga=696342728
girdi arşiv günlüğü thread=1 sıra=2 kayıt no=73 damga=696342735
girdi arşiv günlüğü thread=1 sıra=3 kayıt no=40 damga=696342517
.
.
.
.
.
girdi arşiv günlüğü thread=1 sıra=43 kayıt no=81 damga=696344034
ORA_DISK_1 kanalı: 1 başlangı. parçası 31/08/2009 konumunda
ORA_DISK_1 kanalı: 1 bitiş parçası 31/08/2009 konumunda
parça kontrol noktası=C:\RMAN_BACKUP\ARC_ORCL_696344037_68.RMAN etiket=KOMPLEBAC
KUP_ARC açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:01:58
backup tamamlandı; saat 31/08/2009
backup başlatılıyor; saat 31/08/2009
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: sıkıştırılmış tam veri dosyası yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesindeki veri dosyaları belirleniyor
girdi veri dosyası fno=00001 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.
DBF
girdi veri dosyası fno=00003 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.
DBF
girdi veri dosyası fno=00002 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01
.DBF
girdi veri dosyası fno=00004 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.D
BF
girdi veri dosyası fno=00005 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2
girdi veri dosyası fno=00006 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENE
ME_DF1.DBF
girdi veri dosyası fno=00007 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENE
ME_DF2.DBF
girdi veri dosyası fno=00008 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENE
ME_DF3.DBF
ORA_DISK_1 kanalı: 1 başlangıçparçası 31/08/2009 konumunda
ORA_DISK_1 kanalı: 1 bitiş parçası 31/08/2009 konumunda
parça kontrol noktası=C:\RMAN_BACKUP\DBF_ORCL_696344155_69.RMAN etiket=KOMPLEBAC
KUP_DBF açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:00:46
backup tamamlandı; saat 31/08/2009
backup başlatılıyor; saat 31/08/2009
geçerli günlük arşivlendi
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: sıkıştırılmış arşiv günlüğü yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinde arşiv günlüğü belirleniyor
girdi arşiv günlüğü thread=1 sıra=44 kayıt no=82 damga=696344202
ORA_DISK_1 kanalı: 1 başlangıç parçası 31/08/2009 konumunda
ORA_DISK_1 kanalı: 1 bitiş parçası 31/08/2009 konumunda
parça kontrol noktası=C:\RMAN_BACKUP\ARC_ORCL_696344203_70.RMAN etiket=KOMPLEBAC
KUP_ARC açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:00:02
backup tamamlandı; saat 31/08/2009
Control File and SPFILE Autobackup başlatılıyor; saat 31/08/2009
parça tutamacı=C:\RMAN_BACKUP\CF_C-1223590477-20090831-03.RMAN açıklama=NONE
Control File and SPFILE Autobackup tamamlandı; saat 31/08/2009
RMAN>
Backup alamada bir sorun olup olmaddğıni kontrol edelim
RMAN> crosscheck backupset;
CREATE USER rman IDENTIFIED BY rman
TEMPORARY TABLESPACE temp
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users;
GRANT RECOVERY_CATALOG_OWNER TO rman;
-- Komut satırında RMAN bağlanıyoruz..
//////////////////////////////////////////////////////////////////////////////////////
C:\Documents and Settings\rdcaates>rman catalog rman/rman@rman
Kurtarma idarecisi : Release 10.2.0.1.0 - Production on Pzt Ağu 31 11:36:55 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
kurtarma kataloğu veritabanına bağlanıldı
RMAN>
//////////////////////////////////////////////////////////////////////////////////////
--şimdi katalog için yaratmış olduğumuz databse ve schema'ı RMAN a tanıyoruz.
RMAN> create catalog
kurtarma kataloğu yaratıldı
RMAN>
Şimdi yarattğimiz bu katalog ile Backuplarını almak isteğimiz Database ilişkilendiriyoruz.
RMAN> exit
Recovery Manager tamamlandı.
C:\Documents and Settings\rdcaates>rman target sys/o123@orcl catalog rman/rman@rman
Kurtarma şdarecisi : Release 10.2.0.1.0 - Production on Pzt Au 31 11:39:34 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
hedef veritabanına bağlanıldı: ORCL (DBID=1223590477)
kurtarma kataloğu veritabanına bağlanıldı
//////////////////////////////////////////////////////////////////////////////////////
RMAN> register database;
veritabanı kurtarma kataloğuna kaydedildi
kurtarma kataloğunun tam eşzamanlamasını başlatma
tam eşzamanlama tamamlandı
RMAN>
şu an son durum elimizde İki tane database (SID) var bunlardan birisi;
Backuplarını düzenli olarak almak istediğimiz diğeri ise aldığımız bu backupları saklayacağımız database diyebiliriz.
hangisinin katalog hangisinin target (hedef) olduğunu belirledik.
bunları birbirine tanıttık.
//////////////////////////////////////////////////////////////////////////////////////
oluşturduğumuz bir katalog'u silmek için DROP catalog çümleciğini kullanabiliriz.
RMAN> drop catalog
kurtarma kataloğunun sahibi: RMAN
kataolg kaldırmayı teyit etmek için DROP CATALOG komutunu yeniden girin
RMAN> drop catalog;
kurtarma kataloğu bırakıldı
RMAN>
silindiğini görmek için report schema diyebiliriz.
RMAN> report schema;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: report komutu, 08/31/2009 12:12:45 konumunda başarısız.
RMAN-06428: kurtarma kataloğu yüklü değil
RMAN>
//////////////////////////////////////////////////////////////////////////////////////
kayıtlı olan bir katalog'un geçerliliğini kaldırmak için unregister komutunu kullanabiliriz.
C:\Documents and Settings\rdcaates>rman target sys/o123@orcl catalog rman/rman@rman
Kurtarma şdarecisi : Release 10.2.0.1.0 - Production on Pzt Au 31 12:16:50 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
hedef veritabanına bağlanıldı: ORCL (DBID=1223590477)
kurtarma kataloğu veritabanına bağlanıldı
RMAN> unregister database;
veritabanı adı: "ORCL" ve DBID: 1223590477
Veritabanının kaydını silmek istediinizden emin misiniz (EVET veya HAYIR girin)
? yes
veritabanının kaydı kurtarma kataloğundan silindi
RMAN>
//////////////////////////////////////////////////////////////////////////////////////
Kataloğumuzun Versiyonu öğrenmek için Sqlplus!a bağlanarak aşağıdaki sorguyu çalıştırabiliriz.
C:\Documents and Settings\rdcaates>sqlplus rman/rman@rman
SQL> SELECT * FROM rman.rcver;
VERSION
------------
10.02.00.00
//////////////////////////////////////////////////////////////////////////////////////
KOMPLE BACKUP ALMA
--Komple Backup için aşağıdaki sourguyu RMAN da çalıştırmanız yeteli olacaktır. Ne Var ne yok Backup'ını alırsınız.
--Burada dizini ve etiketi kendiniz belirleyebilirsiniz. Kullanımı Aşağıdaki şekildedir.
C:\Documents and Settings\rdcaates>rman target sys/o123@orcl catalog rman/rman@rman
RMAN> BACKUP as COMPRESSED BACKUPSET DATABASE FORMAT 'C:\RMAN_BACKUP\dbf_%d_%t_%s.rman' TAG='KOMPLEBACKUP_DBF' PLUS
2> ARCHIVELOG format 'C:\RMAN_BACKUP\arc_%d_%t_%s.rman'
3> TAG='KOMPLEBACKUP_ARC'
4> ;
backup başlatılıyor; saat 31/08/2009
geçerli günlük arşivlendi
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: sıkıştırılmış arşiv günlüğü yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinde arşiv günlüğü belirleniyor
girdi arşiv günlüğü thread=1 sıra=1 kayıt no=71 damga=696342728
girdi arşiv günlüğü thread=1 sıra=2 kayıt no=73 damga=696342735
girdi arşiv günlüğü thread=1 sıra=3 kayıt no=40 damga=696342517
.
.
.
.
.
girdi arşiv günlüğü thread=1 sıra=43 kayıt no=81 damga=696344034
ORA_DISK_1 kanalı: 1 başlangı. parçası 31/08/2009 konumunda
ORA_DISK_1 kanalı: 1 bitiş parçası 31/08/2009 konumunda
parça kontrol noktası=C:\RMAN_BACKUP\ARC_ORCL_696344037_68.RMAN etiket=KOMPLEBAC
KUP_ARC açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:01:58
backup tamamlandı; saat 31/08/2009
backup başlatılıyor; saat 31/08/2009
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: sıkıştırılmış tam veri dosyası yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesindeki veri dosyaları belirleniyor
girdi veri dosyası fno=00001 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.
DBF
girdi veri dosyası fno=00003 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.
DBF
girdi veri dosyası fno=00002 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01
.DBF
girdi veri dosyası fno=00004 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.D
BF
girdi veri dosyası fno=00005 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2
girdi veri dosyası fno=00006 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENE
ME_DF1.DBF
girdi veri dosyası fno=00007 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENE
ME_DF2.DBF
girdi veri dosyası fno=00008 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENE
ME_DF3.DBF
ORA_DISK_1 kanalı: 1 başlangıçparçası 31/08/2009 konumunda
ORA_DISK_1 kanalı: 1 bitiş parçası 31/08/2009 konumunda
parça kontrol noktası=C:\RMAN_BACKUP\DBF_ORCL_696344155_69.RMAN etiket=KOMPLEBAC
KUP_DBF açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:00:46
backup tamamlandı; saat 31/08/2009
backup başlatılıyor; saat 31/08/2009
geçerli günlük arşivlendi
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: sıkıştırılmış arşiv günlüğü yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinde arşiv günlüğü belirleniyor
girdi arşiv günlüğü thread=1 sıra=44 kayıt no=82 damga=696344202
ORA_DISK_1 kanalı: 1 başlangıç parçası 31/08/2009 konumunda
ORA_DISK_1 kanalı: 1 bitiş parçası 31/08/2009 konumunda
parça kontrol noktası=C:\RMAN_BACKUP\ARC_ORCL_696344203_70.RMAN etiket=KOMPLEBAC
KUP_ARC açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:00:02
backup tamamlandı; saat 31/08/2009
Control File and SPFILE Autobackup başlatılıyor; saat 31/08/2009
parça tutamacı=C:\RMAN_BACKUP\CF_C-1223590477-20090831-03.RMAN açıklama=NONE
Control File and SPFILE Autobackup tamamlandı; saat 31/08/2009
RMAN>
Backup alamada bir sorun olup olmaddğıni kontrol edelim
RMAN> crosscheck backupset;
Sunday, August 30, 2009
LISTENER AYARLARI VE TEK SİSTEMDE İKİ DATABASE ÇALIŞTIRMA
Bir isletim sistemi üzerine 2 tane Oracle database kurma islemi sirasinda bazen listener hatasi olabilirsiniz. Dinleyici bulunamadi vs ...
Burada normal bir sekilde oracle'nin arayüzünü ( Database Configuration Assistant ) kullanarak kurulumu yapiyorum. Burada Her bir database için ayri port numarası vermeye gerek yoktur.
tek bir porttan ve tek bir listenr ile birçok database'e (SID) bağlanabilirsiniz. Bu deneme yada test amaçlı sistemler için geçerlidir. Bu şekilde bir sistem performanslı olmayacaktır.
O portta ve listenerde yoğunluğa neden olabilir.
Ilk kurduğum database default kurulumda gelen ORCL ikinci kurdugum database ise RMAN database'i. RMAN database'inin kurmamdaki amaç RMAN için Katalog olarak kullanacağım.
Aslında ikisini de aynı sisteme kurmak yanlış. Backup Stratejisi için kötü bir durum.
Kurulum işlemi bittikten sonra SQL*PLUS ile baglaniyorum. Ilk ünce ORCL database'ime baglanacagim.
C:\Documents and Settings\rdcaates>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Per Au 27 15:09:25 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Kullanici adini girin: sys/o123@orcl as sysdba
Bağlanti:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
ORCL 1223590477
SQL>
Ikinci olarak RMAN database'ine baglaniyorum.
C:\Documents and Settings\rdcaates>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Per Au 27 15:16:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
--burada hangisine baglanacagımı belirtmiyorum.
Kullanici adini girin: sys as sysdba
Parolayi girin:
Bağlanti:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
RMAN 1582417640
SQL>
Seklinde bir yapi kullaniyoruz. Burada su sekilde baglanacagi database'i belirterek yapinca hata aliyor. Sebebi listener'da tanımlamamış olmamız.
C:\Documents and Settings\rdcaates>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Per Au 27 15:18:34 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
--Asagidaki sekilde baglaninca hata aliyorum.
Kullanici adini girin: sys/o123@rman as sysdba
ERROR:
ORA-12514: TNS: Dinleyici su anda baglanti aüiklayicisinda belirtilen hizmeti
tanimiyor.
Bu arada listener.ora ve tnsnames.ora dosyalarim asagidaki sekildeler.
tnsnames.ora
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
# tnsnames.ora Network Configuration File: c:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
RMAN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = aates)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rman)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = aates)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
listener.ora
////////////////////////////////////////////////////////////////////////////////////////////////////////////
# listener.ora Network Configuration File: c:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
#burada listener listesine eklemeler yapıyorum.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
#kendi SID ve oracle home bilgilerinizi girerek bu yapıyı kullanabilrisiniz.
# port bilgilerine dikkat etmeniz gerekiyor.
)
(SID_DESC =
(SID_NAME = RMAN)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)
#burada tek bir listenerdan iki db'yi çalıştırıyom.
#tek bir port kullanıyorlar dikkat ederseniz.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = aates)(PORT = 1521))
)
)
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Dosyalarimi yukaridaki sekilde tanimladiktan sonra windows service'den Oracle service'lerin RESTART ediyorum.
OracleOraDb10g_home1TNSListener
Yukaridaki islemeler ile database 2 tane listener tanimladik ve bunlari üalistirdik.
Listenerleri baslatma islemini windows ekraninin yanisira Command satirinda da yapabilrisiniz.
C:\Documents and Settings\rdcaates>lsnrctl
LSNRCTL> status
LSNRCTL> stop listener
LSNRCTL> status
LSNRCTL> start listener
LSNRCTL> status
Yukarıdaki işlemlerin arkasından başarı bir şekilde bağlanıyorum.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
--burada bağlantı scritini veriyorum.
C:\Documents and Settings\aliates>sqlplus sys/o123@orcl as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:15:41 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
--ORCL database'ini kapatıyorum.
SQL> shutdown abort;
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
--şimdi Listener'ımı tekrar kontrol etmek için yeniden bağlanmayı deniyorum.
C:\Documents and Settings\aliates>sqlplus sys/o123@orcl as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:15:58 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
--hangi database açıldı görmek için bakmak istiyorum ama kapalı olduğu için SQL sorgularım çalışmıyor.
SQL> select name grom v$database;
select name grom v$database
*
ERROR at line 1:
ORA-01034: ORACLE not available
--database'i açıyorum.
SQL> startup;
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 176163764 bytes
Database Buffers 419430400 bytes
Redo Buffers 7135232 bytes
Database mounted.
Database opened.
--kontrol ediyoruz.
SQL> select name from v$database;
NAME
---------
ORCL
SQL>
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Aynı işlemleri değeri içinde yapıyorum :))
C:\Documents and Settings\aliates>sqlplus sys/o123@rman as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:16:36 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown abort;
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Pr
oduction
With the Partitioning, OLAP and Data Mining options
C:\Documents and Settings\aliates>sqlplus sys/o123@rman as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:17:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> select name from v$database;
select name from v$database
*
ERROR at line 1:
ORA-01034: ORACLE not available
SQL> startup;
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
Database mounted.
Database opened.
SQL> select name from v$database;
NAME
---------
RMAN
SQL>
Listenerler ile ayritili bilgiyi adresinden alabilirsiniz.
http://download.oracle.com/docs/cd/B25329_01/doc/admin.102/b25107/network.htm#BHCDDAII
Burada normal bir sekilde oracle'nin arayüzünü ( Database Configuration Assistant ) kullanarak kurulumu yapiyorum. Burada Her bir database için ayri port numarası vermeye gerek yoktur.
tek bir porttan ve tek bir listenr ile birçok database'e (SID) bağlanabilirsiniz. Bu deneme yada test amaçlı sistemler için geçerlidir. Bu şekilde bir sistem performanslı olmayacaktır.
O portta ve listenerde yoğunluğa neden olabilir.
Ilk kurduğum database default kurulumda gelen ORCL ikinci kurdugum database ise RMAN database'i. RMAN database'inin kurmamdaki amaç RMAN için Katalog olarak kullanacağım.
Aslında ikisini de aynı sisteme kurmak yanlış. Backup Stratejisi için kötü bir durum.
Kurulum işlemi bittikten sonra SQL*PLUS ile baglaniyorum. Ilk ünce ORCL database'ime baglanacagim.
C:\Documents and Settings\rdcaates>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Per Au 27 15:09:25 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Kullanici adini girin: sys/o123@orcl as sysdba
Bağlanti:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
ORCL 1223590477
SQL>
Ikinci olarak RMAN database'ine baglaniyorum.
C:\Documents and Settings\rdcaates>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Per Au 27 15:16:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
--burada hangisine baglanacagımı belirtmiyorum.
Kullanici adini girin: sys as sysdba
Parolayi girin:
Bağlanti:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
RMAN 1582417640
SQL>
Seklinde bir yapi kullaniyoruz. Burada su sekilde baglanacagi database'i belirterek yapinca hata aliyor. Sebebi listener'da tanımlamamış olmamız.
C:\Documents and Settings\rdcaates>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Per Au 27 15:18:34 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
--Asagidaki sekilde baglaninca hata aliyorum.
Kullanici adini girin: sys/o123@rman as sysdba
ERROR:
ORA-12514: TNS: Dinleyici su anda baglanti aüiklayicisinda belirtilen hizmeti
tanimiyor.
Bu arada listener.ora ve tnsnames.ora dosyalarim asagidaki sekildeler.
tnsnames.ora
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
# tnsnames.ora Network Configuration File: c:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
RMAN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = aates)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rman)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = aates)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
listener.ora
////////////////////////////////////////////////////////////////////////////////////////////////////////////
# listener.ora Network Configuration File: c:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
#burada listener listesine eklemeler yapıyorum.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
#kendi SID ve oracle home bilgilerinizi girerek bu yapıyı kullanabilrisiniz.
# port bilgilerine dikkat etmeniz gerekiyor.
)
(SID_DESC =
(SID_NAME = RMAN)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
)
)
#burada tek bir listenerdan iki db'yi çalıştırıyom.
#tek bir port kullanıyorlar dikkat ederseniz.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = aates)(PORT = 1521))
)
)
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Dosyalarimi yukaridaki sekilde tanimladiktan sonra windows service'den Oracle service'lerin RESTART ediyorum.
OracleOraDb10g_home1TNSListener
Yukaridaki islemeler ile database 2 tane listener tanimladik ve bunlari üalistirdik.
Listenerleri baslatma islemini windows ekraninin yanisira Command satirinda da yapabilrisiniz.
C:\Documents and Settings\rdcaates>lsnrctl
LSNRCTL> status
LSNRCTL> stop listener
LSNRCTL> status
LSNRCTL> start listener
LSNRCTL> status
Yukarıdaki işlemlerin arkasından başarı bir şekilde bağlanıyorum.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
--burada bağlantı scritini veriyorum.
C:\Documents and Settings\aliates>sqlplus sys/o123@orcl as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:15:41 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
--ORCL database'ini kapatıyorum.
SQL> shutdown abort;
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
--şimdi Listener'ımı tekrar kontrol etmek için yeniden bağlanmayı deniyorum.
C:\Documents and Settings\aliates>sqlplus sys/o123@orcl as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:15:58 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
--hangi database açıldı görmek için bakmak istiyorum ama kapalı olduğu için SQL sorgularım çalışmıyor.
SQL> select name grom v$database;
select name grom v$database
*
ERROR at line 1:
ORA-01034: ORACLE not available
--database'i açıyorum.
SQL> startup;
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 176163764 bytes
Database Buffers 419430400 bytes
Redo Buffers 7135232 bytes
Database mounted.
Database opened.
--kontrol ediyoruz.
SQL> select name from v$database;
NAME
---------
ORCL
SQL>
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Aynı işlemleri değeri içinde yapıyorum :))
C:\Documents and Settings\aliates>sqlplus sys/o123@rman as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:16:36 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown abort;
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Pr
oduction
With the Partitioning, OLAP and Data Mining options
C:\Documents and Settings\aliates>sqlplus sys/o123@rman as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 30 11:17:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> select name from v$database;
select name from v$database
*
ERROR at line 1:
ORA-01034: ORACLE not available
SQL> startup;
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
Database mounted.
Database opened.
SQL> select name from v$database;
NAME
---------
RMAN
SQL>
Listenerler ile ayritili bilgiyi adresinden alabilirsiniz.
http://download.oracle.com/docs/cd/B25329_01/doc/admin.102/b25107/network.htm#BHCDDAII
Tuesday, August 25, 2009
TABLESPACE VE DATAFILE GENİŞLEME PROBLEMİ
ORA-01653: tablo_adi tablosu 1024 kadar tablespace_name tablo alanında genişletilemiyor
Hatası aldığımız zaman bunun çözümü basittir.
Tabloyu oluşturduğumuz tablespace'de yeteri kadar alan kalmamıştır. Bunun anlamı tablespace'nin datafileleri dolmuştur yada datafile'lerin olduğu disklerde yer kalmamıştır.
Burada disklerde mi yer kalmadi yoksa datafile'ler belirlenen maximum boyuta mı ulaştılar. Eğer datafile'leri AUTOEXTEND ON oluşturduysak disklerde yeterli alan olup olmadığını kontrol etmemiz gerekecektir.
datafilelerimizi AUTOEXTEND yapmak için aşağıdaki sql işimizi görecektir.
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENEME_DF1.DBF' AUTOEXTEND ON NEXT 1024K MAXSIZE UNLIMITED
AUTOEXTENT özelliğini kapatmak için aşağıdaki komut dizilimini uygulamalıyız.
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMAN_DENEME_DF1.DBF' AUTOEXTEND OFF
Ama sadece bizim belirlediğimiz maximum boya ulaşmasını istiyor isek aşağıdaki şekilde yapabiliriz.
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' RESIZE 100000K
datafile boyutunu yeniden belirlemek için yukarıdaki komut işimize yarayacaktır. Burada dikkat edilmesi gereken var şu anki boyutundan küçük bir değer girilmemesidir.
Aksi halde
ORA-03297: dosya, istenen RESIZE degerinden ötede kullanilmis veri içeriyor
hatasını alırsınız.
CONTROL FILE KURTARMA
Control file Autobackup scriptini hazırlıyoruz. Burada kendi belirlediğimiz format tipine göre yine bizim belirlediğimiz dizine otomatik olarak control filenin backup'ını alacak.
RMAN> configure controlfile autobackup format for device type disk to 'c:\rman_backup\ctlfile%F_%d-id-%I_%u';
yeni RMAN konfigürasyon parametreleri:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'c:\rman_backup\ctlfile%F_%d-id-%I_%u';
yeni RMAN konfigürasyon parametreleri başarıyla depolandı
Autobackup almayı otomatikleştirmek için
RMAN>configure controlfile autobackup on;
yapılan değişikleri ve RMAN parametrelerini görmek için
RMAN>show all;
Contol fileleri sileceğiz. Silmeden önce Database'i kapatmamız gerekiyor. Aksi halde kendisi kullandığı çin silmeye izin vermiyor.
Burada silmek yerine içlerini de başaltabiliriz. Yada control filenin olduğunu diskleri kapatabiliz. Amaç control file olmadan database'i açmak ve RMAN ile alınan yedekten dönmek.
SQL> shutdown immediate; ile database 'i kapatıyoruz.
bu işlemin ardından contol filelerin olduğu dizinde control fileleri silelim.
C:\oracle\product\10.2.0\oradata\orcl
Şimdi sqlplus'a gecerek database'i açmaya çalışıyoruz.
--standart bir kurulum yaptım. Kurulumun üzereinde herhangibi bir değişiklik yapmadım.
SQL> startup;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
ORA-00205: kontrol dosyası belirleme hatası, daha fazla bilgi icin uyarı
gunluğune bakın
RMAN'a geçiyoruz.
C:\Documents and Settings\aates>rman target /
Kurtarma şdarecisi : Release 10.2.0.1.0 - Production on Sal Au 25 14:35:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
hedef veritabanı ile balantılı: orcl (yüklü değil)
RMAN>
Control file backupımızın olduğu dizinden backupımızı cağırarak geri yüklüyoruz.
RMAN>restore controlfile from 'c:\rman_backup\CF-D_ORCL-ID-1223590477_13KNIK92';
Şimdi restore işlemini gerçekleştirdik.
C:\oracle\product\10.2.0\oradata\orcl dizinine bakarsanız control filelerin geri geldiğini göreceğiz.
--Veritabanını açamaya çalıştığımızda
SQL> alter database open;
alter database open
*
1 satırında HATA:
ORA-01507: veritabanı kullanıma acılamadı
Fakat recover yapmamız gerekiyor sadece restore işlemi bizim için yeterli olmayacaktır.
Ama burada diyebilirsiniz ki benim Control filelerim yerinde. Ama bu control filelere database'nin son halini göstermiyor.Beli Arada yeni datafileler ekledik belki yeni tablolar yeni schemalar yarattık. İşte bunların Control File'mize göstermemiz gerekecek.
Kapatıp açmayı deneyelim.
SQL> shutdown immediate;
ORA-01507: veritabanı kullanıma açılamadı.
ORACLE anı kapatıldı.
SQL> startup;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 205523844 bytes
Database Buffers 398458880 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
ORA-01589: veritabani açma için RESETLOGS veya NORESETLOGS seçenegi
kullanilmali
Resetlog ile son hali control filelere gösteriyoruz.
SQL> alter database open resetlogs;
alter database open resetlogs
*
1 satırında HATA:
ORA-01190: 1 kontrol dosyasi veya veri dosyasi son RESETLOGS'tan önce
ORA-01110: veri dosyasi 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
bu seferde bize datafilelerin uyumsuz olduğunu kurtarılması gerektiğini söyluyor. Bu durumda datafilerin hepsini recover yapmamız gerekecek.
RMAN' a Gecerek recover etmeyi deniyoruz.
RMAN> recover datafile 1;
recover başlatılıyor; saat 25/08/2009
implicit crosscheck backup başlatılıyor; saat 25/08/2009
kurtarma katalou yerine hedef veritabanı kontrol dosyası kullanılıyor
ayrılan kanal: ORA_DISK_1
ORA_DISK_1 kanalı: sid=155 aygt³r³=DISK
14 nesne çapraz denetlendi
implicit crosscheck backup tamamlandı; saat 25/08/2009
implicit crosscheck copy başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
implicit crosscheck copy tamamlandı; saat 25/08/2009
kurtarma alanındaki tüm dosyalar aranıyor
dosyalar kataloğa kaydediliyor...
kataloğa kaydetme tamamlandı
kataloğa Kaydedilen Dosyaların Listesi
=======================
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979DNCO_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979GZ8D_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979PNTF_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979SPOP_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_597B968Y_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_2_5979DHNY_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_2_5979PM01_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_2_597B994K_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_3_5979DLTT_.ARC
ORA_DISK_1 kanalı kullanılıyor
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover komutu, 08/25/2009 14:46:44 konumunda başarısız
RMAN-06067: yedek veya yaratılmış kontrol dosyasıyla RECOVER DATABASE gereklidir
RMAN>
Archivelog lardan datafile'i düzenlmeyi denedi ama beceremedi. Bize recover database komutunu uygulamamız gerektiğini söylüyor.
Recover database işlemini denemeden önce datafilemizi rertore etmeyi deniyorum.
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF datafilesini geri yüklüyorum.
RMAN> restore datafile 1;
restore başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00001, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-ORCLXXXX_FNO-1_10KNIJ4P yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-ORCLXXXX_FNO-1_10KNIJ4P tag=TAG20090825T100201
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:25
restore tamamlandı; saat 25/08/2009
şimdi benden istediği datafile'i geri yükleme işlemini gerçekleştirdim. database'i kurtarıyorum.
RMAN> recover database;
recover başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ortam kurtarmayı başlatma
ortam kurtarma başarılamadı
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover komutu, 08/25/2009 14:50:30 konumunda başarısız
ORA-00283: recovery session canceled due to errors
RMAN-11003: SQL deyiminin çözümlenmesi/çalıştırılması sırasında başarısızlık görülüyor: alter database recover if needed start until cancel using backup controlfile
ORA-00283: hatalar nedeniyle kurtarma oturumu iptal edildi
ORA-19909: 2 veri dosyasi artik bir sürüme ait
ORA-01110: veri dosyasi 2: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF'
--hooop bu kezde benden C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF datafile'inin bozuk olduğunu söyluyor. Bu böyle sürüp gidecek gibi duruyor. ben en iyisi restore database diyerek bu çileden kurtuluyorum.
RMAN> restore database;
restore başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
veri dosyası 1 atlanıyor; zaten C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF dosyasına geri yüklendi
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00002, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_0PKNIJ13 yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_0PKNIJ13 tag=TAG20090825T100003
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:04
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00003, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0QKNIJ17 yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0QKNIJ17 tag=TAG20090825T100007
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:15
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00004, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0RKNIJ1O yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0RKNIJ1O tag=TAG20090825T100024
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:01
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00005, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DF.DBF dosyasınageri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0SKNIJ1R yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0SKNIJ1R tag=TAG20090825T100026
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:03
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00006, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DF1.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0TKNIJ21 yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0TKNIJ21 tag=TAG20090825T100033
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:04
restore tamamlandı; saat 25/08/2009
evet database'in bütün filelerini geri getirdim. şimdi kurtarmayı başlatıyorum.
RMAN> recover database;
recover başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ortam kurtarmayı başlatma
arşiv günlüğü thread'i 1 sıra 3 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_3_5979DLTT_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 1 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979PNTF_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 2 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_5979PM01_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 1 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979SPOP_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 2 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_597B994K_.ARC dosyası olarak diskte
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_3_5979DLTT_.ARC thread=1 sıra=3
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979PNTF_.ARC thread=1 sıra=1
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_5979PM01_.ARC thread=1 sıra=2
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979SPOP_.ARC thread=1 sıra=1
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_597B994K_.ARC thread=1 sıra=2
ortam kurtarma tamamlandı, geçen süre: 00:00:16
recover tamamlandı; saat 25/08/2009
RMAN>
evet kurtarma işleminin de başarı ile bittiğini gördükten sonra şimdi database'i güvenli bir şekilde açabilirim.
Bu arada şağıdaki hatadan biraz bahsedelim RMAN restore işlemlerini yaparken sabırsızlanarak database'i açmaya denedim oracle aşaıdaki hatayı bana döndü bilginize.
SQL> alter database open resetlogs;
alter database open resetlogs
*
1 satırında HATA:
ORA-01154: veritabanı meşgul. şimdi açma, kapama, kullanıma aça ve kaldırmaya izni verilmez.
SQL> alter database open resetlogs;
Veritabanı değiştirildi.
SQL>select * from user_tables where rownum<10;
örnek bir sorgu atarak çalışırlılığı gecici test edebiliriz.
RMAN> configure controlfile autobackup format for device type disk to 'c:\rman_backup\ctlfile%F_%d-id-%I_%u';
yeni RMAN konfigürasyon parametreleri:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'c:\rman_backup\ctlfile%F_%d-id-%I_%u';
yeni RMAN konfigürasyon parametreleri başarıyla depolandı
Autobackup almayı otomatikleştirmek için
RMAN>configure controlfile autobackup on;
yapılan değişikleri ve RMAN parametrelerini görmek için
RMAN>show all;
Contol fileleri sileceğiz. Silmeden önce Database'i kapatmamız gerekiyor. Aksi halde kendisi kullandığı çin silmeye izin vermiyor.
Burada silmek yerine içlerini de başaltabiliriz. Yada control filenin olduğunu diskleri kapatabiliz. Amaç control file olmadan database'i açmak ve RMAN ile alınan yedekten dönmek.
SQL> shutdown immediate; ile database 'i kapatıyoruz.
bu işlemin ardından contol filelerin olduğu dizinde control fileleri silelim.
C:\oracle\product\10.2.0\oradata\orcl
Şimdi sqlplus'a gecerek database'i açmaya çalışıyoruz.
--standart bir kurulum yaptım. Kurulumun üzereinde herhangibi bir değişiklik yapmadım.
SQL> startup;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
ORA-00205: kontrol dosyası belirleme hatası, daha fazla bilgi icin uyarı
gunluğune bakın
RMAN'a geçiyoruz.
C:\Documents and Settings\aates>rman target /
Kurtarma şdarecisi : Release 10.2.0.1.0 - Production on Sal Au 25 14:35:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
hedef veritabanı ile balantılı: orcl (yüklü değil)
RMAN>
Control file backupımızın olduğu dizinden backupımızı cağırarak geri yüklüyoruz.
RMAN>restore controlfile from 'c:\rman_backup\CF-D_ORCL-ID-1223590477_13KNIK92';
Şimdi restore işlemini gerçekleştirdik.
C:\oracle\product\10.2.0\oradata\orcl dizinine bakarsanız control filelerin geri geldiğini göreceğiz.
--Veritabanını açamaya çalıştığımızda
SQL> alter database open;
alter database open
*
1 satırında HATA:
ORA-01507: veritabanı kullanıma acılamadı
Fakat recover yapmamız gerekiyor sadece restore işlemi bizim için yeterli olmayacaktır.
Ama burada diyebilirsiniz ki benim Control filelerim yerinde. Ama bu control filelere database'nin son halini göstermiyor.Beli Arada yeni datafileler ekledik belki yeni tablolar yeni schemalar yarattık. İşte bunların Control File'mize göstermemiz gerekecek.
Kapatıp açmayı deneyelim.
SQL> shutdown immediate;
ORA-01507: veritabanı kullanıma açılamadı.
ORACLE anı kapatıldı.
SQL> startup;
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 205523844 bytes
Database Buffers 398458880 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
ORA-01589: veritabani açma için RESETLOGS veya NORESETLOGS seçenegi
kullanilmali
Resetlog ile son hali control filelere gösteriyoruz.
SQL> alter database open resetlogs;
alter database open resetlogs
*
1 satırında HATA:
ORA-01190: 1 kontrol dosyasi veya veri dosyasi son RESETLOGS'tan önce
ORA-01110: veri dosyasi 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
bu seferde bize datafilelerin uyumsuz olduğunu kurtarılması gerektiğini söyluyor. Bu durumda datafilerin hepsini recover yapmamız gerekecek.
RMAN' a Gecerek recover etmeyi deniyoruz.
RMAN> recover datafile 1;
recover başlatılıyor; saat 25/08/2009
implicit crosscheck backup başlatılıyor; saat 25/08/2009
kurtarma katalou yerine hedef veritabanı kontrol dosyası kullanılıyor
ayrılan kanal: ORA_DISK_1
ORA_DISK_1 kanalı: sid=155 aygt³r³=DISK
14 nesne çapraz denetlendi
implicit crosscheck backup tamamlandı; saat 25/08/2009
implicit crosscheck copy başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
implicit crosscheck copy tamamlandı; saat 25/08/2009
kurtarma alanındaki tüm dosyalar aranıyor
dosyalar kataloğa kaydediliyor...
kataloğa kaydetme tamamlandı
kataloğa Kaydedilen Dosyaların Listesi
=======================
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979DNCO_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979GZ8D_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979PNTF_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_5979SPOP_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_1_597B968Y_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_2_5979DHNY_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_2_5979PM01_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_2_597B994K_.ARC
Dosya Adı: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_
25\O1_MF_1_3_5979DLTT_.ARC
ORA_DISK_1 kanalı kullanılıyor
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover komutu, 08/25/2009 14:46:44 konumunda başarısız
RMAN-06067: yedek veya yaratılmış kontrol dosyasıyla RECOVER DATABASE gereklidir
RMAN>
Archivelog lardan datafile'i düzenlmeyi denedi ama beceremedi. Bize recover database komutunu uygulamamız gerektiğini söylüyor.
Recover database işlemini denemeden önce datafilemizi rertore etmeyi deniyorum.
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF datafilesini geri yüklüyorum.
RMAN> restore datafile 1;
restore başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00001, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-ORCLXXXX_FNO-1_10KNIJ4P yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-ORCLXXXX_FNO-1_10KNIJ4P tag=TAG20090825T100201
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:25
restore tamamlandı; saat 25/08/2009
şimdi benden istediği datafile'i geri yükleme işlemini gerçekleştirdim. database'i kurtarıyorum.
RMAN> recover database;
recover başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ortam kurtarmayı başlatma
ortam kurtarma başarılamadı
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover komutu, 08/25/2009 14:50:30 konumunda başarısız
ORA-00283: recovery session canceled due to errors
RMAN-11003: SQL deyiminin çözümlenmesi/çalıştırılması sırasında başarısızlık görülüyor: alter database recover if needed start until cancel using backup controlfile
ORA-00283: hatalar nedeniyle kurtarma oturumu iptal edildi
ORA-19909: 2 veri dosyasi artik bir sürüme ait
ORA-01110: veri dosyasi 2: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF'
--hooop bu kezde benden C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF datafile'inin bozuk olduğunu söyluyor. Bu böyle sürüp gidecek gibi duruyor. ben en iyisi restore database diyerek bu çileden kurtuluyorum.
RMAN> restore database;
restore başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
veri dosyası 1 atlanıyor; zaten C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF dosyasına geri yüklendi
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00002, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_0PKNIJ13 yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_0PKNIJ13 tag=TAG20090825T100003
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:04
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00003, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0QKNIJ17 yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0QKNIJ17 tag=TAG20090825T100007
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:15
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00004, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0RKNIJ1O yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0RKNIJ1O tag=TAG20090825T100024
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:01
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00005, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DF.DBF dosyasınageri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0SKNIJ1R yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0SKNIJ1R tag=TAG20090825T100026
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:03
ORA_DISK_1 kanalı: veri dosyası yedek kümesi geri yüklemesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesinden geri yüklenecek veri dosyaları belirleniyor
veri dosyası 00006, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DF1.DBF dosyasına geri yükleniyor
ORA_DISK_1 kanalı: C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0TKNIJ21 yedek parçasından okunuyor
ORA_DISK_1 kanalı: 1 yedek parçasının geri yükledi
parça kontrol noktası=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0TKNIJ21 tag=TAG20090825T100033
ORA_DISK_1 kanalı: geri yükleme tamamlandı, geçen süre: 00:00:04
restore tamamlandı; saat 25/08/2009
evet database'in bütün filelerini geri getirdim. şimdi kurtarmayı başlatıyorum.
RMAN> recover database;
recover başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ortam kurtarmayı başlatma
arşiv günlüğü thread'i 1 sıra 3 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_3_5979DLTT_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 1 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979PNTF_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 2 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_5979PM01_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 1 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979SPOP_.ARC dosyası olarak diskte
arşiv günlüğü thread'i 1 sıra 2 zaten C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_597B994K_.ARC dosyası olarak diskte
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_3_5979DLTT_.ARC thread=1 sıra=3
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979PNTF_.ARC thread=1 sıra=1
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_5979PM01_.ARC thread=1 sıra=2
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_1_5979SPOP_.ARC thread=1 sıra=1
arşiv günlüğü dosya adı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_08_25\O1_MF_1_2_597B994K_.ARC thread=1 sıra=2
ortam kurtarma tamamlandı, geçen süre: 00:00:16
recover tamamlandı; saat 25/08/2009
RMAN>
evet kurtarma işleminin de başarı ile bittiğini gördükten sonra şimdi database'i güvenli bir şekilde açabilirim.
Bu arada şağıdaki hatadan biraz bahsedelim RMAN restore işlemlerini yaparken sabırsızlanarak database'i açmaya denedim oracle aşaıdaki hatayı bana döndü bilginize.
SQL> alter database open resetlogs;
alter database open resetlogs
*
1 satırında HATA:
ORA-01154: veritabanı meşgul. şimdi açma, kapama, kullanıma aça ve kaldırmaya izni verilmez.
SQL> alter database open resetlogs;
Veritabanı değiştirildi.
SQL>select * from user_tables where rownum<10;
örnek bir sorgu atarak çalışırlılığı gecici test edebiliriz.
Monday, August 24, 2009
BACKUP'LARIN GECERLİLİĞİNİ KONTROL ETMEK
Backup alma işleminden sonra alınan backup'ların durumunu kontrol etmeniz gerekebilir, bunun için aşağıdaki scripti kullanıyoruz.
RMAN> crosscheck backupset;
ORA_DISK_1 kanalı kullanılıyor
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET
\2009_08_25\O1_MF_NNNDF_DENEME_596YF1CK_.BKP kayıt no=1 damga=695810513
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\ORACLE\PRODUCT\10.2.0\DB_2\DATABASE\DATA-D-ORCL_ID-12235
90477_TS-USERS_FNO-4_03KNIFS4 kayıt no=2 damga=695811972
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\ORACLE\PRODUCT\10.2.0\DB_2\DATABASE\DATA-D-ORCL_ID-12235
90477_TS-USERS_FNO-4_04KNIFST kayıt no=3 damga=695811997
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_06KNIG86 kayıt no=4 damga=695812358
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSTEM_FNO-1_07KNIHRH kayıt no=5 damga=695814001
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_09KNIHSC kayıt no=6 damga=695814028
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0AKNIHSJ kayıt no=7 damga=695814035
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0BKNIHT5 kayıt no=8 damga=695814053
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0CKNIHTA kayıt no=9 damga=695814058
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0DKNIHU9 kayıt no=10 damga=695814089
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSTEM_FNO-1_0EKNIHUR kayıt no=11 damga=695814107
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_0GKNIHVN kayıt no=12 damga=695814135
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0HKNIHVT kayıt no=13 damga=695814141
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0IKNII0G kayıt no=14 damga=695814160
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0JKNII0K kayıt no=15 damga=695814164
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0KKNII0R kayıt no=16 damga=695814171
16 nesne çapraz denetlendi
burada gördüğünüz üzere bazıları expired duruma düştü. Buraa kendim işletim sistemi komutlarını kullanarak bu dosyaları sıldiğim için bu şeklide oldular. Ayrıca dosyanın içeriğinide sildiğinizde aynı hatayı alıyorsunuz.
burada Expired duruma düşenleri tekrar kullanmamız mümkün olmayacağı için siliyoruz.
RMAN> delete force expired backupset of database;
RMAN> crosscheck backupset;
ORA_DISK_1 kanalı kullanılıyor
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET
\2009_08_25\O1_MF_NNNDF_DENEME_596YF1CK_.BKP kayıt no=1 damga=695810513
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\ORACLE\PRODUCT\10.2.0\DB_2\DATABASE\DATA-D-ORCL_ID-12235
90477_TS-USERS_FNO-4_03KNIFS4 kayıt no=2 damga=695811972
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\ORACLE\PRODUCT\10.2.0\DB_2\DATABASE\DATA-D-ORCL_ID-12235
90477_TS-USERS_FNO-4_04KNIFST kayıt no=3 damga=695811997
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_06KNIG86 kayıt no=4 damga=695812358
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSTEM_FNO-1_07KNIHRH kayıt no=5 damga=695814001
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_09KNIHSC kayıt no=6 damga=695814028
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0AKNIHSJ kayıt no=7 damga=695814035
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0BKNIHT5 kayıt no=8 damga=695814053
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0CKNIHTA kayıt no=9 damga=695814058
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'EXPIRED'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0DKNIHU9 kayıt no=10 damga=695814089
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSTEM_FNO-1_0EKNIHUR kayıt no=11 damga=695814107
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-UNDOTBS1_FNO-2_0GKNIHVN kayıt no=12 damga=695814135
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-SYSAUX_FNO-3_0HKNIHVT kayıt no=13 damga=695814141
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_0IKNII0G kayıt no=14 damga=695814160
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-5_0JKNII0K kayıt no=15 damga=695814164
yedekleme parçasının çapraz doğrulaması yapıldı: sonuç 'AVAILABLE'
yedek parça tutamacı=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-TEST_FNO-6_0KKNII0R kayıt no=16 damga=695814171
16 nesne çapraz denetlendi
burada gördüğünüz üzere bazıları expired duruma düştü. Buraa kendim işletim sistemi komutlarını kullanarak bu dosyaları sıldiğim için bu şeklide oldular. Ayrıca dosyanın içeriğinide sildiğinizde aynı hatayı alıyorsunuz.
burada Expired duruma düşenleri tekrar kullanmamız mümkün olmayacağı için siliyoruz.
RMAN> delete force expired backupset of database;
DATAFILE BACKUP SCRİPTİ ÇIKARMAK.
DECLARE
sqlq VARCHAR2 (50);
BEGIN
FOR i IN (select * from v$datafile )
LOOP
DBMS_OUTPUT.put_line ('backup datafile ' || i.file# || ' format ''c:\RMAN_BACKUP\data-D-%d_id-%I_TS-%N_FNO-%f_%u ''; ');
END LOOP;
END;
örnek bir kullanım.
backup başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: tam veri dosyası yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesindeki veri dosyaları belirleniyor
girdi veri dosyası fno=00004 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
ORA_DISK_1 kanalı: 1 başlangıç parçası 25/08/2009 konumunda
ORA_DISK_1 kanalı: 1 biti parçası 25/08/2009 konumunda parça kontrol noktas²=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_06
KNIG86 etiket=TAG20090825T091238 açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:00:01
backup tamamlandı; saat 25/08/2009
RMAN>
sqlq VARCHAR2 (50);
BEGIN
FOR i IN (select * from v$datafile )
LOOP
DBMS_OUTPUT.put_line ('backup datafile ' || i.file# || ' format ''c:\RMAN_BACKUP\data-D-%d_id-%I_TS-%N_FNO-%f_%u ''; ');
END LOOP;
END;
örnek bir kullanım.
backup başlatılıyor; saat 25/08/2009
ORA_DISK_1 kanalı kullanılıyor
ORA_DISK_1 kanalı: tam veri dosyası yedek kümesi başlatılıyor
ORA_DISK_1 kanalı: yedekleme kümesindeki veri dosyaları belirleniyor
girdi veri dosyası fno=00004 adı=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
ORA_DISK_1 kanalı: 1 başlangıç parçası 25/08/2009 konumunda
ORA_DISK_1 kanalı: 1 biti parçası 25/08/2009 konumunda parça kontrol noktas²=C:\RMAN_BACKUP\DATA-D-ORCL_ID-1223590477_TS-USERS_FNO-4_06
KNIG86 etiket=TAG20090825T091238 açıklama=NONE
ORA_DISK_1 kanalı: yedekleme kümesi tamamlandı, geçen süre: 00:00:01
backup tamamlandı; saat 25/08/2009
RMAN>
Tuesday, August 18, 2009
REDO LOG YAPISI
select * from v$log;
--Şu anda elimde mevcud olan REDO LOG yapim.
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 15 52428800 1 YES INACTIVE 1070389 8/17/2009 4:28:50 PM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 16 51200000 1 YES INACTIVE 1070910 8/17/2009 4:39:05 PM
4 4 1 18 51200000 2 NO CURRENT 1098886 8/18/2009 12:00:50 AM
select GROUP#, ARCHIVED, STATUS from v$log;
--bu sorgu ile daha anlamli birseyler çikarabiliriz.
--Şimdi curent durumdaki redo log grubumuzu diske aktaralim.
ALTER SYSTEM SWITCH LOGFILE
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 19 52428800 1 NO CURRENT 1124103 8/18/2009 8:47:21 AM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 16 51200000 1 YES INACTIVE 1070910 8/17/2009 4:39:05 PM
4 4 1 18 51200000 2 YES ACTIVE 1098886 8/18/2009 12:00:50 AM
--Görüldüğü gibi burada bir sirkülasyon içerisinde redo log üzerinde akis sağlaniyor.
--4 nolu redo log grubu current durumundan active durumuna geçti. inactive durumdaki 1 nolu grupta current durumuna geçti.
--firt_time sütününda ise en son ne zaman islem gördüğünü görüyoruz.
--Yeni bir REDO LOG File eklemek için
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG','C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG') SIZE 50000K;
--ORA-00301: 'C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG' günlük dosyasini eklemede hata - dosya yaratilamaz
--ORA-27038: yaratilan dosya zaten var
--OSD-04010: seçene?i belirlendi, dosya zaten var
--hatasini aldik bundan kurtulmak için dosya isimelrini değistiriyoruz.
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO07.LOG','C:\oracle\product\10.2.0\oradata\ORCL\REDO08.LOG') SIZE 50000K;
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
--eklemis olduklarimizi yeni bir group(5 nolu) içerisine koydu.
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO09.LOG') SIZE 10000K;
SELECT * FROM V$LOGFILE;
--yeni eklediğimizi 6 nolu gruba dahil etti.
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
8 6 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO09.LOG NO
--GRUOP BELİRTEREK REDO LOG FILE EKLEME
--10 Nolu bir REDO LOGF group yaratiyoruz ve bu gruba her biri 5MB olan 4 tanae file ekliyoruz.
ALTER DATABASE
ADD LOGFILE GROUP 10 ('C:\oracle\product\10.2.0\oradata\ORCL\REDO10.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO11.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO12.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO13.LOG')
SIZE 5000 k;
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
8 6 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO09.LOG NO
9 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO10.LOG NO
10 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO11.LOG NO
11 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO12.LOG NO
12 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG NO
select * from v$log;
--Bu sorguda redo log gruplarini görüyoruz farkederseniz sonradan olusturduğumuz grouplar hiç kullanilmadiği için UNUSED durumundalar.
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 19 52428800 1 YES INACTIVE 1124103 8/18/2009 8:47:21 AM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 20 51200000 1 NO CURRENT 1132995 8/18/2009 11:47:44 AM
4 4 1 18 51200000 2 YES INACTIVE 1098886 8/18/2009 12:00:50 AM
5 5 1 0 51200000 2 YES UNUSED 0
6 6 1 0 10240000 1 YES UNUSED 0
7 10 1 0 5120000 4 YES UNUSED 0
--Yeni bir REDO LOG member (redo log file) eklemek için asağidaki yapiyi kullanabiliriz.
--burada 6 nolu gruba "C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG" dosyayi ekleyelim.
ALTER DATABASE ADD LOGFILE MEMBER 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG' TO GROUP 6;
--ORA-01577: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG' günlük dosyasi eklenemez - dosya zaten veritabaninin parçasi
--Ayni isimde baska bir tane olduğu için bu hatayi aldik
ALTER DATABASE ADD LOGFILE MEMBER 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO14.LOG' TO GROUP 6;
--ORA-00359: logfile group 6 does not exist bu hatayi alirsaniz bu demktirki 6 nolu group mevcud degil. Group olusturduktan sonra redo log file eklemeyi deneyin.
ALTER SYSTEM CHECKPOINT;
--bu komut ile active durumda olan redo log grouplarinin inactive olmaya zorlariz.
ALTER SYSTEM SET log_checkpoint_timeout = 1500 SCOPE=MEMORY
--ile bu parametreyi degistirebiliriz.
--bozulmus olan bir redolog file'i database'i kapatmadan resetlemek
için asağidaki komutu kullanabilirsiniz.
ALTER DATABASE CLEAR LOGFILE GROUP 2;
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
Bu script üstesinden asagidaki iki üstesinden gelinemeyen redologlarin silenememesi durumunda bize yardimci olacaktir.
1- Eğer sadece 2 tane REDOLOG grubunuz var ise
2- current redolog grubunuz bozulduysa.
-- REDOLOG Filelerin oldugu yerleri ve gruplarini görmek için
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
ALTER SYSTEM SWITCH LOGFILE;
select * from v$log
create table deneme1 as select * from user_objects
ALTER SYSTEM CHECKPOINT;
select * from v$logfile;
STALE durumunda olan redo log gruubundaki redologfileleri görebilmek için aşağıdaki sorguyu kullanabiliriz.
SELECT v2.group#, MEMBER, v2.status member_status, v1.status group_status
FROM v$log v1, v$logfile v2
WHERE v1.group# = v2.group# AND v2.status = 'STALE';
STALE (bayat, bayatlamış) durumunun manası sistemin shutdown abort ile kapatılması yada sistemin bir şekilde düşmesi (crash ) denemebilir. Bunun sebebi o redo loggrubunun bozuk olan yada erişilemeyen bir diskte olmasından olabilir (emin değilim tahmin yürüttüm.) Benim TEST amaçlı kullandığım DB de deneme amacı ile makinaya reset attiğimda yada shutdown abort dediğimde bu durum ile karşılaşıyorum. Kapatmadan hemen önce current durumunda olanların STALE durumuna geldiğini gördüm. Ama ALTER SYSTEM SWITCH LOGFILE; ile bunları yine active current durumuna getirebiliyorsuz.
--Şu anda elimde mevcud olan REDO LOG yapim.
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 15 52428800 1 YES INACTIVE 1070389 8/17/2009 4:28:50 PM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 16 51200000 1 YES INACTIVE 1070910 8/17/2009 4:39:05 PM
4 4 1 18 51200000 2 NO CURRENT 1098886 8/18/2009 12:00:50 AM
select GROUP#, ARCHIVED, STATUS from v$log;
--bu sorgu ile daha anlamli birseyler çikarabiliriz.
--Şimdi curent durumdaki redo log grubumuzu diske aktaralim.
ALTER SYSTEM SWITCH LOGFILE
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 19 52428800 1 NO CURRENT 1124103 8/18/2009 8:47:21 AM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 16 51200000 1 YES INACTIVE 1070910 8/17/2009 4:39:05 PM
4 4 1 18 51200000 2 YES ACTIVE 1098886 8/18/2009 12:00:50 AM
--Görüldüğü gibi burada bir sirkülasyon içerisinde redo log üzerinde akis sağlaniyor.
--4 nolu redo log grubu current durumundan active durumuna geçti. inactive durumdaki 1 nolu grupta current durumuna geçti.
--firt_time sütününda ise en son ne zaman islem gördüğünü görüyoruz.
--Yeni bir REDO LOG File eklemek için
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG','C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG') SIZE 50000K;
--ORA-00301: 'C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG' günlük dosyasini eklemede hata - dosya yaratilamaz
--ORA-27038: yaratilan dosya zaten var
--OSD-04010:
--hatasini aldik bundan kurtulmak için dosya isimelrini değistiriyoruz.
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO07.LOG','C:\oracle\product\10.2.0\oradata\ORCL\REDO08.LOG') SIZE 50000K;
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
--eklemis olduklarimizi yeni bir group(5 nolu) içerisine koydu.
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO09.LOG') SIZE 10000K;
SELECT * FROM V$LOGFILE;
--yeni eklediğimizi 6 nolu gruba dahil etti.
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
8 6 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO09.LOG NO
--GRUOP BELİRTEREK REDO LOG FILE EKLEME
--10 Nolu bir REDO LOGF group yaratiyoruz ve bu gruba her biri 5MB olan 4 tanae file ekliyoruz.
ALTER DATABASE
ADD LOGFILE GROUP 10 ('C:\oracle\product\10.2.0\oradata\ORCL\REDO10.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO11.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO12.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO13.LOG')
SIZE 5000 k;
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
8 6 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO09.LOG NO
9 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO10.LOG NO
10 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO11.LOG NO
11 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO12.LOG NO
12 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG NO
select * from v$log;
--Bu sorguda redo log gruplarini görüyoruz farkederseniz sonradan olusturduğumuz grouplar hiç kullanilmadiği için UNUSED durumundalar.
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 19 52428800 1 YES INACTIVE 1124103 8/18/2009 8:47:21 AM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 20 51200000 1 NO CURRENT 1132995 8/18/2009 11:47:44 AM
4 4 1 18 51200000 2 YES INACTIVE 1098886 8/18/2009 12:00:50 AM
5 5 1 0 51200000 2 YES UNUSED 0
6 6 1 0 10240000 1 YES UNUSED 0
7 10 1 0 5120000 4 YES UNUSED 0
--Yeni bir REDO LOG member (redo log file) eklemek için asağidaki yapiyi kullanabiliriz.
--burada 6 nolu gruba "C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG" dosyayi ekleyelim.
ALTER DATABASE ADD LOGFILE MEMBER 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG' TO GROUP 6;
--ORA-01577: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG' günlük dosyasi eklenemez - dosya zaten veritabaninin parçasi
--Ayni isimde baska bir tane olduğu için bu hatayi aldik
ALTER DATABASE ADD LOGFILE MEMBER 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO14.LOG' TO GROUP 6;
--ORA-00359: logfile group 6 does not exist bu hatayi alirsaniz bu demktirki 6 nolu group mevcud degil. Group olusturduktan sonra redo log file eklemeyi deneyin.
ALTER SYSTEM CHECKPOINT;
--bu komut ile active durumda olan redo log grouplarinin inactive olmaya zorlariz.
ALTER SYSTEM SET log_checkpoint_timeout = 1500 SCOPE=MEMORY
--ile bu parametreyi degistirebiliriz.
--bozulmus olan bir redolog file'i database'i kapatmadan resetlemek
için asağidaki komutu kullanabilirsiniz.
ALTER DATABASE CLEAR LOGFILE GROUP 2;
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
Bu script üstesinden asagidaki iki üstesinden gelinemeyen redologlarin silenememesi durumunda bize yardimci olacaktir.
1- Eğer sadece 2 tane REDOLOG grubunuz var ise
2- current redolog grubunuz bozulduysa.
-- REDOLOG Filelerin oldugu yerleri ve gruplarini görmek için
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
ALTER SYSTEM SWITCH LOGFILE;
select * from v$log
create table deneme1 as select * from user_objects
ALTER SYSTEM CHECKPOINT;
select * from v$logfile;
STALE durumunda olan redo log gruubundaki redologfileleri görebilmek için aşağıdaki sorguyu kullanabiliriz.
SELECT v2.group#, MEMBER, v2.status member_status, v1.status group_status
FROM v$log v1, v$logfile v2
WHERE v1.group# = v2.group# AND v2.status = 'STALE';
STALE (bayat, bayatlamış) durumunun manası sistemin shutdown abort ile kapatılması yada sistemin bir şekilde düşmesi (crash ) denemebilir. Bunun sebebi o redo loggrubunun bozuk olan yada erişilemeyen bir diskte olmasından olabilir (emin değilim tahmin yürüttüm.) Benim TEST amaçlı kullandığım DB de deneme amacı ile makinaya reset attiğimda yada shutdown abort dediğimde bu durum ile karşılaşıyorum. Kapatmadan hemen önce current durumunda olanların STALE durumuna geldiğini gördüm. Ama
İKİ NOKTA ARASINDAKİ KARAKTER KÜMESİNİ ALMA
Bugün aşağıdaki sorguya ihtiyaç duydum belki ileride birdun sizinde işinize ayrayabilir. Aslında ben sadece nokta(.) karakterine göre kıyaslama yaptım ama siz bunu değiştirebilirsiniz (-) , ( _ ) gibi değişikl karaketerler yapabilirsiniz.
SELECT Substr (i.proc_name,
--ilk noktanın konumunu aldım
(Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') + 1),
--ikinci noktanın konumundan ilk noktanın konumunu çıkarakak iki nokta arasında kaç karakter olduğunu buluyorum.
(Regexp_instr (i.proc_name, '[:.:]', 1, 2, 0, 'i')
- Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') - 1
) ) package_name
FROM paket_isim_tablom i
--group by ile tekrar eden kayıtları ekliyorum. Çünkü bir pakette birden fazla procedere olduğu için tekrarlamalar sözkonusu oluyor.
GROUP BY Substr (i.proc_name, (Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') + 1),
(Regexp_instr (i.proc_name, '[:.:]', 1, 2, 0, 'i')
- Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') - 1
) )
ORDER BY 1
buradaki seneryoda paket_isim_tablom da proce_name alanında schema.packege.procederu şeklinde bir karaketer katarım var. Ben buradan package name çıakrtmak için yukarıdaki sql'i kullanabilirim.
ÖRNEK BİR KULLANIM
/* Formatted on 2009/08/18 11:24 (Formatter Plus v4.8.8) */
SELECT Substr ('HR.PAKET_ADI.PROCEDURE_ADI',
( Regexp_instr ('HR.PAKET_ADI.PROCEDURE_ADI',
'[:.:]',
1,
1,
0,
'i'
)
+ 1
),
( Regexp_instr ('HR.PAKET_ADI.PROCEDURE_ADI',
'[:.:]',
1,
2,
0,
'i'
)
- Regexp_instr ('HR.PAKET_ADI.PROCEDURE_ADI',
'[:.:]',
1,
1,
0,
'i'
)
- 1
)
)
FROM dual;
SUBSTR('H
---------
PAKET_ADI
1 row selected.
SELECT Substr (i.proc_name,
--ilk noktanın konumunu aldım
(Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') + 1),
--ikinci noktanın konumundan ilk noktanın konumunu çıkarakak iki nokta arasında kaç karakter olduğunu buluyorum.
(Regexp_instr (i.proc_name, '[:.:]', 1, 2, 0, 'i')
- Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') - 1
) ) package_name
FROM paket_isim_tablom i
--group by ile tekrar eden kayıtları ekliyorum. Çünkü bir pakette birden fazla procedere olduğu için tekrarlamalar sözkonusu oluyor.
GROUP BY Substr (i.proc_name, (Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') + 1),
(Regexp_instr (i.proc_name, '[:.:]', 1, 2, 0, 'i')
- Regexp_instr (i.proc_name, '[:.:]', 1, 1, 0, 'i') - 1
) )
ORDER BY 1
buradaki seneryoda paket_isim_tablom da proce_name alanında schema.packege.procederu şeklinde bir karaketer katarım var. Ben buradan package name çıakrtmak için yukarıdaki sql'i kullanabilirim.
ÖRNEK BİR KULLANIM
/* Formatted on 2009/08/18 11:24 (Formatter Plus v4.8.8) */
SELECT Substr ('HR.PAKET_ADI.PROCEDURE_ADI',
( Regexp_instr ('HR.PAKET_ADI.PROCEDURE_ADI',
'[:.:]',
1,
1,
0,
'i'
)
+ 1
),
( Regexp_instr ('HR.PAKET_ADI.PROCEDURE_ADI',
'[:.:]',
1,
2,
0,
'i'
)
- Regexp_instr ('HR.PAKET_ADI.PROCEDURE_ADI',
'[:.:]',
1,
1,
0,
'i'
)
- 1
)
)
FROM dual;
SUBSTR('H
---------
PAKET_ADI
1 row selected.
Monday, August 17, 2009
PL/SQL IF KULLANIMI
DECLARE
--değişkenlerimizi tanımladık.
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
OR b < 100) THEN
dbms_output.Put_line('küçük');
END IF;
--bu işlemin çıktısı küçük olacaktır.
END;
-----------------------------------------------------------------
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
AND b < 100) THEN
dbms_output.Put_line('küçük');
END IF;
--bu işlemin çıktısı olmayacaktır.
END;
-----------------------------------------------------------------
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
AND b < 100) THEN
dbms_output.Put_line('küçük');
--iif else kullanımı için örnek vermek gerekir ise
ELSE
dbms_output.Put_line('büyük');
END IF;
--bu işlemin çıktısı büyük olacaktır.
END;
-----------------------------------------------------------------
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
AND b < 100) THEN
dbms_output.Put_line('küçük');
--if else kullanımı için örnek vermek gerekir ise
ELSE
dbms_output.Put_line('büyük');
END IF;
--bu işlemin çıktısı büyük olacaktır.
--exception eklemek istersek aşağıdaki kodu eklemek yetelidir.
EXCEPTION
WHEN OTHERS THEN
Raise_application_error(-20000,SQLERRM);
END;
--değişkenlerimizi tanımladık.
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
OR b < 100) THEN
dbms_output.Put_line('küçük');
END IF;
--bu işlemin çıktısı küçük olacaktır.
END;
-----------------------------------------------------------------
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
AND b < 100) THEN
dbms_output.Put_line('küçük');
END IF;
--bu işlemin çıktısı olmayacaktır.
END;
-----------------------------------------------------------------
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
AND b < 100) THEN
dbms_output.Put_line('küçük');
--iif else kullanımı için örnek vermek gerekir ise
ELSE
dbms_output.Put_line('büyük');
END IF;
--bu işlemin çıktısı büyük olacaktır.
END;
-----------------------------------------------------------------
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a := 15;
b := 15;
IF (a < 10
AND b < 100) THEN
dbms_output.Put_line('küçük');
--if else kullanımı için örnek vermek gerekir ise
ELSE
dbms_output.Put_line('büyük');
END IF;
--bu işlemin çıktısı büyük olacaktır.
--exception eklemek istersek aşağıdaki kodu eklemek yetelidir.
EXCEPTION
WHEN OTHERS THEN
Raise_application_error(-20000,SQLERRM);
END;
Subscribe to:
Posts (Atom)