Exadata database and grid home manuel sıralı patch geçme EXADATA(Aug2017 – 11.2.0.4.170814)


Oracle Versiyon: 11.2.0.4.8

OS : Oracle Linux 6 (Linux x86-64)

patch number:26610265

patch: Oracle Database Patch For EXADATA(Aug2017 – 11.2.0.4.170814)


Yazının devamında Exadata X3-2 Full rac için database ve grid home a 11.2.0.4.170814 patch inin manuel rolling olarak geçilmesi anlatılmıştır. Exadata genel patch bilgileri için Doc ID 888828.1 incelenebilir.

Öncelikle patch geçilecek database ve grid home daki Opatch en güncel seviyeye getirilir. En güncel opatch versiyonu için oracle supporttan Doc ID 274526.1 yi takip edebilirsiniz.

Burada dikkat etmeniz gereken nokta database versiyonunuza uygun opatch i indirmeniz.

NOT: Patch geçmeden önce patch dosyası içerisinden çıkan readme dosyasını dikkatli şekilde okuyunuz. Bilinen hatalar (known issues) alanını öncelikle kontrol ediniz.

Daha sonra versiyonumuza uygun olarak indiriğimiz opatch dosyasını database ve grid home altına kopyalıyoruz. Full exadata üzerinde çalıştığımız için tek tek uğraşmamak adına bu işlemleri dcli ile yapacağız. Öncelikle bir ftp programıyla tüm nodelara indirdiğimiz opatch dosyasını kopyalıyoruz. biz /u02/source/patch/ dizini altına kopyaladık.

Opatch Güncelleme

  1. dcli ile tüm nodelarda zipli dosyayı açıyoruz.
  2. Eski OPatch klasörümüzü sonuna tarih ekleyerek yedekliyoruz.
  3. Yeni opatch klasörümüzü oracle home altına kopyalıyoruz.
  4. Grid  home altında da kopyalama işlemini gerçekleştiriyoruz.
cd /opt/oracle.SupportTools/onecommand/

 dcli -g dbs_group -l oracle "unzip /u02/source/patch/p6880880_112000_Linux-x86-64.zip -d /u02/source/" 
 dcli -g dbs_group -l oracle "mv /u01/app/oracle/product/11.2.0.4/dbhome_1/OPatch /u01/app/oracle/product/11.2.0.4/dbhome_1/Opatch_14_10_2017"
 dcli -g dbs_group -l oracle "cp -R /u02/source/OPatch /u01/app/oracle/product/11.2.0.4/dbhome_1/"
 dcli -g dbs_group -l oracle "cp -R /u02/source/OPatch /u01/app/11.2.0.4/grid/"

kontrol için aşağıdaki komutu çalıştırabiliriz.

dcli -g dbs_group -l oracle "/u01/app/oracle/product/11.2.0.4/dbhome_1/OPatch/opatch version"
dcli -g dbs_group -l oracle "/u01/app/11.2.0.4/grid/OPatch/opatch version"

Patch Dosyasını Kopyalama

bir ftp programıyla tüm nodelara indirdiğimiz patch dosyasını kopyalıyoruz. ardından.

  1. md5sum ile dosyanın düzgün kopyalandığını kontrol ediyoruz.
  2. patch dosyasını unzip ediyoruz.
  3. kontrol ediyoruz.
dcli -g dbs_group -l oracle "md5sum /u02/source/patch/p26610265_112040_Linux-x86-64.zip"

dcli -g dbs_group -l oracle "unzip /u02/source/patch/p26610265_112040_Linux-x86-64.zip -d /u02/source/patch/11204_170814/" 
 
dcli -g dbs_group -l oracle "ls -lrt /u02/source/patch/11204_170814/"

PREPATCH

Enterprise manager agent’ı  stop edilir.

dcli -g dbs_group -l oracle "/u01/agent/agent_13.2.0.0.0/bin/emctl stop agent"

