27 Şubat 2012 Pazartesi

Tabloların taşınılması işlemleri



 Senaryo gereği iki tane birbiri ile ilişkili(master-child yapıda) tablolardan birisini başka bir tablespace’ ni değiştirdiğimizde tabloyla ilişkili nesnelerin (index-constraint) durumlarını inceleyelim.

Öncelikle veritabanımıza bazı yeni kullanıcı, tablespace oluşturmak için Sqlplus’ a sysdba olarak bağlanalım.


sqlplus / as sysdba
Connected.

Create a tablespace(bir test tablespace oluşturalım)
create tablespace test_tbs datafile
'/u01/app/oracle/oradata/XDB/datafile/test01.dbf' size 10M  autoextend on next 1M;
 
Tablespace created

İkinci bir tablespace oluşturuyorum.

create tablespace test_tbs2 datafile
'/u01/app/oracle/oradata/XDB/datafile/test02.dbf' size 10M  autoextend on next 1M;

Tablespace created.

Create a user(bir  test kullanıcısı oluşturalım)

create user test_usr identified by password;
 
User created.

Daha sonra test_usr kullanıcısına gerekli haklar verelim.

grant resource,connect to test_usr;

Grant succeeded.

Bu kullanıcıya Default tablespace ve geçici tablespace  olarak belirleyelim. Bundaki amaç bu kullanıcının oluşturacağı tablolar ve diğer nesneler default olarak bu tablespace içinde yer alması içindir.

alter user test_usr default tablespace test_tbs temporary tablespace temp;

User altered.

conn test_usr/password
Connected.

Tablo oluştur.
create table
test_table( t_id number, t_name varchar(30), hire_date date );

Table created.

Bildiğimiz gibi oracle diğer veritabanlarında olduğu gibi otomatik artan bir veritipine sahip değildir. Bu amaçla oracle nesnesi olarak sequence oluşturulup tablo kayıtları için kullanılabilir. Böylelikle de sequence nesnesinin de nasıl oluşturulup , tablo üzerinde nasıl kullanacağımızı da pekiştirmiş oluruz.

idmatic isminde bir Sequence oluştur.

create sequence id_matic
                        minvalue 1 
                        maxvalue 100
                        increment by 1
                        start with 1
                        nocycle 
sequence created.

insert into test_table  values(id_matic.nextval,'John',sysdate-30);

1 row created.

insert into test_table values(id_matic.nextval,'Jim',sysdate-60);

1 row created

insert into test_table values(id_matic.nextval,'Austin',sysdate-90);

1 row created.


select * from test_table;
      T_ID T_NAME                         HIRE_DATE
---------- ------------------------------ ----------
         2 John                           20/01/2012
         3 Jim                            21/12/2011
         4 Austin                         21/11/2011

Diğer child tabloyu oluşturuyoruz.

create table test_child_table(id number,month varchar(20),salary number);

Table created

Diğer parent tablo (test_table) ile ilişkiyi sağlamak için bu tabloya bir foreign key tanımlıyorum.

alter table test_child_table add constraint fk_id_test_ch_tbl foreign key(id)
references test_table(t_id);

Table altered

Daha sonrada indeks testi için bu child tablo üzerinde bir indeks oluşturuyorum. Btree indeksler de oluşturabilirsiniz. Ben Bitmap indeks tercih ettim.
create bitmap index idx_id_child_tbl on test_child_table (id);

Index created.

Yeni kayıt girelim
 insert into test_child_table values(2,'JAN',2000); 

1 row created

Kullanıcı tablolarını bir sorgulayalım. Bakalım ne yapmışız.

select table_name,tablespace_name from user_tables;
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TEST_TABLE                            TEST_TBS
TEST_CHILD_TABLE               TEST_TBS

Test_usr kullanıcısına it user objeleri aşağıda görülmektedir.


select object_name,OBJECT_TYPE from all_objects where owner='TEST_USR';


OBJECT_NAME                    OBJECT_TYPE
------------------------------ -------------------
ID_MATIC                       SEQUENCE
TEST_TABLE                     TABLE
PK_T_ID_TEST_TBL               INDEX
TEST_CHILD_TABLE               TABLE

