RAC ortamında redo log eklenmesi/çıkartılması

Selamlar,

bu makalede 10G R2 RAC ortamında redo log file ekleyeceğiz, Bu yöntem ile ortamda ASM varsa redo log’ların alias’ları değiştirilebilir ya da redo log boyutları değiştirilebilir. Bizim senaryomuzda hem alias’ını hem de boyutunu değiştireceğiz.

Redo log group’larının ilk hali aşağıdaki gibi;

SQL> select f.member,l.bytes/1024/1024 as "Size in MB" from v$log l,v$logfile f where l.group#=f.group#;
MEMBER Size in MB
-------------------------------------------------- ----------
+DATA/npcdb/onlinelog/redo01.log 50
+FRA/npcdb/onlinelog/redo02.log 50
+DATA/npcdb/onlinelog/group_1.263.861793141 50
+FRA/npcdb/onlinelog/group_1.267.861793143 50
+DATA/npcdb/onlinelog/group_3.268.861793633 50
+FRA/npcdb/onlinelog/group_3.262.861793635 50
+DATA/npcdb/onlinelog/group_4.269.861793637 50
+FRA/npcdb/onlinelog/group_4.261.861793637 50

İlk olarak aşağıdaki parametreleri set ediyorum. Bu sayede redo log’lar hem DATA hem de FRA’da tutulacak.

alter system set db_create_online_log_dest_1 = '+DATA' scope=both sid='*';
alter system set db_create_online_log_dest_2 = '+FRA' scope=both sid='*';

Şimdi önce node1 e redo log group’larını ekliyorum;

alter database add logfile thread 1 group 11 size 75M;
alter database add logfile thread 1 group 12 size 75M;
alter database add logfile thread 1 group 13 size 75M;
alter database add logfile thread 1 group 14 size 75M;

daha sonra node2′ye yani thread 2′ye redo log group’larını ekliyorum.

alter database add logfile thread 2 group 15 size 75M;
alter database add logfile thread 2 group 16 size 75M;
alter database add logfile thread 2 group 17 size 75M;
alter database add logfile thread 2 group 18 size 75M;

Şimdi eski redolog gruplarını silmek için switch yapıyorum.

alter system switch logfile;

redo log group’larının statusune bakıyorum;

column MEMBERS format 99
select STATUS, group#, THREAD#, members, bytes/1024/1024 MB, ARCHIVED, SEQUENCE# from v$log;

Sadece status = INACTIVE olan redo log group’ları drop edilebilir. INACTIVE olana kadar log switch yapılabilir ve aşağıdaki şekilde redo log group’ları drop edilebilir.

alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
alter database drop logfile group 4;
alter database drop logfile group 5;
alter database drop logfile group 6;
alter database drop logfile group 7;
alter database drop logfile group 8;

redo log group’larının son hali şu şekilde;

SQL> select f.member,l.bytes/1024/1024 as "Size in MB" from v$log l,v$logfile f where l.group#=f.group#;
MEMBER Size in MB
-------------------------------------------------- ----------
+DATA/npcdb/onlinelog/group_15.263.863535475 75
+FRA/npcdb/onlinelog/group_15.302.863535477 75
+DATA/npcdb/onlinelog/group_11.275.863535027 75
+FRA/npcdb/onlinelog/group_11.296.863535029 75
+DATA/npcdb/onlinelog/group_12.276.863535039 75
+FRA/npcdb/onlinelog/group_12.297.863535041 75
+DATA/npcdb/onlinelog/group_13.277.863535045 75
+FRA/npcdb/onlinelog/group_13.298.863535047 75
+DATA/npcdb/onlinelog/group_14.278.863535053 75
+FRA/npcdb/onlinelog/group_14.299.863535055 75
+DATA/npcdb/onlinelog/group_16.279.863535479 75
MEMBER Size in MB
-------------------------------------------------- ----------
+FRA/npcdb/onlinelog/group_16.303.863535483 75
+DATA/npcdb/onlinelog/group_17.280.863535485 75
+FRA/npcdb/onlinelog/group_17.304.863535487 75
+DATA/npcdb/onlinelog/group_18.281.863535491 75
+FRA/npcdb/onlinelog/group_18.305.863535493 75
16 rows selected.

Kolay gelsin.

Scan-listener’a 2. portu eklemek

Selamlar,

bu makalede RAC ortamında tek bir scan listener’a ikinci bir port ekliyicez ve 2 instance farklı portlar üzerinden erişime açılacak.
Yani scan-listener’a 1521 portu ile gelen bir session ORCL instance’ına, 1621 portu üzerinden gelen session’lar ise TEST instance’ına bağlanacak.

1521 -> ORCL
1621 -> TEST

