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 )

WordPress eklenti kullanmadan sayaç oluşturma

Wordpres kullanılarak, oluşturulan bir blog’da bir eklenti(plugin) kullanmadan, basit birkaç kod yardımı ile  sayfanızın görüntülenme sayısını gösteren bir sayaç oluşturabiliriz. Bu işlemi yaparken, görüntülenmeleri ip ile eşleştirerek, aynı ipden yapılan birden fazla görüntülemeyi, tek bir görüntüleme olarak sayacağız. Bu da bize daha tutarlı bir sayaç sağlayacak.

Bunun için appearance menüsü altından editöre girerek, temanızın functions.php ve single.php dosyalarını aşağıda anlatılan şekilde güncellemeniz gerekiyor. Bu işleme başlamadan önce sitenizin komple yedeğinizi almanızı ve ayrıca functions.php ve single.php dosyalarının da orjinal hallerini kolay geri dönebilmek adına yedeklemenizi tavsiye ederim.

Güncelleme yapacağınız ekranı daha rahat bulabilmeniz için aşağıda ekran görüntüsünü paylaşıyorum.

Aşağıdaki fonksiyonları  functions.php dosyasına eklemeniz gerkiyor.

// izlenme değerini oluşturur
function setPostViews($postID) {
 $user_ip = $_SERVER['REMOTE_ADDR']; //ziyaretçinin ip adresini alır
 $key = $user_ip . 'x' . $postID; //post idniz ile ip yi birleştirir
 $value = array($user_ip, $postID); //post id ve ip yi ayrı değerler olarak bir diziye yazar
 $visited = get_transient($key); // oluşan keyin kayıtlı olup olmadığını kontrol eder ve visited için boolean değer oluşturur.
 // ID/IP ile oluşturduğumuz ($key) değerinin geçici değişkenimizde kayıtlı olup olmadığını kontrol eder.
 if ( false === ( $visited ) ) {
 //id ve ip ile oluşturdupumuz key değerini, Post ID ve IP address değerini 12 saatliğine kayıt eder.
 set_transient( $key, $value, 60*60*12 );
 // eğer ip daha önce gelmediyse view değerini bir arttırır.
 $count_key = 'views';
 $count = get_post_meta($postID, $count_key, true);
 if($count==''){
 $count = 1;
 delete_post_meta($postID, $count_key);
 add_post_meta($postID, $count_key, '0');
 }else{
 $count++;
 update_post_meta($postID, $count_key, $count);
 }
 }
}

// oluşturdupumuz izlenme değerini çeker
function getPostViews($postID){
 $count_key = 'views';
 $count = get_post_meta($postID, $count_key, true); 
 return $count.' Görüntüleme';
}

Bu adımı tamamlayarak fonksiyonlarımız oluşturduk. Şimdi görüntülenme sayısının görünmesini istediğimiz sayfalar için aşağıdaki kodu döngü içerisine eklememiz gerekiyor. Blog postlarına görüntülenmesini istiyorsak single.php dosyamızdaki loop içerisine aşağıdaki gibi ekliyoruz. Ben yorum kısmının hemen üzerinde görünmesi için  ”  if ( comments_open() || get_comments_number() ) :”  kodunun hemen üzerine ekledim.

setPostViews(get_the_ID());
echo getPostViews(get_the_ID());