Daha sonra test_child_table tablosunu test_tbs2 tablespace’ ine taşıyoruz.


alter table test_child_table move tablespace test_tbs2; 
Table altered.


Tekrar kontrol ettiğimizde kullanıcı tablolarını test_child_table tablosunu farklı bir tablespace taşıdığımızı kontrol ettik. Problem yok.

select table_name,tablespace_name from user_tables;
TABLE_NAME                           TABLESPACE_NAME
------------------------------ ------------------------------
TEST_TABLE                          TEST_TBS
TEST_CHILD_TABLE                          TEST_TBS2

Bakalım şimdi bu tablo üzerindeki nesneler özellikle indeksler ne durumda diye.
Taşındıktan sonra test_child_table tablosu üzerindeki indeksler unusable(kullanılamaz) hale gelecektir.;

 select index_name,status from user_indexes where table_name='TEST_CHILD_TABLE';

INDEX_NAME                     STATUS
------------------------------ --------
IDX_ID_CHILD_TBL               UNUSABLE

Gördüğümüz gibi tablo taşındıktan sonra mevcut indeksin tablo kayıtları için tuttuğu rowid ‘ler de değiştiği için indeks te artık yeni rowidler mevcut olmadığından unusable duruma düşecektir. Neyseki  rebuild edilebilir özelliği olduğundan yeni tablespace üzerinde rebuild edip yeni row id leri  listesine alacaktır.
Daha sonra bu indeksi yeni  yerinde rebuild yapma ihtiyacımız olacaktır.


 alter index IDX_ID_CHILD_TBL rebuild tablespace test_tbs2 ;

Index altered.

select index_name,status from user_indexes where table_name='TEST_CHILD_TABLE';



INDEX_NAME                     STATUS
------------------------------ --------
IDX_ID_CHILD_TBL               VALID

Şimdi bakalım. Bildiğimiz gibi test_child_table tablosu test_table tablosuna bağımlı bir child tablodur. Yeni yerinde test_child_table tablosuna yeni kayıtlar ekleyelim.

 insert into test_child_table values(3,'FEB',4000);

1 row created.

select * from test_child_table;

        ID MONTH                    SALARY
---------- -------------------- ----------
         2 FEB                        4000
         3 FEB                        4000
Ana tablomuzdak kayıtları inceleyelim.

select * from test_table;


      T_ID T_NAME                         HIRE_DATE
---------- ------------------------------ ----------
         2 John                           20/01/2012
         3 Jim                            21/12/2011
         4 Austin                         21/11/2011

insert into test_child_table values(1,'FEB',4000);

insert into test_child_table values(1,'FEB',4000)

ERROR at line 1:
butunluk kısıtlaması (TEST_USR.FK_ID_TEST_CH_TBL) bozuldu – ust anahtar
bulunamadi


Tabloyu taşıdık. Ama Ana tabloya bağımlı olan bir foreign key kısıtlaması halen çalışmakta.
Farklı bir makale ile görüşmek üzere.

17 Şubat 2012 Cuma

Program Global Area (PGA) Nedir?


Daha önceki ilk makalemde,  Oracle'ın  kullanacağı bellek yapısını SGA(System Global Area) ve PGA (Program Global Area) olarak   iki bölüme ayırır demiştik. SGA ile ilgili genel bilgileri http://muhammetucar.blogspot.com/2011/08/sga.html  makalemizde vermiştik. Umarım yararlı olmuştur. Şimdi uzun bir aradan sonra PGA ile ilgili genel bilgileri paylaşmak istedim.
PGA,  Oracle kullanan her bir process (server process)için bellekte  reserve edilen alandır.Kullanıcı  tarafından gelen isteğe User proses,  user prosesi oracle serverde karşılayan process de server proces s ‘ dir.
Aşağıda bir veritabanı kullanıcısı tarafından  talep edilen bir sql cümlesini olduğunu düşünelim. Oracle Net yardımı ile Client tarafında oluşturulmuş bir  “User process1” olduğunu varsayalım.Gelen talep doğrultusunda server tarafında Listener(dinleyici) aşamasını geçtikten sonra  Oracle server tarafında  bir “Server process1” isimli process oluşacaktır.





