Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Buat Ulang Node RAC Buruk

Baru-baru ini, saya mencoba menerapkan Pembaruan Patch Set (PSU) terbaru dan terhebat ke sistem Oracle RAC 2-node. Semuanya berjalan lancar di simpul pertama. Saya memang memiliki masalah ketika mencoba menerapkan PSU ke simpul kedua. Masalahnya bukan pada OPatch atau PSU, melainkan, saya bahkan tidak berhasil menjatuhkan Infrastruktur Grid (GI). Dan untuk memperburuk keadaan, itu juga tidak akan muncul.

Saya melacak masalah saya ke Grid Inter Process Communication Daemon (gipcd) Saat mengeluarkan 'crsctl stop crs', saya menerima pesan yang menyatakan bahwa gipcd tidak dapat dihentikan dengan sukses. Saat memulai GI, startup mencoba memulai gipcd dan kemudian berhenti. Saya menemukan banyak artikel bermanfaat di My Oracle Support (MOS) dan dengan pencarian Google. Banyak dari dokumen tersebut tampaknya sesuai dengan masalah saya, tetapi saya tidak berhasil mengaktifkan dan menjalankan GI kembali. Mem-boot ulang node juga tidak membantu. Sisa artikel ini dapat membantu bahkan jika masalah Anda bukan dengan gipcd, itu hanya poin penting bagi saya.

Jadi pada saat ini, saya harus membuat keputusan. Saya dapat mengajukan Permintaan Layanan (SR) di MOS. Atau saya bisa "membangun kembali" simpul itu di kluster. Saya tahu jika saya mengajukan SR, saya akan beruntung memiliki node yang beroperasi kapan saja di minggu depan. Saya tidak ingin menunggu selama itu dan jika ini adalah sistem produksi, saya tidak bisa menunggu selama itu. Jadi saya memutuskan untuk membangun kembali node. Posting blog ini akan merinci langkah-langkah yang saya ambil. Pada tingkat tinggi, inilah yang terlibat:

  1. Hapus node dari cluster
  2. Bersihkan sisa GI dan RDBMS pada node tersebut.
  3. Tambahkan node kembali ke cluster.
  4. Tambahkan instance dan layanan untuk node baru.
  5. Mulai instance.

Jika penting, sistem ini adalah Oracle 12.1.0.2 (baik GI dan RDBMS) yang berjalan di Oracle Linux 7.  Dalam contoh saya, host01 adalah node “baik” dan host02 adalah node “buruk”. Nama databasenya adalah "orcl". Jika memungkinkan, perintah saya akan memiliki prompt yang menunjukkan node tempat saya menjalankan perintah itu.

Pertama, saya akan menghapus node buruk dari cluster.

Saya mulai dengan menghapus perangkat lunak RDBMS dari inventaris node yang baik.

[oracle@host01]$ ./runInstaller -updateNodeList ORACLE_HOME=$RDBMS_HOME "CLUSTER_NODES={host01}" 
LOCAL_NODE=host01

Kemudian saya menghapus perangkat lunak GI dari inventaris.

[oracle@host01]# ./runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={host01}" 
CRS=TRUE -silent

Sekarang saya akan menghapus simpul itu dari registri cluster.

[root@host01]# crsctl delete node -n host02
CRS-4661: Node host02 successfully deleted.

Hapus VIP.

[root@host01]# srvctl config vip -node host02
VIP exists: network number 1, hosting node host02
VIP Name: host02-vip
VIP IPv4 Address: 192.168.1.101
VIP IPv6 Address: 
VIP is enabled.
VIP is individually enabled on nodes: 
VIP is individually disabled on nodes: 
[root@host01]# srvctl stop vip -vip host02-vip -force
[root@host01]# srvctl remove vip -vip host02-vip
Please confirm that you intend to remove the VIPs host02-vip (y/[n]) y

Kemudian hapus instance.

[root@host01]# srvctl remove instance -db orcl -instance orcl2
Remove instance from the database orcl? (y/[n]) y
 

Pada titik ini, node yang buruk tidak lagi menjadi bagian dari cluster, dari sudut pandang node yang baik.

Selanjutnya, saya akan pindah ke node yang buruk dan menghapus perangkat lunak dan membersihkan beberapa file konfigurasi.

