rman etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
rman etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

5 Temmuz 2013 Cuma

ORA-00245: control file backup failed; target is likely on a local file system




with RAC environment

error:

INF - RMAN-03009: failure of backup command on ch00 channel at 06/04/2011 13:50:04
INF - ORA-00245: control file backup failed; target is likely on a local file system


check your SNAPSHOT CONTROLFILE parameter with RMAN
replace parameter shared location  or ASM location.



[oracle@testdb01 oracle]$ rman 

RMAN> connect target /

RMAN> show SNAPSHOT CONTROLFILE NAME;

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0.3/db_1/dbs/snapcf_testdb1.f'; # default

RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DATADG/snapcf_testdb.f';




28 Haziran 2013 Cuma

ORA-12012: error on auto execute of job "EXFSYS"."RLM$EVTCLEANUP"


Catalog db has an error in alert.log like :

Errors in file /u01/diag/rdbms/rmandb/rmandb/trace/rmandb_j000_25520.trc:
ORA-12012: error on auto execute of job "EXFSYS"."RLM$EVTCLEANUP"
ORA-04068: existing state of packages has been discarded
ORA-04065: not executed, altered or dropped stored procedure "EXFSYS.DBMS_RLMGR_DR"
ORA-06508: PL/SQL: could not find program unit being called: "EXFSYS.DBMS_RLMGR_DR"
ORA-06512: at line 1

check invalid objects and compile it or run utlrp.sql

SQL> select count(*) from dba_objects where status='INVALID';

  COUNT(*)
----------
        0

SQL> @?/rdbms/admin/utlrp.sql

try againg and same error...
and flush shared_pool.

SQL> alter system flush shared_pool;
SQL> alter system flush buffer_cache;

try again and it works.

10 Temmuz 2012 Salı

RMAN ORA-01008: not all variables bound


Recovery Manager: Release 11.2.0.2.0 - Production on Tue Jul 10 10:33:11 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect target /


DBGSQL:     TARGET> select count(*) into :dbstate from v$parameter where lower(name) = '_dummy_instance' and upper(value) = 'TRUE'
DBGSQL:        sqlcode = 1008
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
ORA-01008: not all variables bound




workaround:

SQL>alter system flush shared_pool;


12 Haziran 2012 Salı

RMAN-20032: checkpoint change# too low



If you use catalog for backup


RMAN> resync database;
RMAN-20032: checkpoint change# too low

If database returned from cold backup resync can't be succesful.

solution

connect target /
connect catalog user@catdb

unregister database;
register database;



28 Mayıs 2012 Pazartesi

RMAN-00569: ERROR MESSAGE STACK FOLLOWS


When you want to backup your db with using catalog database.

If raise an error like follow


INF - RMAN-00571: ===========================================================
INF - RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
INF - RMAN-00571: ===========================================================
INF - Recovery Manager complete.
INF - End of Recovery Manager output.
INF - End Oracle Recovery Manager.

Cause
Catalog db's tns entry must be in tnsnames.ora.
Check your $ORACLE_HOME/network/admin/tnsnames.ora file.

30 Mart 2009 Pazartesi

RMAN DUPLICATE

Recovery Manager(RMAN) programının veri yedekleme yanında, veri kurtarma, taşıma konusunda bize sunduğu faydalı özelliklerinden biri de DUPLICATE özelliğidir.

Duplicate özelliği veritabanının tamamının veya bir kısmının kopyasını çıkarmamıza olanak sağlar.
Duplicate özelliğini kullanabilmek için;
- Veritabanının RMAN ile alınmış cross-check edilmiş bir backupının olması(full veya incremental)
- Belirli bir zamana gelebilmek için veritabanın archive modda çalışması ve güncel arşivlerimizin erişilebilir olması gerekir.

DUPLICATE ile online olarak veritabanımızı kopyalabilir veya istediğimiz tablespacelerden oluşan yeni bir veritabanı hazırlayabiliriz.

DUPLICATE ile aynı host üzerinde veya farklı hostlar üzerinde veritabanını kurmak mümkündür.
Host sistemlerin OS versiyonlarının ve tabiki oracle executable versiyonlarının aynı olması gerekir.