Bu işlem için aşağıdaki adımları tek tek izlememiz gerekli;

1- netca çalıştırılır ve 1621 portunu dinleyecek şekilde LISTENER2 adında bir listener oluşturulur.

2- grid user’ında olunduğu kontrol edilir ve aşağıdaki komut ile scan-listener’a 2. port eklenir.

oracle@db1 $ srvctl modify scan_listener -p "TCP:1521/TCP:1621"

3- TEST instance’ının tüm node’larında local_listener ve remote_listener parametreleri değiştirilir.

node_1
alter system set remote_listener="x3-scan:1621" scope=both sid='*';
alter system set local_listener = '(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.104)(PORT = 1621))' scope=both sid='test1';
node_2
alter system set local_listener = '(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.105)(PORT = 1621))' scope=both sid='test2';

4- Listener servisi stop/start edilir.

oracle@rac1:>srvctl stop scan_listener
oracle@rac11:>srvctl start scan_listener

5- Listener kontrol edilir.

[grid@x3n1 ~]$ lsnrctl status listener2

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 22-OCT-2014 10:01:44

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER2)))
STATUS of the LISTENER
------------------------
Alias LISTENER2
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 20-OCT-2014 08:57:32
Uptime 2 days 1 hr. 4 min. 13 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/11.2.0/grid/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/x3n1/listener2/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER2)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.1.1.102)(PORT=1621)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.1.1.104)(PORT=1621)))
Services Summary...
Service "test" has 1 instance(s).
 Instance "test1", status READY, has 1 handler(s) for this service...
Service "testXDB" has 1 instance(s).
 Instance "test1", status READY, has 1 handler(s) for this service...
The command completed successfully

Kolay gelsin.

DNFS ile database clone (RAC to single instance)

Selamlar,

bu makalede DNFS’in clone özelliğini kullanarak ZFS appliance üzerine backup’ını aldığımız bir database’i hızlı bir şekilde başka bir lokasyona clone’layacağız. Bu işi yeni bir test ortamı oluşturmak için kullanabilirsiniz. Image copy backup alacağımız için restore süresi oldukça kısa olacak.

Dizayn şu şekilde ;

Untitled-1 copyŞimdi adım adım başlayalım. Her adımın başına hangi server üzerinde çalışacağını yazmaya çalıştım.

1. [orcl1 & gantek] Öncelikle DNFS’i mount ediyoruz ve server’ın DNFS’e erişebildiğini kontrol ediyoruz. ‘/dnfs’ dizininin owner’ı oracle ve grubu oinstall olmalı.

[oracle@db dnfs]$ touch /dnfs/testfile
[oracle@db dnfs]$ cd /dnfs
[oracle@db dnfs]$ ls -l
-rw-r--r--+ 1 oracle oinstall 0 Sep 26 2014 testfile

2. [orcl1 & gantek] Tüm server’larda aşağıdaki dizinleri oluşturuyoruz. Bu dizinlere karşılık gelen share’ları da ZFS üzerinde oluşturmamız gerekiyor. Her dizin için share oluşturulmaz ise backup sırasında farklı kanallardan yazma işlemi yapamayız ve backup süremiz uzar.

[oracle@db dnfs]$ cd /dnfs
[oracle@db dnfs]$ mkdir clone_backup1 clone_backup2 clone_backup3 clone_backup4
[oracle@db dnfs]$ ls -l
-rw-r--r--+ 1 oracle oinstall 0 Sep 26 2014 clone_backup1 
-rw-r--r--+ 1 oracle oinstall 0 Sep 26 2014 clone_backup2 
-rw-r--r--+ 1 oracle oinstall 0 Sep 26 2014 clone_backup3 
-rw-r--r--+ 1 oracle oinstall 0 Sep 26 2014 clone_backup4

3. [orcl1] Backup script’ini yazıyoruz ve image copy backup’ı başlatıyoruz. DNFS paralel olarak 4 dizin’e de backup alınıyor. Burada performansı arttırmak için channel sayısı arttırılabilir.

[oracle@db script]$ vi backup.sql
run{
    sql 'alter database begin backup';
    sql 'alter system set "_backup_file_bufcnt"=64 scope=memory';
    sql 'alter system set "_backup_file_bufsz"=1048576 scope=memory';
    configure device type disk parallelism 4 backup type to copy;
    allocate channel ch1 device type disk format '/dnfs/clone_backup1/%d_%T_%p_%U.dbf' ;
    allocate channel ch2 device type disk format '/dnfs/clone_backup2/%d_%T_%p_%U.dbf' ;
    allocate channel ch3 device type disk format '/dnfs/clone_backup3/%d_%T_%p_%U.dbf' ;
    allocate channel ch4 device type disk format '/dnfs/clone_backup4/%d_%T_%p_%U.dbf' ;
    backup as copy database tag '$FullBackUpSet_dbf';
    sql 'alter database end backup';
}
[oracle@db script]$ rman target /
RMAN> @backup.sql

