Untuk menggunakan Oracle Direct NFS (dNFS) dengan alat pencadangan/pemulihan, persyaratan berikut harus dipenuhi:
Bandwidth jaringan yang memadai antara server database dan alat pencadangan/pemulihan
Gunakan semua patch yang diperlukan atau direkomendasikan Oracle. Oracle mengelola daftar patch yang diperlukan atau direkomendasikan dalam dokumentasi Dukungan Oracle.
Mengonfigurasi konsol pengelolaan untuk melindungi dan memasang database Oracle virtual melalui dNFS
Untuk melakukan pencadangan berbasis dNFS, Anda harus menyetel format disk penahapan alat pencadangan/pemulihan (preferensi disk) ke NFS.
Gunakan petunjuk ini untuk menyetel format disk penyiapan (preferensi disk) ke NFS:
Buka Kelola > Host.
Klik kanan host, lalu pilih Edit.
Pada format disk penyiapan, pilih NFS, lalu klik Simpan.
Tindakan yang harus dilakukan di host target agar dNFS berfungsi
Lakukan tindakan berikut untuk memastikan dNFS dikonfigurasi dengan benar:
Periksa pesan berikut di bagian DB Alert.log untuk mengonfirmasi bahwa dNFS diaktifkan:
Oracle instance running with ODM: Oracle Direct NFS ODM Library Version 3.01.
Jika dNFS belum diaktifkan, aktifkan:
Paket klien NFS harus ada di host database untuk tugas perlindungan, dan di host Oracle tempat Anda dapat memasang database Oracle yang diambil menggunakan dNFS. Misalnya, untuk Linux, paket
nfs-util
harus ada di host. Periksa hal-hal berikut:rpm -qa |grep nfs-util
Aktifkan dNFS di host Oracle:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk dnfs_on
Mulai ulang database yang berjalan di
ORACLE_HOME
tersebut, lalu periksa pesan berikut di bagian DB Alert.log untuk mengonfirmasi bahwa dNFS diaktifkan:Instance Oracle yang berjalan dengan ODM: Oracle Direct NFS ODM Library Version 3.0
Selama tugas pencadangan, jalankan kueri berikut untuk memeriksa penggunaan dNFS:
select * from gv$dnfs_servers;
Anda dapat melihat statistik baca/tulis NFS untuk I/O yang sedang terjadi:
select inst_id, PNUM, NFS_READ, NFS_WRITE, NFS_COMMIT, NFS_MOUNT from gv$dnfs_stats where NFS_READ>0 or NFS_WRITE>0 order by inst_id, PNUM;
Kita dapat melihat informasi proses channel dnfs.
select c.inst_id, program, pid,pname, local, path from gv$process p, gv$dnfs_channels c where p.inst_id = c.inst_id and c.pnum = p.pid;
Memecahkan masalah dNFS: Masalah database
Hal ini mencakup:
Log notifikasi
Langkah pertama untuk setiap operasi debug adalah memeriksa log pemberitahuan untuk pesan terkait dNFS. Masalah umum yang diamati pada database dengan dNFS adalah ukuran buffer soket yang terbatas. Oracle mencoba menyesuaikan ukuran, tetapi hal ini dapat dibatasi oleh O/S. Dalam hal ini, error seperti ini ditemukan di log pemberitahuan:
Direct NFS: Failed to set socket buffer size.wtmax=[1048576]\
rtmax=[1048576], errno=-1
Item lain yang harus dicari dalam log pemberitahuan mencakup apakah kartu jaringan yang benar digunakan untuk berkomunikasi dengan filer. Hal ini dapat ditentukan dengan mencari pesan yang mirip dengan berikut ini:
Direct NFS: channel id [0] path [192.168.56.3] to filer [192.168.56.3] via local [] is UP
File rekaman aktivitas database
Jika masalah I/O terjadi, peristiwa berikut dapat ditetapkan dalam database untuk merekam informasi logging tambahan. Tetapkan peristiwa ini, tunggu hingga insiden terjadi, lalu tinjau untuk melacak file.
ALTER SYSTEM SET MAX_DUMP_FILE_SIZE =UNLIMITED;
ALTER SYSTEM SET EVENTS '10298 trace name context forever, level 1'; # KSFD I/O tracing
ALTER SYSTEM SET EVENTS '19392 trace name context forever, level 8'; # kgnfs tracing
ALTER SYSTEM SET EVENTS '19394 trace name context forever, level 8'; # skgnfs tracing
ALTER SYSTEM SET EVENTS '19396 trace name context forever, level 6'; # kgodm tracing
ALTER SYSTEM SET EVENTS '19398 trace name context forever, level 128'; # mount tracing errors
Database tidak merespons
Jika database yang berjalan di dNFS tidak merespons, login sebagai SYSDBA menggunakan sqlplus dan lakukan 'hanganalyze' atau dump:
```oradebug
oradebug setmypid
oradebug unlimited
oradebug hanganalyze 3
oradebug dump systemstate 266
```
Jika database adalah database RAC, tambahkan opsi -g ke dua perintah oradebug terakhir.
Tampilan dNFS
Klien dNFS sebenarnya ada di kernel database. Oleh karena itu, ada beberapa tampilan v$ dalam database untuk memantau dan memeriksa kondisi dNFS dari dalam database. Oracle menyediakan paket yang dapat digunakan untuk memantau performa dNFS dengan cepat. Paket ini ada di paket monitor dNFS Oracle.
Setelah di-deploy, DBA dapat melakukan hal berikut untuk mendapatkan informasi (parameter: dnfs_monitor(waktu tidur), dnfs_itermonitor (waktu tidur,jumlah waktu untuk memeriksa), waktu tidur dalam detik):
SQL> set serveroutput on
SQL> set lines 200
SQL> exec dnfs_monitor(60);
Started at 01/18/2017 10:09:46 AM
Finished at 01/18/2017 10:10:46 AM
READ IOPS: 2
WRITE IOPS: 3
TOTAL IOPS: 5
READ Throughput: 0 MB/s
WRITE Throughput: 0 MB/s
TOTAL Throughput: 0 MB/s
SQL> exec dnfs_itermonitor(2,10)
Started at 01/18/2017 10:20:18 AM
TIMESTAMP READ IOPS WRITE IOPS TOTAL IOPS READ(MB/s) WRITE (MB/s) TOTAL (MB/s)
01/18/2017 10:20:20 AM 15 7 22 0 0 0
01/18/2017 10:20:22 AM 2 3 5 0 0 0
01/18/2017 10:20:24 AM 0 3 3 0 0 0
01/18/2017 10:20:26 AM 2 2 4 0 0 0
01/18/2017 10:20:28 AM 0 3 3 0 0 0
01/18/2017 10:20:30 AM 2 3 5 0 0 0
01/18/2017 10:20:32 AM 4 3 7 0 0 0
01/18/2017 10:20:34 AM 0 3 3 0 0 0
01/18/2017 10:20:36 AM 2 3 5 0 0 0
01/18/2017 10:20:38 AM 2 3 5 0 0 0
Finished at 01/18/2017 10:20:38 AM
Tampilan V$ adalah:
V$DNFS_SERVER: Menampilkan informasi untuk semua koneksi server NFS (satu untuk setiap server NFS). Tampilan ini berguna untuk memverifikasi konektivitas dan setelan soket TCP.
V$DNFS_CHANNELS: Menampilkan informasi untuk semua jalur jaringan yang dibuat ke server NFS. Setiap klien dNFS membuat satu saluran per proses per jalur jaringan. Jika ada beberapa jalur (beberapa NIC), klien dNFS akan melakukan load balancing di semua saluran. Data mencerminkan aktivitas sejak pemilihan terakhir.
V$DNFS_FILES: Menampilkan file yang dibuka menggunakan klien dNFS.
V$DNFS_STAT: Metrik performa untuk klien dNFS.
Kolom | Deskripsi |
---|---|
SRVNAME
|
Nama Server NFS |
DIRNAME
|
Volume yang diekspor oleh server NFS |
MNTPORT
|
Port pemasangan lokal |
NFSPORT
|
Port server NFS |
WTMAX
|
Ukuran tulis maksimum untuk server NFS |
RTMAX
|
Ukuran baca maksimum untuk server NFS |
Kolom | Deskripsi |
---|---|
PNUM
|
Nomor proses Oracle (ditautkan ke PID di v$process) |
SVRNAME
|
Nama server NFS |
PATH
|
Jalur jaringan ke server |
CH_ID
|
ID channel dNFS |
SVR_ID
|
ID server dNFS |
SENDS
|
Mengirim operasi melalui saluran sejak terakhir dipilih. |
RECVS
|
Menerima operasi melalui saluran sejak terakhir dipilih. |
PINGS
|
Operasi ping melalui saluran sejak terakhir dipilih. |
Kolom | Deskripsi |
---|---|
FILENAME
|
Nama file. |
FILESIZE
|
Ukuran file. |
PNUM
|
ID Proses (ditautkan ke PID di v$process) |
SRV_ID
|
ID server NFS |
Kolom | Deskripsi |
---|---|
PNUM
|
Nomor proses Oracle (ditautkan ke PID di v$process )
|
NFS_NULL
|
Null operations
|
NFS_GETATTR
|
Mendapatkan operasi atribut |
NFS_SETATTR
|
Tetapkan operasi atribut |
NFS_LOOKUP
|
Operasi pencarian |
NFS_ACCESS
|
Operasi akses |
NFS_READLINK
|
Membaca operasi link |
NFS_READ
|
Operasi baca |
NFS_WRITE
|
Operasi tulis |
NFS_CREATE
|
Membuat operasi |
NFS_MKDIR
|
Melakukan operasi direktori |
NFS_MKNOD
|
Membuat operasi node |
NFS_SYMLINK
|
Operasi link simbolis |
NFS_REMOVE
|
Menghapus operasi |
NFS_RMDIR
|
Menghapus operasi direktori |
NFS_RENAME
|
Mengganti nama operasi |
NFS_LINK
|
Operasi link |
NFS_READDIR
|
Operasi baca direktori |
NFS_READDIRPLUS
|
Operasi baca dan plus direktori |
NFS_FSSTAT
|
Operasi status sistem file |
NFS_FSINFO
|
Operasi informasi sistem file |
NFS_PATHCONF
|
Operasi konfigurasi jalur |
NFS_COMMIT
|
Operasi commit |
NFS_MOUNT
|
Operasi pemasangan |
Paket monitor dNFS Oracle
CREATE OR REPLACE PROCEDURE dnfs_monitor
(sleepSecs IN NUMBER)
IS
startTime DATE;
startReadIOPS NUMBER;
startWriteIOPS NUMBER;
startReadBytes NUMBER;
startWriteBytes NUMBER;
endTime DATE;
endReadIOPS NUMBER;
endWriteIOPS NUMBER;
endReadBytes NUMBER;
endWriteBytes NUMBER;
readThr NUMBER;
writeThr NUMBER;
readIOPS NUMBER;
writeIOPS NUMBER;
elapsedTime NUMBER;
BEGIN
SELECT sysdate, SUM(stats.nfs_readbytes), SUM(stats.nfs_writebytes),
SUM(stats.nfs_read), SUM(stats.nfs_write)
INTO startTime, startReadBytes, startWriteBytes, startReadIOPS, startWriteIOPS
FROM dual, v$dnfs_stats stats;
DBMS_OUTPUT.PUT_LINE('Started at ' || TO_CHAR(startTime,'MM/DD/YYYY HH:MI:SS AM'));
DBMS_LOCK.SLEEP(sleepSecs);
SELECT sysdate, SUM(stats.nfs_readbytes), SUM(stats.nfs_writebytes), SUM(stats.nfs_read), SUM(stats.nfs_write)
INTO endTime, endReadBytes, endWriteBytes, endReadIOPS, endWriteIOPS
FROM dual, v$dnfs_stats stats;
DBMS_OUTPUT.PUT_LINE('Finished at ' || to_char(endTime,'MM/DD/YYYY HH:MI:SS AM'));
elapsedTime := (endTime - startTime) * 86400;
readThr := (endReadBytes - startReadBytes)/(1024 * 1024 * elapsedTime);
writeThr := (endWriteBytes - startWriteBytes)/(1024 * 1024 * elapsedTime);
readIOPS := (endReadIOPS - startReadIOPS)/elapsedTime;
writeIOPS := (endWriteIOPS - startWriteIOPS)/elapsedTime;
DBMS_OUTPUT.PUT_LINE('READ IOPS: ' || LPAD(TO_CHAR(readIOPS, '999999999'), 10, ' '));
DBMS_OUTPUT.PUT_LINE('WRITE IOPS: ' || LPAD(TO_CHAR(writeIOPS,
'999999999'), 10, ' '));
DBMS_OUTPUT.PUT_LINE('TOTAL IOPS: ' || LPAD(TO_CHAR(readIOPS + writeIOPS, '999999999'), 10, ' '));
DBMS_OUTPUT.PUT_LINE('READ Throughput: ' || LPAD(TO_CHAR(readThr, '999999999'), 10, ' ') || ' MB/s');
DBMS_OUTPUT.PUT_LINE('WRITE Throughput: ' || LPAD(TO_CHAR(writeThr,
'999999999'), 10, ' ') || ' MB/s');
DBMS_OUTPUT.PUT_LINE('TOTAL Throughput: ' || LPAD(TO_CHAR(readThr + writeThr, '999999999'), 10, ' ') || ' MB/s');
END;
/
CREATE OR REPLACE PROCEDURE dnfs_itermonitor
(sleepSecs IN NUMBER,
iter IN NUMBER)
IS
startTime DATE;
startReadIOPS NUMBER;
startWriteIOPS NUMBER;
startReadBytes NUMBER;
startWriteBytes NUMBER;
endTime DATE;
endReadIOPS NUMBER;
endWriteIOPS NUMBER;
endReadBytes NUMBER;
endWriteBytes NUMBER;
readThr NUMBER;
writeThr NUMBER;
readIOPS NUMBER;
writeIOPS NUMBER;
i NUMBER;
elapsedTime NUMBER;
BEGIN
DBMS_OUTPUT.PUT_LINE('Started at ' || TO_CHAR(SYSDATE, 'MM/DD/YYYY HH:MI:SS AM'));
DBMS_OUTPUT.PUT_LINE(
LPAD('TIMESTAMP', 15, ' ')||
LPAD('READ IOPS', 33, ' ')||
LPAD('WRITE IOPS', 15, ' ')||
LPAD('TOTAL IOPS', 15, ' ')||
LPAD('READ (MB/s)', 15, ' ')||
LPAD('WRITE (MB/s)', 15, ' ')||
LPAD('TOTAL (MB/s)', 15, ' '));
FOR i IN 1..iter
LOOP
SELECT sysdate, SUM(stats.nfs_readbytes), SUM(stats.nfs_writebytes), SUM(stats.nfs_read), SUM(stats.nfs_write)
INTO startTime, startReadBytes, startWriteBytes, startReadIOPS, startWriteIOPS
FROM dual, v$dnfs_stats stats;
DBMS_LOCK.SLEEP(sleepSecs);
SELECT sysdate, SUM(stats.nfs_readbytes), SUM(stats.nfs_writebytes), SUM(stats.nfs_read), SUM(stats.nfs_write)
INTO endTime, endReadBytes, endWriteBytes, endReadIOPS, endWriteIOPS
FROM dual, v$dnfs_stats stats;
elapsedTime := (endTime - startTime) * 86400;
readThr := (endReadBytes-startReadBytes)/(1024 * 1024 * elapsedTime);
writeThr := (endWriteBytes-startWriteBytes)/(1024 * 1024 * elapsedTime);
readIOPS := (endReadIOPS - startReadIOPS)/elapsedTime;
writeIOPS := (endWriteIOPS - startWriteIOPS)/elapsedTime;
DBMS_OUTPUT.PUT_LINE(
TO_CHAR(endTime, 'MM/DD/YYYY HH:MI:SS AM')||
LPAD(TO_CHAR(readIOPS, '999999999'), 15, '') ||
LPAD(TO_CHAR(writeIOPS, '999999999'), 15,' ') ||
LPAD(TO_CHAR(readIOPS + writeIOPS, '999999999'),15, ' ') ||
LPAD(TO_CHAR(readThr, '999999999'), 15, '') ||LPAD(TO_CHAR(writeThr, '999999999'), 15, '
') ||
LPAD(TO_CHAR(readThr + writeThr, '999999999'), 15, ' '));
END LOOP;
DBMS_OUTPUT.PUT_LINE('Finished at ' || to_char(endTime, 'MM/DD/YYYY HH:MI:SS AM'));
END;
Panduan DBA Oracle
- Backup and DR untuk database Oracle
- Prasyarat untuk melindungi database Oracle
- Patch Oracle dan masalah umum
- Menyiapkan database Oracle untuk perlindungan
- Menemukan dan melindungi database Oracle
- Detail dan setelan untuk database Oracle
- Menggunakan dNFS dengan Backup and DR
- Melindungi database Oracle yang ditemukan
- Memasang database Oracle sebagai pemasangan standar
- Membuat salinan virtual instan database Oracle
- Memulihkan dan memulihkan database Oracle
- Pemulihan instan database Oracle menggunakan Mount and Migrate
- Menyediakan lingkungan dengan alur kerja Backup and DR