Oracle userı ile db home üzerinden çalışan tüm prosesler stop edilir. Bunun için servisleri açarken kullanılacak bir status.txt dosyası üretilir.  aşağıdaki scripti 1. node olan exadatanoe1 üzerinde çalıştırıyoruz.

/u01/app/oracle/product/11.2.0.4/dbhome_1/bin/srvctl stop home -o /u01/app/oracle/product/11.2.0.4/dbhome_1 -s /u02/source/status.txt -n exadatanoe1

Sonrasında aşağıdaki scripti çalıştırarak grid proseslerini durdurarak grid home u patch geçmeye hazır hale getiriyoruz.

/u01/app/11.2.0.4/grid/crs/install/rootcrs.pl -unlock

grid proseslerinin kapandığını kontrol etmek için diskmon prosesini grepleyebiliriz.

ps -ef | grep diskmon

PATCH

Grid PATCH

Unzip edilen patch dosyasının içine girilerek. Grid home ownerı ile aşağıdaki scriptler çalıştırılır. Bizde grid home userı oracle

 

cd /u02/source/patch/11204_170814/

/u01/app/11.2.0.4/grid/OPatch/opatch napply -oh /u01/app/11.2.0.4/grid -local /u02/source/patch/11204_170814/26610265/26609769

/u01/app/11.2.0.4/grid/OPatch/opatch napply -oh /u01/app/11.2.0.4/grid -local /u02/source/patch/11204_170814/26610265/26609929

/u01/app/11.2.0.4/grid/OPatch/opatch napply -oh /u01/app/11.2.0.4/grid -local /u02/source/patch/11204_170814/26610265/22502505

aşağıdaki komut ile kontrol edilebilir. Örnek çıktısı aşağıdaki gibi olmalıdır.

/u01/app/11.2.0.4/grid/OPatch/opatch lsinventory -detail -oh /u01/app/11.2.0.4/grid | grep 11.2.0.4.170814
Patch description: "OCW Patch Set Update : 11.2.0.4.170814 (26609929)"
Patch description: "DATABASE PATCH FOR EXADATA (Aug 2017 - 11.2.0.4.170814) : (26609769)"

Database PATCH

Database home owner ile aşağıdaki script çalıştırılır.

/u02/source/patch/11204_170814/26610265/26609929/custom/server/26609929/custom/scripts/prepatch.sh -dbhome /u01/app/oracle/product/11.2.0.4/dbhome_1

Burada bizim önceden geçtiğimiz bir one of patch ile çakışma yaşandığını gördük. Öncelikle böyle bir conflict durumu ile karşılaşırsanız conflict olan patch i aşağıdaki gibi kaldırabilirsiniz.

opatch rollback -id 19995869

Sonrasında yine database home owner ile aşağıdaki komutlar çalıştırılarak patch geçilir.

/u01/app/oracle/product/11.2.0.4/dbhome_1/OPatch/opatch napply -oh /u01/app/oracle/product/11.2.0.4/dbhome_1 -local /u02/source/patch/11204_170814/26610265/26609769

/u01/app/oracle/product/11.2.0.4/dbhome_1/OPatch/opatch napply -oh /u01/app/oracle/product/11.2.0.4/dbhome_1 -local /u02/source/patch/11204_170814/26610265/26609929/custom/server/26609929

POST PATCH

patch işlemi tamamlandıktan sonra aşağıdaki script çalıştırılır. oracle user ile

/u02/source/patch/11204_170814/26610265/26609929/custom/server/26609929/custom/scripts/postpatch.sh -dbhome /u01/app/oracle/product/11.2.0.4/dbhome_1

Root user ile aşağıdaki scriptler çalıştırılır. Bu scriptler grid proseslerini de ayağa kaldırıyor.

/u01/app/11.2.0.4/grid/rdbms/install/rootadd_rdbms.sh
/u01/app/11.2.0.4/grid/crs/install/rootcrs.pl -patch