DUPLICATE ile yapabileceklerimiz
- Veritabanını online olarak kopyalamak.
- Daha önce aldığımız backupı ve geri dönüş planını test etmek.
- Drop edilen(purge dahil) veya truncate edilen bir tabloyu veya nesneyi kurtarmak.
- Standby db kurulumu.

olarak sayılabilir. Farklı senaryolarda farklı ihtiyaçlar için de elbetteki kullanılabilir.

Örnek olarak databasemizdeki bazı tablespaceler hariç diğer tüm datamızı belirli bir zamana döneceğimiz bir senaryo oluşturalım.

1 - Target db(yani source db) spfile ile başlatıldıysa önce bir pfile create edilir.

--productiona baglanip olusturalim
sqlplus /nolog
conn /as sysdba
create pfile=D:\oracle\product\10.2.0\oradata\AUX1\initAUX1.ora from spfile;
exit


2 - Pfile içindeki lokasyon parametreleri yeni lokasyonlara göre düzenlenir.
Datafilelar farklı bir lokasyona kopyalanacak ise ve datafile isimleri rename edilmeyecekse aşağıdaki iki parametrenin de pfile içinde set edilmesi gerekir.

DB_FILE_NAME_CONVERT=("D:\oracle\oradata\orcl", "D:\oracle\oradata\AUX1")
LOG_FILE_NAME_CONVERT=("D:\oracle\oradata\orcl","D:\oracle\oradata\AUX1")


Örneği Windows üzerinde yaptığımız için windows üzerinde db instance' ı başlatabileceğimiz servis girdisini oluşturuyoruz. Unix üzerinde bu kısma gerek yok.

oradim -new -sid AUX1 -intpwd oracle -startmode manual -pfile D:\oracle\product\10.2.0\oradata\AUX1\initAUX1.ora

3 - Hazırlanan pfile kullanılarak AUXILIARY instance (AUX1) nomount olarak başlatılır. Bu instance yeni kurmak isteğimiz database'e aittir.

4 - Her iki instance'ın RMAN tarafından erişilebilir olduğundan emin olmak için gerekli TNS ve listener tanımları yapılır. SYS userı için şifre dosyası ayarlanır.

5 - RMAN DUPLICATE scripti hazırlanır.

CONNECT TARGET system/system@proddb;
CONNECT CATALOG rman/rman@catalogdb;
CONNECT AUXILIARY SYS/oracle;

CONFIGURE CHANNEL DEVICE TYPE disk CLEAR;
CONFIGURE DEFAULT DEVICE TYPE TO disk;
CONFIGURE DEVICE TYPE disk PARALLELISM 3;

RUN {
# the DUPLICATE command uses an automatic disk channel
set until time "TO_DATE('03/11/2008 17:19:25','DD/MM/YYYY HH24:MI:SS')";

DUPLICATE TARGET DATABASE TO AUX1
SKIP TABLESPACE USERS
LOGFILE
GROUP 1 ('D:\oracle\oradata\AUX1\redo01m1.log',
'D:\oracle\oradata\AUX1\redo01m2.log') SIZE 20M REUSE,
GROUP 2 ('D:\oracle\oradata\AUX1\redo02m1.log',
'D:\oracle\oradata\AUX1\redo02m2.log') SIZE 20M REUSE;
}


6 - Scriptimizi çalıştırmadan önce pwd dosyası, tns ayarları, listener ayarları son kez kontrol edilir. Bu kısım özellikle büyük dblerde gereksiz zaman kaybını engellemek için önemlidir.

7 - Hazırlanan script çalıştırılır. Script neticesinde yeni instance' ın çalışır durumda hazır olmasını bekleyebiliriz.


Örneğimizde kullanmak amacıyla tablespace, schema ve tabloları aşağıdaki scriptler ile oluşturabiliriz.

Yapacaklarımız kısaca şöyle :
1 - Örnek datamızı oluşturacağız.
2 - RMAN ile control file dahil full yedek alacağız.
3 - Yedek alındıktan sonra silmek istediğimiz tabloyu drop edeceğiz.
4 - Hazırladığımız RMAN DUPLICATE scriptini çalıştıracağız.