Ve yazımızın başında demiştik ki, her server process için bir PGA alanı oluşacaktır. Ve bu server process için bellekte bir alan ayrılacaktır. Toplam PGA alanı ise her bir server process tarafından ayrılan alanların toplamıdır. Ve PGA_AGGREGATE_TARGET parametresi ile set edilebilir.Aşağıdaki resimde PGA alanı ve bileşenleri ve server process ile bağlantısı verilmiştir.

PGA yapısı:

PrivateSQL AREA:Bağlı olan tüm session(oturumların) bir SQL Work Area alanı vardır. SQL bind bilgisi burada yer alır.
Her bir Kullanıcı ağer aynı Sql cümlesini talep ederse bu cümleler için aynı paylaştırılmış (Shared SQL Area) alanı kullanacaklardır.
Private Sql Area nın yeri bağlantının şekline göre de değişir. İki şekilde oracle Server' a bağlanabilir. Shared Server ve Dedicated server şeklinde. Eğer shared server yöntemini kullanırsanız private sql area SGA içerisinde yer alacaktır. Bildiğimiz gibi SGA içinde shared pool and Large pool vardır. Eğer Large pool başlangıçta set edilmemişse(bir değer verilmemişse) o zaman Bu User Global Area dediğimiz kısım Shared Pool 'da mevki bulacaktır.Aksi takdirde Large pool 'u kullanacaktır.

Dedicated yapıda ise PGA içerisinde olacaktır.
Private SQL Area alanı Runtime(çalışma anında) Area ve Persistent(kalıcı) Area olarak iki şekilde bilgi tutulur. Runtime esnasında sorgu çalıştırma durumu bilgisi(Qurey sonucuna erişim bilgisi gibi vb. ) Buradaki bilgiler sorgu iptal edildiğinde yada sorgu sonucu fetch edildiğinde  silinir.
Diğer kalıcı bölüm ise,  bind variable değerlerinin kalıcı olarak saklandığı yerdir. imleç kapatıldığında bu alan serbest bırakılır. İmleç açıldığında bind variable değerleri tekrar yüklenir.



Memory AreaDedicated ServerShared Server
Nature of session memoryPrivateShared
Location of the persistent areaPGASGA
Location of part of the run-time area for SELECT statementsPGAPGA
Location of the run-time area for DML/DDL statementsPGAPGA
Source: Oracle

CURSOR(imleç): Oracle Sessionların talepleri için kullandığı işaretlerdir. Bir SQL sorgusu çalıştırıldığı zaman onun için bir cursor oluşturulur. Sorgu sonucunda dataların getirilmesi dataya bilgi gönderilmesi gibi önceliklerin ve işlemlerin yapılması işlemlerini Cursor sağlar. Yani siz bir işlem yaptırmak istiyorsanız bir imleç oluşturup  işlemlerinizi ona yaptırısınız.Derleme açısından bakıldığında imleçler önemli olduklarından imleç görüldüğü yerde işlemlerin öncelikli yapılması esastır.