Oracle user ile aşağıdaki script çalıştırılarak patch öncesi node üzerinde çalışan prosesler tekrar start edilir.

/u01/app/oracle/product/11.2.0.4/dbhome_1/bin/srvctl start home -o /u01/app/oracle/product/11.2.0.4/dbhome_1 -s /u02/source/status.txt -n exadatanoe1

Sonrasında aynı işlemler diğer db nodelar üzerinde tekrarlanır. tüm node lar bittiğinde em agent da yeniden açılır.

dcli -g dbs_group -l oracle "/u01/agent/agent_13.2.0.0.0/bin/emctl start agent"

ROLLBACK

patch geçisinde en başta yapılan stop işlemleri tekrarlanır. (srvctl stop home ve rootcrs.pl -unlock).

Grid home rollback

###ROLLBACK######
/u01/app/11.2.0.4/grid/OPatch/opatch rollback -local -id 26609769 -oh /u01/app/11.2.0.4/grid 
 
/u01/app/11.2.0.4/grid/OPatch/opatch rollback -local -id 26609929 -oh /u01/app/11.2.0.4/grid 
 
/u01/app/11.2.0.4/grid/OPatch/opatch rollback -local -id 22502505 -oh /u01/app/11.2.0.4/grid 
###ROLLBACK######

Database home rollback

#### ROLLBACK #####
/u01/app/oracle/product/11.2.0.4/dbhome_1/OPatch/opatch rollback -local -id 26609769 -oh /u01/app/oracle/product/11.2.0.4/dbhome_1

/u01/app/oracle/product/11.2.0.4/dbhome_1/OPatch/opatch rollback -local -id 26609929 -oh /u01/app/oracle/product/11.2.0.4/dbhome_1
####ROLLBACK #####

 

postpach scripti tekrar çalıştırılır.

/u02/source/patch/11204_170814/26610265/26609929/custom/server/26609929/custom/scripts/postpatch.sh -dbhome /u01/app/oracle/product/11.2.0.4/dbhome_1

patch sonrası çalıştırılan start scriptleri tekrarlanır. (rootcrs.pl -patch , srvctl start home )

Oracle database jvm componenti kaldırma


Oracle Versiyon: 11.2.0.4.8

OS : Oracle Linux 6 (Linux x86-64)


Oracle yayınladığı bundle patchlerde jvm patchlerini bundle a katmıyor, bu durum patch geçme işlemlerinde eksta iş yükü anlamına geliyor. Birçok veritabanında JVM kullanılmıyor olmasına rağmen bazen belki lazım olur diye bazen de bilgisizlikten kurulabiliyor.

JVM DBCA üzerinden kaldırılamadığından deinstall edilmesi  için birtakım manuel işlemler gerekiyor.

Öncelikle JVM in kullanılmadığından emin olmak gerekiyor. Spatial, Multimedia gibi özellikler kullanılıyorsa JVM ön gereksinim olarak kurulması gerekiyor. Yani Oracle veritabanının spatial ya da multimedia gibi özellikleri kullanıyorsanız JVM i kaldıramazsınız.

Öncelikle JVM in yüklü olup olmadığını tespit etmek için aşağıdaki scipti kullanabilirsiniz.

set line 1000;
set pagesize 1000;
col COMP_ID format a15;
col COMP_NAME format a40;
select COMP_ID,COMP_NAME,STATUS from dba_registry;

Ayrıca aşağıdaki sorgu ile veritabanında JVM option kullanan bir obje olup olmadığını kontrol etmek için de aşağıdaki sorguyu kullanabiliriz.

SELECT owner, object_type, status, COUNT(*)
 FROM dba_objects
 WHERE object_type LIKE '%JAVA%' and owner NOT IN ('EXFSYS','SYS')
 GROUP BY owner, object_type, status
 ORDER BY owner, object_type, status;