conn /as sysdba
create tablespace tbs datafile 'D:\oracle\oradata\orcl\tbs01.dbf' size 10M;

create user ra identified by ra default_tablespace tbs;
grant connect, resource to ra;

drop table ra.silinecek purge;

create table ra.silinecek
(
id number,
ad varchar(20)
)
tablespace tbs;

insert into ra.silinecek values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.silinecek values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.silinecek values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.silinecek values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.silinecek values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));

commit;

drop table ra.kalacak purge;

create table ra.kalacak
(
id number,
ad varchar(20)
)
tablespace tbs;

insert into ra.kalacak values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.kalacak values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.kalacak values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.kalacak values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.kalacak values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.kalacak values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));
insert into ra.kalacak values (to_char(sysdate, 'HH24SS'),'DD'||to_char(sysdate, 'HH24SS'));

commit;

select * from ra.silinecek;

select * from ra.kalacak;

--kayitlarimiz kontrol ettik ve hepsi yerli yerinde.

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

--redolar switch edildikten sonra RMAN den control file dahil full yedek alınır.

--Yedek aldıktan sonra ra.silinecek tablomuzu drop(purge ile) edebiliriz.

drop table ra.silinecek purge;


Scriptleri sorunsuz çalıştırdıktan sonra prod dbnin istediğimiz zamana kadar recovery edilmiş halini yeni dbmizde(AUX1) hazır olarak bulmayı umabiliriz.
teşekkürler.





22 Aralık 2008 Pazartesi

RMAN Tablespace Point-in-Time Recovery

RMAN Tablespace Point-in-Time Recovery (TSPITR) veritabanındaki bir tablespace' in belirli bir zamana dönülmesine olanak sağlan veri kurtarma seçeneklerinden biridir. TSPITR tablespace' de bulunan bütün datayı istediğimiz zamana dönecektir.

Bu işlem için gerekli olanlar;

- Veriyi kurtarmak istediğimiz zamandan önce alınmış ve cross-check yapılmış backup(full veya incremental)
- Backup alındıktan sonra Tablespace' i getirmek istediğimiz zamana kadar çıkan arşiv dosyaları
- İşlemi yapabilmek için gerekli disk alanı

Tablespce point-in-time recovery bir recovery işlemi olduğu için öncelikle mevcut tablespace üzerindeki tüm datayı ezecektir. Bu nedenle kesinti gerektirir ve tablespace üzerinde etkilenmesini istemediğimiz başka datamız varsa bunların da export ile bir yere yedeklenmesi gerekir. İşlem bittikten sonra export aldığımız kayıtlarımızı yeniden import edebiliriz.

Senaryo olarak şöyle bir örnek uygulabiliriz. Bir tablo drop edildi(purge dahil) ve tablesapce üzerinde başka bir tablo da yok. Bu durumda tabloyu kurtarmak için bu yöntemi uygulayabiliriz.

TSPITR iki şekilde uygulanabilir:
- uygulama veritabanı üzerinde canlı olarak
- Geçici bir instance üzerinde kurtarılmak istenen tablespace create edilerek. Bu durumda zorunlu tablespacelerin de (SYSTEM,UNDO) create edilmesi gerekir. Bu işlemi yapmak için datanın büyüklüğüne göre ekstra disk alanına ihtiyaç duyabiliriz.

1. yöntem uygulama veritabanı üzerinde çalışması nedeniyle ile riskli gelirse veya kesinti yapma şansınız yoksa 2. yöntemi rahatlıkla uygulabilirsiniz. Ben de kesinti yapamadığım için 2. yöntemi uygulamıştım.

Şimdi sırasıyla bu yöntemleri nasıl uygulabileceğimizi ve hazırlık için neler yapmamız gerektiğini anlatacağım.

Başlamadan önce her iki yöntem için ortak olan kısımlardan bahsedeyim.

Her iki yöntemde de AUX1 adından geçici bir instance create ediyoruz.
Bu instance uygulama veritabanından elde edilmiş bir pfile ile nomount olarak başlatılacak.

AUX1 instance için yapacaklarımız
- orapw dosyası hazırlamak.
- pfile hazırlamak.
- tns ve listener ayarlarını hazırlamak
- nomount olarak çalışır hale getirmek.