4. [gantek] Değişkenleri set ediyoruz.
master_copy_dir: backup’ların durduğu dizini göstermeli.
clone_file_create_dest: datafile’ların konacağı dizini göstermeli. Clone işlemi tamamlandıktan       sonra tüm datafiler’lar burada olacak.

export ORACLE_SID=gantek
export MASTER_COPY_DIR=/dnfs/clone_backup*
export CLONE_FILE_CREATE_DEST=/u01/app/oracle/oradata/gantek
export CLONEDB_NAME=gantek

Okumaya devam et

Manual AWR raporu almak

Selamlar,

bu makalede herhangi bir tool kullanmadan komut satırından awr raporu alıcaz. Örneğin Enterprise Manager’ın olmadığı ya da ulaşamadığımız ortamlarda oldukça işe yarayan bir yöntemdir.

AWR raporunu almak için “$ORACLE_HOME/rdbms/admin/awrrpt.sql” sql’ini çalıştırmamız yeterli olacaktır. Sırası ile şu soruları soracak;

1. Enter value for report_type: -> Rapor formatı, “HTML” giriyorum.
2. Enter value for num_days:    -> Kaç günlük snapshot’ları getireceğini soruyor, “1″ giriyorum.
3. 
Enter value for begin_snap:  -> Listeye bakıp başlangıç snapshot’ını giriyorum.
4. 
Enter value for end_snap:     -> Listeye bakıp bitiş snapshot’ı giriyorum.
5. Enter value for report_name: -> Rapora bir isim veriyorum.

[oracle@fraud admin]$ sql @awrrpt.sql

SQL*Plus: Release 11.2.0.3.0 Production on Wed Sep 24 15:08:25 2014

Copyright (c) 1982, 2011, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options


Current Instance
~~~~~~~~~~~~~~~~

 DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
 74509941 CONCILIA 1 concilia


Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: html

Type Specified: html


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 74509941 1 CONCILIA concilia fraud.gantek
 .local

Using 74509941 for database Id
Using 1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing <return> without
specifying a number lists all completed snapshots.


Enter value for num_days: 1

Listing the last day's Completed Snapshots

 Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
concilia CONCILIA 1315 20 Sep 2014 00:00 1
 1316 20 Sep 2014 01:00 1
 1317 20 Sep 2014 02:00 1
 1318 20 Sep 2014 03:00 1
 1319 20 Sep 2014 04:00 1
 1320 20 Sep 2014 05:00 1
 1321 20 Sep 2014 06:00 1
 1322 20 Sep 2014 07:00 1
 1323 20 Sep 2014 08:00 1
 1324 20 Sep 2014 09:00 1
 1325 20 Sep 2014 10:00 1
 1326 20 Sep 2014 11:00 1
 1327 20 Sep 2014 12:00 1
 1328 20 Sep 2014 13:00 1
 1329 20 Sep 2014 14:00 1
 1330 20 Sep 2014 15:00 1
 1331 20 Sep 2014 16:00 1
 1332 20 Sep 2014 17:00 1
 1333 20 Sep 2014 18:00 1



Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 1324
Begin Snapshot Id specified: 1324

Enter value for end_snap: 1333
End Snapshot Id specified: 1333



Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_1324_1333.html. To use this name,
press <return> to continue, otherwise enter an alternative.

Enter value for report_name: awrrpt_1_1324_1333.html

Using the report name awrrpt_1_1324_1333.html

Okumaya devam et

Monitoring RMAN backup

Selamlar,

backup session’larını monitor etmek için ve herhangi bir backup’ı yarıda kesmek için bir kaç script paylaşmak istiyorum.

1. RMAN session’larını görmek

select b.sid, b.serial#, a.spid, b.client_info
 from v$process a, v$session b
 where a.addr=b.paddr and client_info like 'rman%';

2. RMAN session’larının yüzde kaçının tamamlandığını monitor etmek

SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
 ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
 FROM V$SESSION_LONGOPS
 WHERE OPNAME LIKE 'RMAN%'
 AND OPNAME NOT LIKE '%aggregate%'
 AND TOTALWORK != 0
 AND SOFAR <> TOTALWORK;

3. Mevcut session’ları kill etmek için ‘kill session’ komutlarını çıkartan sorgu

select 'alter system kill session '''||b.sid||','||b.serial#||''' immediate;'
 from
 v$process a, v$session b
 where
 a.addr=b.paddr and client_info
 like
 'rman%';