[oracle@host02]$ rm -rf /u01/app/oracle/product/12.1.0.2/
[root@host02 ~]# rm -rf /u01/grid/crs12.1.0.2/*
[root@host02 ~]# rm /var/tmp/.oracle/*
[oracle@host02]$ /tmp]$ rm -rf /tmp/*
[root@host02]# rm /etc/oracle/ocr*
[root@host02]# rm /etc/oracle/olr*
[root@host02]# rm -rf /pkg/oracle/app/oraInventory
[root@host02]# rm -rf /etc/oracle/scls_scr

Saya mengambil jalan keluar yang mudah dan hanya menggunakan 'rm' untuk menghapus perangkat lunak rumah RDBMS dan Grid. Semuanya sudah dibersihkan sekarang. Node yang baik menganggapnya sebagai bagian dari cluster node tunggal dan node yang buruk bahkan tidak tahu tentang cluster tersebut. Selanjutnya, saya akan menambahkan simpul itu kembali ke cluster. Saya akan menggunakan utilitas addnode di host01.

[oracle@host01]$ cd $GRID_HOME/addnode
[oracle@host01]$ ./addnode.sh -ignoreSysPrereqs -ignorePrereq -silent "CLUSTER_NEW_NODES={host02}" 
"CLUSTER_NEW_VIRTUAL_HOSTNAMES={host02-vip}"

Ini akan mengkloning rumah GI dari host01 ke host02. Pada akhirnya, saya diminta untuk menjalankan root.sh di host02. Menjalankan skrip ini akan menghubungkan GI ke disk OCR dan Voting dan memunculkan tumpukan clusterware. Namun, saya perlu menjalankan satu rutinitas pembersihan lagi sebagai root pada host02 sebelum saya dapat melanjutkan.

[root@host02]# cd $GRID_HOME/crs/install
[root@host02]# ./rootcrs.sh -verbose -deconfig -force

Ada kemungkinan saya bisa menjalankan yang di atas lebih awal saat membersihkan node.js. Tapi di sinilah saya mengeksekusinya saat ini. Sekarang saya menjalankan skrip root.sh seperti yang diminta.

[root@host02]# cd $GRID_HOME
[root@host02]# ./root.sh

Pada titik ini, host02 sekarang menjadi bagian dari cluster dan GI aktif dan berjalan. Saya memverifikasi dengan "crs_stat -t" dan "olsnodes -n". Saya juga memeriksa VIP.

[root@host02]# srvctl status vip -vip host02-vip
VIP host02-vip is enabled
VIP host02-vip is running on node: host02

Sekarang kembali ke host01, saatnya untuk mengkloning perangkat lunak RDBMS.

[oracle@host01]$ cd $RDBMS_HOME/addnode
[oracle@host01]$ ./addnode.sh "CLUSTER_NEW_NODES={host02}"

Ini akan memulai OUI. Ikuti wizard untuk menyelesaikan proses kloning.

Sekarang saya akan menambahkan instance kembali ke node itu.

[oracle@host01]$ srvctl add instance -db orcl -instance orcl2 -node host02

Jika semuanya berjalan dengan baik, instance akan segera dimulai.

[oracle@host01]$ srvctl start instance -db orcl -instance orcl2
[oracle@host01]$ srvctl status database -d orcl
Instance orcl1 is running on node host01
Instance orcl2 is running on node host02
SQL> select inst_id,status from gv$instance;
INST_ID STATUS
---------- ------------
 1 OPEN
 2 OPEN

Luar biasa! Yang tersisa hanyalah mengkonfigurasi ulang dan memulai layanan yang diperlukan. Saya punya satu.

srvctl modify service -db orcl -service hr_svc -modifyconfig -preferred "orcl1,orcl2"
srvctl start service -db orcl -service hr_svc -node host02
srvctl status service -db orcl

Itu dia. Sekarang saya memiliki semuanya operasional.

Semoga posting blog ini menunjukkan betapa mudahnya mengeluarkan simpul "buruk" dari cluster dan menambahkannya kembali. Seluruh proses ini membutuhkan waktu sekitar 2 jam untuk saya selesaikan. Jauh lebih cepat daripada resolusi apa pun yang pernah saya peroleh dari MOS.

Saya tidak pernah sampai ke akar penyebab masalah asli saya. Mengeluarkan node dari cluster dan menambahkannya kembali membuat saya kembali aktif dan berjalan. Proses ini tidak akan berfungsi jika akar penyebab masalah saya adalah terkait perangkat keras atau OS.

Dan bagian terbaik bagi saya dalam semua ini? Karena host01 sudah menerapkan PSU di rumah GI dan RDBMS, mengkloningnya ke host02 berarti saya tidak harus menjalankan OPatch di host02. Tuan rumah itu menerima tambalan PSU. Yang perlu saya lakukan untuk menyelesaikan patching adalah menjalankan datapatch terhadap database.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nonaktifkan dan kemudian aktifkan semua indeks tabel di Oracle

  2. Erlang dan konsumsi Memori Heapnya

  3. Fungsi MySQL COALESCE dan NULLIF

  4. Bagaimana menghindari substitusi variabel di Oracle SQL Developer dengan 'trinidad &tobago'

  5. Buku Putih Statistik CBO