Bu sorguda JVM kurulu olduğunda default olarak gelen objeleri exclude etmek için EXFSYS ve SYS alıntaki objeleri exclude  ettik. Bizde informatica ve spatial kurulu sunucumuzda sorgu sonucu aşağıdaki gibi geliyor.

 

Kaldırma işlemine başlamadan önce aşağıdaki notu incelemekte fayda var. Burada kaldırma işlemi esnasında ya da sonrasında yaşayabileceğiniz problemleri önceden kontrol edebilirsiniz.

How to Reload the JVM in 11.2.0.x (Doc ID 1112983.1)

İşleme başlamadan önce bir tur utlrp çalıştırıp sonrasında mevcut invalid obje sayınızı bir yere not etmeniz faydalı olabilir.

Kaldırma işlemi için öncelikle vi ile full_rmjvm.sql isimli bir dosya oluşturuyoruz ve içeriğini aşağıdaki şekilde dolduruyoruz. ( sciprt 1112983.1 nolu dökümandan alınmıştır.)

-- Start of File full_rmjvm.sql
spool full_rmjvm.log
set echo on
connect / as sysdba
startup mount
alter system set "_system_trig_enabled" = false scope=memory;
alter system enable restricted session;
alter database open;
@?/rdbms/admin/catnoexf.sql
@?/rdbms/admin/catnojav.sql
@?/xdk/admin/rmxml.sql
@?/javavm/install/rmjvm.sql
truncate table java$jvm$status;
select * from obj$ where obj#=0 and type#=0;
delete from obj$ where obj#=0 and type#=0;
commit;
select owner, count(*) from all_objects
where object_type like '%JAVA%' group by owner;
select obj#, name from obj$
where type#=28 or type#=29 or type#=30 or namespace=32;
select o1.name from obj$ o1,obj$ o2
where o1.type#=5 and o1.owner#=1 and o1.name=o2.name and o2.type#=29;
shutdown immediate
set echo off
spool off
exit
-- End of File full_rmjvm.sql

Scripti çalıştırmadan önce veritabanını shutdown komutu ile kapatmanız gerekiyor. Sciprti oluşturduğumuz path e giderek. kapalı veritabanına sqlplus ile bağlandıktan sonra @full_rmjvm.sql yazarak enter a basıyoruz ve script çalışmaya başlıyor.

Ve aşağıdaki gibi yeniden veritabanını shutdown ederek sonlanıyor.

Sqlplus ile veritabanına tekrar bağlanarak veritabanını açıyoruz.

@?/rdbms/admin/utlrp.sql ile tekrardan objeleri derleyip invalid obje olup olmadığını kontrol ediyoruz.

select * from dba_objects where status='INVALID';

Sonrasında option kontrol scriptini tekrar çalıştırıyoruz.

set line 1000;
set pagesize 1000;
col COMP_ID format a15;
col COMP_NAME format a40;
select COMP_ID,COMP_NAME,STATUS from dba_registry;

işlem sonrası çıktı aşağıdaki gibi olmalıdır. JVM ile birlikte yüklenen diğer komponentlerin de kaldırıldığını görebiliriz. JAVAVM XML ve CATJAVA componentleri kaldırılıyor. Buradaki XML’i XML DB ile karıştırmamak lazım. ORACLE XDK isimli XML paketi kaldırılıyor sadece.  Kaldırılan componentlerin statüleri removed olarak görünüyor.

Aşağıdaki sorguyu tekrar çektiğimizde de hiçbir sonuç dönmemesi lazım.

SELECT owner, object_type, status, COUNT(*)
 FROM dba_objects
 WHERE object_type LIKE '%JAVA%' and owner NOT IN ('EXFSYS','SYS')
 GROUP BY owner, object_type, status
 ORDER BY owner, object_type, status;

İşlem tamamlandıktan sonra işlemin yapıldığı path te oluşan full_rmjvm.log dosyası incelenebilir.