Hazırlıklarımızı yaptıktan sonra yöntemlerin kendine has kısımlarına geçebiliriz.

1. yöntem

Aşağıdaki script disk üzerinde alınmış bir backup için hazırlandı. Bu scripti kendi yedek şeklinize göre düzenleyebilirsiniz.

set ORACLE_SID=AUX1
Set NLS_DATE_FORMAT=MM/DD/YYYY HH24:MI:SS

connect target sys/oracle@orcl
connect auxiliary sys/oracle@aux1

run {
ALLOCATE AUXILIARY CHANNEL A1 TYPE DISK;
ALLOCATE CHANNEL c1 TYPE DISK;
recover tablespace tbs until time "TO_DATE('03/11/2008 17:19:29','DD/MM/YYYY HH24:MI:SS')";
}


Scripti çalıştırdığımızda RMAN sırayla şunları yapacak
- Geçici instance(AUX1) üzerinde ismini verdiğimiz tablespace ve gerekli olan tablespaceleri restore edecek.
- Geçici veritabanı istenilen tarihe kadar recover edilecek.
- Geçici veritabanı resetlogs ile açacak.
- Dönmek istediğimiz tablespace' in exportunu alacak.
- Dönmek istediğimiz tablespace' i uygulama veritabanına import edecek.


2. yöntem

Aşağıdaki parametreler datafileları rename etmeden devam edebilmemiz için gereklidir.Datafileları örnek scriptteki gibi rename edeceksek bu parametreleri eklememize gerek yok.


DB_FILE_NAME_CONVERT=("D:\oracle\product\10.2.0\oradata\orcl", "D:\oracle\product\10.2.0\oradata\AUX1")
LOG_FILE_NAME_CONVERT=("D:\oracle\product\10.2.0\oradata\orcl","D:\oracle\product\10.2.0\oradata\AUX1")


--------------------------------------------------

set ORACLE_SID=AUX1
Set NLS_DATE_FORMAT=MM/DD/YYYY HH24:MI:SS

rman connect /

run {
restore controlfile from 'D:\ORACLE\PRODUCT\10.1.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2008_11_03\O1_MF_N_669835169_4JY5N2DO_.BKP'
until time "TO_DATE('03/11/2008 17:19:29','DD/MM/YYYY HH24:MI:SS')";
}

sql "alter database mount clone database";

run {

ALLOCATE CHANNEL c1 TYPE DISK;

set until time "TO_DATE('03/11/2008 17:19:25','DD/MM/YYYY HH24:MI:SS')";

set newname for datafile 1 to 'D:\oracle\product\10.2.0\oradata\AUX1\system01.dbf';
set newname for datafile 2 to 'D:\oracle\product\10.2.0\oradata\AUX1\undotbs01.dbf';
set newname for datafile 3 to 'D:\oracle\product\10.2.0\oradata\AUX1\sysaux01.dbf';
set newname for datafile 5 to 'D:\oracle\product\10.2.0\oradata\AUX1\tbs01.dbf';

restore tablespace system, undotbs1, sysaux, tbs;

switch datafile all;

sql "alter database datafile 1,2,3,5 online";

recover database skip forever tablespace USERS;

sql "alter database rename file ''D:\oracle\product\10.1.0\oradata\orcl\REDO01.LOG'' to ''D:\oracle\product\10.2.0\oradata\AUX1\REDO01.LOG''";

sql "alter database rename file ''D:\oracle\product\10.1.0\oradata\orcl\REDO02.LOG'' to ''D:\oracle\product\10.2.0\oradata\AUX1\REDO02.LOG''";

sql "alter database rename file ''D:\oracle\product\10.1.0\oradata\orcl\REDO03.LOG'' to ''D:\oracle\product\10.2.0\oradata\AUX1\REDO03.LOG''";

release channel c1;
}

SQL> connect / as sysdba;
SQL> recover database until cancel using backup controlfile;


Bu aşamadan sonra yeni database resetlogs ile açarız ve istediğimiz tablespace hazır hale gelir.
Bundan sonra export ve import işlemlerini manuel yapmamız gerekir.