Kolay gelsin.

RMAN Recovery Catalog oluşturma

Selamlar,

Bu makalede RMAN recovery catalog oluşturucaz. Recovery Catalog ile birden fazla database’in backup metadatasını tek bir database’de tutabiliriz. Aslında backup’larımızın kendisi kadar backup metadatası da önemlidir. Normal şartlar altında backup metadatası control file’da tutulurken catalog ile bu bilgiler bir database’de saklanır. Ek olarak catalog içinde backup script’leri saklanabilir ve farklı database’lerde çalıştırılabilir. Adım adım recovery catalog oluşturulmasına bakalım;

 

1. rec_cat adında bir tablespace oluşturuyorum.

CREATE TABLESPACE rec_cat DATAFILE 
'+DATA' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1024M
LOGGING
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

2. Catalog user’ı olarak CAT adında bir user oluşturuyorum.

CREATE USER cat IDENTIFIED BY cat12345
DEFAULT TABLESPACE rec_cat
TEMPORARY TABLESPACE "TEMP"
QUOTA UNLIMITED ON rec_cat;

3. CAT user’ına gerekli hakları ve ‘RECOVERY_CATALOG_OWNER’ rolünü veriyorum.

GRANT CONNECT,RESOURCE TO cat;
GRANT "RECOVERY_CATALOG_OWNER" TO CAT;
ALTER USER CAT DEFAULT ROLE "RECOVERY_CATALOG_OWNER";

4. RMAN’e CAT user’ı ile bağlanıp catalog oluşturuyorum.

[oracle@x3n1 wallet]$ rman catalog cat/cat12345
Recovery Manager: Release 11.2.0.4.0 - Production on Sat Sep 13 12:56:56 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to recovery catalog database
RMAN> create catalog;
recovery catalog created

5. Artık database’e ve catalog’a bağlanabilirim.

[oracle@x3n1 wallet]$ rman target / catalog cat/cat12345
Recovery Manager: Release 11.2.0.4.0 - Production on Sat Sep 13 12:59:18 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1384901735)
connected to recovery catalog database
Başka Lokasyondaki Database’i catalog’a eklemek;
[oracle@x3n1 wallet]$ rman target / catalog cat/cat12345@CATALOGDB
Recovery Manager: Release 11.2.0.4.0 - Production on Sat Sep 13 12:59:18 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1384901735)
connected to recovery catalog database
RMAN> register database;

Kolay gelsin.

Oracle Wallet konfigürasyonu

Selamlar,

bu makalede Oracle’ın Wallet aracını kullanarak password girmeden database’e ve rman’e bağlanacağız.

Oracle Wallet 10G R2 ile çıkmış olan küçük ve konfigürasyonu çok basit bir araçtır. Tek amacı içerisine eklenen password’leri şifreleyerek sakmaktır. Bu sayede database’e bağlanırken veya rman ile backup alırken (örn. crontab’daki script ile) password’u açık bir şekilde kullanmak zorunda kalmayız. Konfigürasyonu şu şekilde.

1. tnsnames.ora dosyasına yeni bir alias eklenir

BCKP=
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db.local)(PORT = 1521))
    (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = orcl.local)
    )
 )

2. sqlnet.ora dosyasına aşağıdaki satırlar eklenir. (sqlnet.ora, tnsnames.ora dosyaları ORACLE_HOME/db_1/network/admin dizininde olmalı, kesinlikle GRID_HOME altına atılmamalıdır. sqlnet.ora dosyası GRID_HOME altında olursa ASM kapatıldığı zaman tekrar açılmama ile ilgili bir bug bulunmaktadır.)
Bu adımda directory düzgün bir şekilde verilmelidir. Bu directory’e az sonra wallet create edeceğiz. Herhangi bir dizin gösterilebilir.

WALLET_LOCATION = 
 (SOURCE = (METHOD = FILE) 
 (METHOD_DATA = 
 (DIRECTORY = /u01/app/oracle/product/11.2.0/db_1/wallet))) 
SQLNET.WALLET_OVERRIDE = TRUE 
SSL_CLIENT_AUTHENTICATION = FALSE

3. Database’de user oluştur.

create user bckp identified by bckp1234;
grant dba to bckp;
grant sysdba to bckp;

4. Wallet oluştur.
Wallet oluştururken yeni bir şifre oluşturmanızı isteyecektir. Bu şifre ileride wallet ile ilgili işlemleri yapmak için kullanılacak.
Not: Bu şifre ile wallet’a kayıtlı user’lar görülebilir ancak password’leri görmek mümkün değildir.

mkstore -wrl /u01/app/oracle/product/11.2.0/db_1/wallet -create

Okumaya devam et