SQL WORK AREA: 
         Birleştirme(hash-join) ve sıralama(order by, group by) komutları gibi işlemlr için ayrılmış büyük bir alandır. Örnek olarak istenilen sorgu sonucunda  bir sıralama talebi varsa , database buffer cahce ‘ den getirilen verileri sıralamak için bir alana ihtiyaç olacaktır.Ve bulan da “sort area” yada “Work area” olarak bilinir. Bir diğer örnek ise, birden fazla tabloyu join edeceğiz. Burada en büyük  tablo bu alana getirilir. Sonra diğerleri ve bu alanda da join işlemi yapılır. Bu  alanda yapılan işlem kadarcık mı diye düşünürseniz  önemli bir işlem daha yapılır. Bitmap indeks oluşturma ve birleştirme işlemleri için kullanılan önemli alandır. Datawarehouse sistemlerde sorgu performansını artırmak için b tree indeksler yerine Bitmap index kullanılır demiştik daha önceki makalelerimizde. Bakınız.(http://muhammetucar.blogspot.com/2012/01/oracle-indexes-2.html)

Sql Work Area alanının normal koşullarda yeterli büyüklükte alana sahiptir. Yeterli büyüklükte değilse sql için response time süresinin uzaması demektir. Bu da performansı negatif yönde etkiler.



11 Şubat 2012 Cumartesi

Data Recovery Advisor Nedir ve Nasıl Çalışır?


Data Recovery Advisor
Oracle 11g ile gelen yeni özelliklerden birisi de DRA’ dır. DRA’lar sistemde bulunan data corruption’ ları yada data kayıplarına olası çözümler  bularak tavsiye verirler.

Bu özellik sadece Oracle 11g ‘de Standalone databaselerde kullanılabilir. Yani Real Application Cluster databaseleri bu özelliği şuan desteklememektedir.
Peki genel olarak data hataları nelerdir?

  • data dosyalarına ulaşılamama(silinmiş,kayıp)
  • Tablespace silinmiş olabilir yada offline durumunda olabilir.
  • fiziksel corruption(bozulmalar)
  • Mantksal Corruption' lar
  • I/O hataları
  • Controlfiledeki bilgi ile datafile bilgileri arasındaki tutarsızlıklar
data hataları kabul edilebilir.
Data Recover Advisor (Veri kurtarma tavsiyecisi) hatayı bulup, sorunun çözülmesi için önermelerde bulunup
, çözümleme işlemini hızlı bir şekilde yapan bir teknolojidir.

Biz bunlardan  LIST FAILURE,
ADVISE FAILURE,
REPAIR FAILURE,
CHANGE FAILURE,
Ve VALIDATE komutlarını örnek bir senaryo ile inceleyeceğiz.
RMAN ' bağlanalım.
Not: Koyu yazılar komut satırlarıdır.

[oracle@mhm dbhome_1]$ rman  target=/

Recovery Manager: Release 11.2.0.1.0 - Production on Sat Feb 4 23:48:08 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: XDB (DBID=3401130493)
RMAN> list failure;
using target database control file instead of recovery catalog
no failures found that match specification
SQL> create table t (x number) tablespace users ;
Table created.
SQL> insert into t(x) values (to_char(sysdate,'DD'));
1 row created.
SQL> select * from t;
         X
----------
         4
[oracle@mhm dbhome_1]$ cd /
[oracle@mhm /]$ cd $ORACLE_BASE
[oracle@mhm oracle]$ ls
admin  cfgtoollogs  checkpoints  diag  FRA  oradata  oradiag_oracle  product
[oracle@mhm oracle]$ cd oradata
[oracle@mhm oradata]$ ls
catdb  XDB
[oracle@mhm oradata]$ cd XDB
[oracle@mhm XDB]$ ls
controlfile  datafile  onlinelog
[oracle@mhm XDB]$ cd datafile
[oracle@mhm datafile]$ ls
sysaux01.dbf  system01.dbf  undotbs01.dbf  users01.dbf
[oracle@mhm datafile]$ rm -rf users01.dbf
[oracle@mhm datafile]$ ls
sysaux01.dbf  system01.dbf  undotbs01.dbf
[oracle@mhm datafile]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Sat Feb 4 23:58:38 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> select * from t;
         X
----------
         4
  Yukarıdaki sorgu, users01.dbf data dosyası olmadan da  cevap verebiliyor. Nasıl oluyor da dosya yok iken çalışıyor?
Veritabanı çalıtığında Belleğimizde database buffer cache isimli bir SGA bileşeni vardır. Çalışacak sorgular, data dosyalarından bu alana getirilip çalıştırılıyor. Dolayısıyla şuan ki çalıştırdığımız sorgu Buffer cache de çalışmaktadır. Şimdi dilerseniz bir buffer cache Flush edelim. İçerisini boşaltalım. 
SQL> alter system flush buffer_cache;
System altered.
Ve sorguyu tekrar çalıştıralım.
SQL> select * from t;
select * from t
*
ERROR at line 1:
ORA-01116: 4 veritaban? dosyas?n? acmada hata
ORA-01110: veri dosyas? 4: '/u01/app/oracle/oradata/XDB/datafile/users01.dbf'
ORA-27041: dosya acılamıyor
Linux Error: 2: No such file or directory
Additional information: 3
Şimdi tekrar RMAN’ a bağlanalım.
[oracle@mhm datafile]$ rman  target=/
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Feb 5 00:01:10 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: XDB (DBID=3401130493)
RMAN> list failure;
using target database control file instead of recovery catalog
List of Database Failures
=========================
Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2074       HIGH     OPEN      04-FEB-12     Bir veya daha fazla sistem dısı veri dosyası eksik
RMAN> advise failure;
List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2074       HIGH     OPEN      04-FEB-12     Bir veya daha fazla sistem dısı veri dosyası eksik

analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK
analyzing automatic repair options complete
Mandatory Manual Actions
========================
no manual actions available

Optional Manual Actions
=======================
1. /u01/app/oracle/oradata/XDB/datafile/users01.dbf dosyas? yanl?sl?kla yeniden adland?r?lm?s veya tas?nm?ssa, bunu geri yukleyin

Automated Repair Options
========================
Option Repair Description
------ ------------------
1      4 veri dosyasını geri yukleyin ve kurtarın 
  Strategy: Onarım, veri kaybı olmadan tam bir ortam kurtarmayı icerir.
(Yukarıdaki tavsiye 4 nolu datafile restore etmeyi ve daha sonra recover işlemini içermektedir.) 
Repair script: /u01/app/oracle/diag/rdbms/xdb/XDB/hm/reco_2957351084.hm



RMAN> repair failure preview;
Strategy: Onarım, veri kaybı olmadan tam bir ortam kurtarmayı icerir
Repair script: /u01/app/oracle/diag/rdbms/xdb/XDB/hm/reco_2957351084.hm
contents of repair script:
   # restore and recover datafile
   sql 'alter database datafile 4 offline';
   restore datafile 4;
   recover datafile 4;
   sql 'alter database datafile 4 online';

Çözüm için yukarıdaki script’ i önermektedir. Şayet bizce de uygunsa  o zaman aşağıdaki kodu rahatça çalıştırabiliriz.
RMAN> repair failure;

Strategy: Onar?m, veri kayb? olmadan tam bir ortam kurtarmay? icerir
Repair script: /u01/app/oracle/diag/rdbms/xdb/XDB/hm/reco_2957351084.hm

contents of repair script:
   # restore and recover datafile
   sql 'alter database datafile 4 offline';
   restore datafile 4;
   recover datafile 4;
   sql 'alter database datafile 4 online';

Do you really want to execute the above repair (enter YES or NO)? Y
(Burada  yukarıdaki tavsiye scripti çalıştırmak istediğinden eminsen Y ile yanıt verelim.)
executing repair script

sql statement: alter database datafile 4 offline
Starting restore at 05-FEB-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/XDB/datafile/users01.dbf
channel ORA_DISK_1: reading from backup piece +XFRA/xdb/backupset/2012_02_04/nnndn0_tag20120204t232950_0.275.774401393
channel ORA_DISK_1: piece handle=+XFRA/xdb/backupset/2012_02_04/nnndn0_tag20120204t232950_0.275.774401393 tag=TAG20120204T232950
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:04
Finished restore at 05-FEB-12
Starting recover at 05-FEB-12
using channel ORA_DISK_1
starting media recovery
rchived log for thread 1 with sequence 1 is already on disk as file +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_1.277.774402255
archived log for thread 1 with sequence 2 is already on disk as file +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_2.278.774402273
archived log for thread 1 with sequence 3 is already on disk as file +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_3.279.774402285
archived log file name=+XFRA/xdb/archivelog/2012_02_04/thread_1_seq_1.277.774402255 thread=1 sequence=1
media recovery complete, elapsed time: 00:00:00
Finished recover at 05-FEB-12
sql statement: alter database datafile 4 online
repair failure complete
Şuan sistemde herhangi bir failure varmı yokmu diye bir kontrol edebiliriz.
RMAN> list failure;
no failures found that match specification
[oracle@mhm datafile]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sun Feb 5 00:04:51 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

Test edelim tekrardan…
SQL> select * from t;
         X
         4
Sonuç pozitif.

Not: Önce list Failure sonra Advise failure ve en son repair failure komutları kullanılır. Bu sıra önemlidir. Ve sanırsam da  bununla ilgili OCP sınavında bir soru vardı.
Örnek hata:
RMAN> list failure;

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2074       HIGH     OPEN      11-FEB-12     Bir veya daha fazla sistem d?s? veri dosyas? eksik
RMAN> repair failure;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of repair command at 02/11/2012 17:58:31
RMAN-06954: REPAIR command must be preceded by ADVISE command in same session

RMAN> list failure;
using target database control file instead of recovery catalog
List of Database Failures
=========================
Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2074       HIGH     OPEN      11-FEB-12     Bir veya daha fazla sistem d?s? veri dosyas? eksik

CHANGE FAILURE ile de hatanın LOW, HIGH yada CRITICAL  seçeneklerini kullanarak hatayı derecelendirebiliriz. Sistem için  önemli olan HIGH hatalarını system kaldığı yerden devam etmesi için LOW duruma getirilir. Sistem için etkisi olmayan bir HIGH hatasını LOW duruma getirebiliriz.Level olarak CRITICAL olan bir hatayı  HIGH yada LOW durumuna getiremeyiz. CRITICAL bir hata hemen REPAIR edilmesi gerekir. Edilemiyorsa alternatif çözümlerin bulunulması gerekir.

RMAN> change failure 2074 priority high;
List of Database Failures
=========================
Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2074       LOW      OPEN      11-FEB-12     Bir veya daha fazla sistem d?s? veri dosyas? eksik
Do you really want to change the above failures (enter YES or NO)? y
changed 1 failures to HIGH priority
RMAN> list failure;
List of Database Failures
=========================    
Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
2074       HIGH     OPEN      11-FEB-12     Bir veya daha fazla sistem d?s? veri dosyas? eksik
VALIDATE komutu ise  fiziksel ve mantıksal bozulabilecek tüm bütünleşik  olarak check eder.
Örnek olarak mevcut backupsetlerin check edilmesi, tablespace yada datafile check edilmesi, controlfile yada log dosylarının chec edilmesi  archive logların yada tüm database ‘in check edilmesi gibi bir çok örnek verilebilir.
Rman’ a bağlanalım.
RMAN> validate database;
Starting validate at 11-FEB-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00001 name=/u01/app/oracle/oradata/XDB/datafile/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/XDB/datafile/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/XDB/datafile/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/XDB/datafile/users01.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:01:02
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
1    OK     0              13430        87040           987716   
  File Name: /u01/app/oracle/oradata/XDB/datafile/system01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              58759          
  Index      0              12274          
  Other      0              2577           

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
2    OK     0              17900        64009           987714   
  File Name: /u01/app/oracle/oradata/XDB/datafile/sysaux01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              12363          
  Index      0              8878           
  Other      0              24859          

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
3    OK     0              129          6400            987716   
  File Name: /u01/app/oracle/oradata/XDB/datafile/undotbs01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              0              
  Index      0              0              
  Other      0              6271           

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
4    OK     0              473          640             955682   
  File Name: /u01/app/oracle/oradata/XDB/datafile/users01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              20             
  Index      0              2              
  Other      0              145            

channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
including current control file for validation
including current SPFILE in backup set
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
List of Control File and SPFILE
===============================
File Type    Status Blocks Failing Blocks Examined
------------ ------ -------------- ---------------
SPFILE       OK     0              2              
Control File OK     0              594            
Finished validate at 11-FEB-12

Backup Validate;
Backup alınırken tüm database ve archive log dosyalarının logical olarak bozulmalar varmı diye bir check işlemiş yapılır. Sorun yoksa backup alınır. Aşağıdaki komutları yazdığımızda tüm datafile, parametre dosyası, controlfile  ve archive log’ lar check edilmiş olacaktır. Herhangi bir  logical bozulma mevcut olursa alert loglara da yazaktır.
                                                                                                                                                                                  
RMAN> backup validate  check logical database archivelog all;
Starting backup at 11-FEB-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/XDB/datafile/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/XDB/datafile/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/XDB/datafile/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/XDB/datafile/users01.dbf
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:15
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
1    OK     0              13421        87040           989274   
  File Name: /u01/app/oracle/oradata/XDB/datafile/system01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              58765          
  Index      0              12277          
  Other      0              2577           

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
2    OK     0              17721        64009           989272   
  File Name: /u01/app/oracle/oradata/XDB/datafile/sysaux01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              12363          
  Index      0              8938           
  Other      0              24978          

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
3    OK     0              129          6400            989274   
  File Name: /u01/app/oracle/oradata/XDB/datafile/undotbs01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              0              
  Index      0              0              
  Other      0              6271           

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
4    OK     0              473          640             955682   
  File Name: /u01/app/oracle/oradata/XDB/datafile/users01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              20             
  Index      0              2              
  Other      0              145            

channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=13 RECID=12 STAMP=774008535
input archived log thread=1 sequence=14 RECID=13 STAMP=774008914
input archived log thread=1 sequence=15 RECID=14 STAMP=774008917
input archived log thread=1 sequence=16 RECID=15 STAMP=774008919
input archived log thread=1 sequence=17 RECID=16 STAMP=774008935
input archived log thread=1 sequence=18 RECID=17 STAMP=774008936
input archived log thread=1 sequence=19 RECID=23 STAMP=774385020
input archived log thread=1 sequence=20 RECID=24 STAMP=774385020
input archived log thread=1 sequence=21 RECID=25 STAMP=774385026
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
List of Archived Logs
=====================
Thrd Seq     Status Blocks Failing Blocks Examined Name
---- ------- ------ -------------- --------------- ---------------
1    13      OK     0              21              +XFRA/xdb/archivelog/2012_01_31/thread_1_seq_13.266.774008535
1    14      OK     0              96              +XFRA/xdb/archivelog/2012_01_31/thread_1_seq_14.264.774008915
1    15      OK     0              1               +XFRA/xdb/archivelog/2012_01_31/thread_1_seq_15.263.774008917
1    16      OK     0              5               +XFRA/xdb/archivelog/2012_01_31/thread_1_seq_16.257.774008919
1    17      OK     0              9               +XFRA/xdb/archivelog/2012_01_31/thread_1_seq_17.256.774008935
1    18      OK     0              1               +XFRA/xdb/archivelog/2012_01_31/thread_1_seq_18.262.774008937
1    19      OK     0              3               +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_19.267.774385021
1    20      OK     0              231             +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_20.268.774385021
1    21      OK     0              58656           +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_21.269.774385021
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=1 RECID=26 STAMP=774402257
input archived log thread=1 sequence=2 RECID=27 STAMP=774402273
input archived log thread=1 sequence=3 RECID=28 STAMP=774402285
input archived log thread=1 sequence=4 RECID=29 STAMP=774485129
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
List of Archived Logs
=====================
Thrd Seq     Status Blocks Failing Blocks Examined Name
---- ------- ------ -------------- --------------- ---------------
1    1       OK     0              50184           +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_1.277.774402255
1    2       OK     0              1               +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_2.278.774402273
1    3       OK     0              51              +XFRA/xdb/archivelog/2012_02_04/thread_1_seq_3.279.774402285
1    4       OK     0              53536           +XFRA/xdb/archivelog/2012_02_05/thread_1_seq_4.281.774485121
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
List of Control File and SPFILE
===============================
File Type    Status Blocks Failing Blocks Examined
------------ ------ -------------- ---------------
SPFILE       OK     0              2              
Control File OK     0              594            
Finished backup at 11-FEB-12


Dynamic performans view ler ile;
LIST FAILURE görevini yerine getirecek V$IR_FAILURE;
ADVISE FAILURE görevini yerinegetirecek V$IR_MANUAL_CHECKLIST;
REPAIR FAILURE görevini yerine getirecek V$_IR_REPAIR;


viewlerinden de  yararlanabiliriz.
Farklı bir makale ile tekrar görüşmek ümidi ile…


4 Şubat 2012 Cumartesi

Migration to File System from ASM


Başlangıçta ASM diskgroup 'ları üzerine kurulmuş bir veritabanını İşletimsistemi dosya sistemi üzerinde çalıştırmak istiyoruz. Ve aşağıdaki şekilde migration olayına adım adım başlıyoruz.

 DB_CREATE_FILE_DEST parametresi oluşturulacak tüm dosyaların bulunduğu yerdir. Default olarak tüm data dosyaları, Log dosyaları, Kontrol dosyaları bu dizinde mevcuttur. 

SQL> alter system set db_create_file_dest='+/u01/app/oracle/oradata ' scope=spfile;
System altered.


SQL> alter system set db_recovery_file_dest='+/u01/app/oracle/FRA ' scope=spfile;

Log dosyalarının yerini ise yine aynı path 'i kullanıyoruz.

SQL> alter system set db_create_online_log_dest_1='/u01/app/oracle/oradata' scope=spfile;

System altered.

alter system reset control_files scope=spfile sid='*';

Spfile’ den Control files parametresi  değeri silinir. Db_dreate_file_dest parametresi set edildiğinden  bir sonraki restore controlfile işleminden sonra spfile ‘deki yeni path’i otamatik olarak set edilecektir.

Daha sonra Veritabanımızı shutdown ediyoruz.
Sonra nomount  moduna getiriyoruz.

SQL>startup nomount;

Bundan sonra yeni Controlfile’ i restore edeceğiz. Ben daha önce almış olduğum backuplarla birlikte çalışan autobackup ‘dan restore edeceğim.
Sonra RMAN ‘ bağlanalım.

Rman target /
RMAN> restore controlfile from autobackup;
RMAN> Alter database mount;

  System datafile kopyasını alıyorum.

RMAN> backup as copy datafile 1 format ‘/u01/app/oracle/oradata/datafile/system01.dbf’;

 Sysaux datafile kopyasını alıyorum.

RMAN> backup as copy datafile 2 format ‘/u01/app/oracle/oradata/datafile/sysaux01.dbf’;

 Undotbs datafile’ kopyasını alalım.

RMAN> backup as copy datafile 3 format ‘/u01/app/oracle/oradata/datafile/undotbs01.dbf’;

Users datafile’ kopyasını alalım.

RMAN> backup as copy datafile 4 format ‘/u01/app/oracle/oradata/datafile/users01.dbf’;

Daha önceki makalemizde söylediğimiz gibi image copy alınan backuplar’ı switch edip kopyalarının orijinal gibi çalışmaları sağlanabilir. Ve bu işte Controlfile bilgilendirilmiş olur. Şimdi istediğim, tüm datafile’ların yeni path’ (yollarında) çalışması.

RMAN> switch database to copy;

Ve böylece datafile’  rin tümü /u01/app/oracle/oradata/XDB/datafile/ klasörüne aldık.
Not: Eğer Rman ortamında tekrar aynı switch komutları verildiğinde orijinal yerlerine switch eidlmiş olur. Switch işlemi anlamından da anlaşılacağı üzere anahtarlama görevini yapar.
Şimdi database açıyoruz.

RMAN> alter database open;
Database opened


RMAN>exit

Tempfile  taşınması:
 
SQL> Select file_name from dba_temp_files;
FILE_NAME
----------------------------------------------
/u01/app/oracle/oradata/XDB/tempfile/temp01.dbf
+XDATA/XDB/tempfile/temp.264.718706509

Tempfile  oracle geçici dosyalarının tutulduğu bir alandır.  Önce temp tablespace ‘ ine yeni bir tempfile ekliyorum. Ve eskisini siliyorum.

SQL>Alter database temp add tempfile ‘/u01/app/oracle/oradata/XDB/tempfile/temp01.dbf size 50M’;
SQL> alter database temp drop tempfile ‘+XDATA/XDB/tempfile/temp.264.718706509’;
 
SQL> Select file_name from dba_temp_files;
FILE_NAME
----------------------------------------------
/u01/app/oracle/oradata/XDB/tempfile/temp01.dbf