Menyiapkan database utama Data Guard

Data Guard memerlukan database utama dan setidaknya satu database standby agar dapat berfungsi. Sebelum menyiapkan Data Guard di Solusi Bare Metal, buat database utama.

Contoh berikut digunakan di seluruh panduan ini:

Nama unik database Nama host server Nama instance RAC Peran
DBDG_SITE1 site1db1, site1db2 DBDG_SITE11, DBDG_SITE12 Utama
DBDG_SITE2 site2db1, site2db2 DBDG_SITE21, DBDG_SITE22 Siaga

Server Solusi Bare Metal yang menjalankan Oracle dalam panduan ini dikonfigurasi dengan variabel lingkungan berikut:

Nama variabel lingkungan Nilai
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

Anda mungkin perlu mengubah jalur variabel lingkungan, bergantung pada penyiapan Anda.

Menyiapkan database utama

  1. Login ke server Solusi Bare Metal pertama yang menghosting database utama.

  2. Di file /etc/oratab, tambahkan entri agar perintah oraenv dapat menetapkan variabel lingkungan untuk database utama. Ubah nama instance agar cocok dengan instance yang berjalan di setiap node, dan tentukan jalur lengkap ke direktori utama database Oracle:

    DBDG_SITE11:ORACLE_HOME:N
    
  3. Tetapkan variabel lingkungan ORACLE_SID agar Anda dapat terhubung ke database utama:

    source oraenv <<< "DBDG_SITE11"
    

    Anda akan menerima respons The Oracle base has been set to /apps/oracle/oracle_base.

Mengonfigurasi logging database dan mengaktifkan database flashback

  1. Mulai SQL*Plus, lalu aktifkan force logging sehingga ruang tabel nologging yang ditambahkan ke database dicatat ke dalam log:

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. Pastikan archivelog mode dan flashback database aktif:

    ARCHIVE LOG LIST;
    SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
    

    Jika archivelog mode dan flashback database nonaktif, aktifkan dengan perintah SQL berikut:

    1. Hentikan database cluster agar Anda dapat membuat perubahan yang diperlukan:

       srvctl stop database -d 
      
    2. Jalankan perintah SQL yang diperlukan untuk mengaktifkan archivelog mode dan flashback database:

       STARTUP MOUNT;
       ALTER DATABASE ARCHIVELOG;
       ALTER DATABASE FLASHBACK ON;
       ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SID='*' SCOPE=BOTH;
       ALTER DATABASE OPEN;
       SHUTDOWN IMMEDIATE;
       EXIT;
      
    3. Mulai ulang database cluster:

       srvctl start database -d DBDG_SITE1
      

Menyiapkan database untuk Data Guard

  1. Login ke server Solusi Bare Metal pertama yang menghosting database utama dan tetapkan variabel lingkungan ORACLE_SID agar Anda dapat terhubung ke database utama:

    source oraenv <<< "DBDG_SITE11"
    

    Anda akan menerima respons The Oracle base has been set to /apps/oracle/oracle_base.

  2. Mulai SQL*Plus, lalu ubah parameter inisialisasi database yang diperlukan untuk konfigurasi dan layanan Data Guard:

    sqlplus / as sysdba
    
    ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SID='*' SCOPE=BOTH;
    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*' SCOPE=BOTH;
    
  3. Periksa keberadaan log redo standby di database. Setiap thread harus memiliki satu grup log redo standby lebih banyak daripada jumlah grup log redo online.

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    Contoh berikut memiliki empat log redo online per thread, dan tidak membuat grup log redo standby. Karena ada empat grup log redo online, lima grup log redo standby harus dibuat untuk setiap thread:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    
  4. Jika ada cukup grup log redo standby, lewati langkah ini. Grup log pengulangan standby harus berukuran sama dengan setiap grup log pengulangan online. Buat jumlah grup log redo standby yang diperlukan dengan kode PL/SQL berikut:

    SET FEEDBACK OFF
    SET SERVEROUTPUT ON
    DECLARE
      CURSOR cur_thread IS
        SELECT THREAD# THREAD, COUNT(*) COUNT FROM V$LOG GROUP BY THREAD#;
      standbylog_count NUMBER := 0;
      standbylog_group NUMBER := 0;
      standbylog_size NUMBER := 0;
      last_group_number NUMBER;
      sqlstmt VARCHAR2(200);
    BEGIN
      SELECT MAX(GROUP#), MAX(BYTES)
    INTO last_group_number, standbylog_size
    FROM V$LOG;
      standbylog_group := last_group_number + 1;
      FOR rec_thread IN cur_thread LOOP
    standbylog_count := rec_thread.count + 1;
    FOR i IN 1..standbylog_count LOOP
      sqlstmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rec_thread.thread || ' GROUP ' || TO_CHAR(standbylog_group) || ' SIZE ' || standbylog_size || ';';
      DBMS_OUTPUT.PUT_LINE( sqlstmt);
      standbylog_group := standbylog_group + 1;
    END LOOP;
      END LOOP;
    END;
    /
    SET FEEDBACK ON
    

    Contoh output berikut akan meminta Anda membuat lima grup log redo standby untuk setiap dua thread:

    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP  9 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 14 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 15 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 16 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 17 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 18 SIZE 2147483648;
    
  5. Pastikan log redo standby disiapkan dengan benar untuk konfigurasi Anda:

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    Output berikut memiliki empat grup log redo online per thread dan lima grup log redo standby per thread:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    Standby logfile groups in thread 1: 5
    Standby logfile groups in thread 2: 5
    
  6. Keluar dari SQL*Plus:

    EXIT;
    

Menyalin file sandi dan parameter database ke server standby

  1. Buat file parameter database dan salin ke server standby:

    1. Buat folder untuk file parameter database standby (pfile):

      mkdir /home/oracle/backup
      
    2. Mulai SQL*Plus, lalu buat database standby pfile:

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. Keluar dari SQL*Plus, lalu salin pfile ke server Solusi Bare Metal pertama di lokasi standby:

      EXIT;
      
      scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
      
  2. Pastikan sandi login jarak jauh SYS disimpan dengan aman. Jika Anda tidak mengetahui sandinya, reset sandi.

  3. Salin file sandi ke cluster standby:

    1. Dapatkan lokasi file sandi menggunakan perintah srvctl:

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      Output berikut menunjukkan lokasi penyimpanan file sandi di ASM:

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. Buat salinan sementara file sandi di sistem file lokal dengan menggunakan perintah asmcmd:

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. Salin file sandi ke server Solusi Bare Metal pertama di lokasi siaga, lalu hapus salinan sementara dari server Solusi Bare Metal di lokasi utama:

      scp /tmp/orapwDBDG_SITE21 ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21
      rm /tmp/orapwDBDG_SITE21
      

Mengonfigurasi konektivitas database

Edit file $ORACLE_HOME/network/admin/tsnames.ora di setiap server Solusi Bare Metal di lokasi database utama untuk memperbarui konfigurasi layanan jaringan. Ada tiga entri dalam file; satu untuk setiap database, dan entri sementara yang digunakan selama duplikasi database yang akan Anda hapus nanti:

DBDG_SITE1 =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE1) (UR=A)
      )
  )

DBDG_SITE2 =
 (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE2) (UR=A)
      )
  )

DBDG_SITE2_FOR_DUPLICATION =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = site2db1)(PORT = 1523))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (INSTANCE_NAME = DBDG_SITE21) (UR=A)
      )
  )

Database utama kini siap digunakan dalam konfigurasi Data Guard.

Langkah berikutnya

Selanjutnya, buat database standby Data Guard.