Per utilizzare Oracle Direct NFS (dNFS) con un'appliance di backup/recupero, devono essere soddisfatti i seguenti requisiti:
Larghezza di banda di rete sufficiente tra il server di database e l'appliance di backup/ripristino
Utilizza tutte le patch Oracle obbligatorie o consigliate. Oracle gestisce un elenco di patch obbligatorie o consigliate nella documentazione dell'assistenza Oracle.
Configura la console di gestione per proteggere e montare database Oracle virtuali su dNFS
Per eseguire il backup basato su dNFS, devi impostare il formato del disco di staging dell'appliance di backup/recupero (preferenza disco) su NFS.
Per impostare il formato del disco di staging (preferenza del disco) su NFS, segui queste istruzioni:
Vai a Gestisci > Host.
Fai clic con il tasto destro del mouse sull'host e seleziona Modifica.
In Formato disco di staging, seleziona NFS e poi fai clic su Salva.
Azioni da eseguire sull'host di destinazione per il funzionamento di dNFS
Esegui queste azioni per assicurarti che dNFS sia configurato correttamente:
Controlla il seguente messaggio in DB Alert.log per verificare che dNFS sia abilitato:
Oracle instance running with ODM: Oracle Direct NFS ODM Library Version 3.01.
Se dNFS non è abilitato, attivalo:
I pacchetti client NFS devono esistere sull'host del database per i job di protezione e su qualsiasi host Oracle su cui potresti montare un database Oracle acquisito utilizzando dNFS. Ad esempio, per Linux, il pacchetto
nfs-util
deve esistere sull'host. Controlla quanto segue:rpm -qa |grep nfs-util
Attiva dNFS sull'host Oracle:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk dnfs_on
Riavvia i database in esecuzione su
ORACLE_HOME
, quindi controlla il seguente messaggio in DB Alert.log per verificare che dNFS sia abilitato:Istanza Oracle in esecuzione con ODM: Oracle Direct NFS ODM Library Version 3.0
Durante il job di backup, esegui la seguente query per controllare l'utilizzo di dNFS:
select * from gv$dnfs_servers;
Puoi visualizzare le statistiche Lettura/scrittura NFS per le operazioni di I/O in corso:
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;
Possiamo visualizzare le informazioni sul processo del canale 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;
Risolvere i problemi di dNFS: problemi del database
È incluso quanto segue:
Log avvisi
Il primo passo per qualsiasi operazione di debug è controllare il log degli avvisi per i messaggi correlati a dNFS. Un problema comune osservato sui database con dNFS riguarda la dimensione del buffer del socket limitata. Oracle tenta di regolare le dimensioni, ma ciò può essere limitato dal sistema operativo. In questo caso, nel log degli avvisi viene rilevato un errore simile al seguente:
Direct NFS: Failed to set socket buffer size.wtmax=[1048576]\
rtmax=[1048576], errno=-1
Altri elementi da cercare nel log degli avvisi includono la verifica che le schede di rete corrette vengano utilizzate per comunicare con il filer. Puoi determinarlo cercando un messaggio simile al seguente:
Direct NFS: channel id [0] path [192.168.56.3] to filer [192.168.56.3] via local [] is UP
File di traccia del database
Se si verificano problemi di I/O, è possibile impostare i seguenti eventi nel database per acquisire informazioni di logging aggiuntive. Imposta questi eventi, attendi che si verifichi l'incidente e poi esaminali per tracciare i 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
Il database non risponde
Se un database in esecuzione su dNFS non risponde, accedi come SYSDBA utilizzando sqlplus ed esegui un'analisi di blocco o un dump:
```oradebug
oradebug setmypid
oradebug unlimited
oradebug hanganalyze 3
oradebug dump systemstate 266
```
Se il database è un database RAC, aggiungi un'opzione -g agli ultimi due comandi oradebug.
visualizzazioni dNFS
Il client dNFS si trova effettivamente nel kernel del database. Pertanto, nel database esistono diverse viste v$ per monitorare e controllare l'integrità di dNFS dall'interno del database. Oracle fornisce un pacchetto che può essere utilizzato per monitorare rapidamente le prestazioni di dNFS. Questo pacchetto si trova nel pacchetto di monitoraggio dNFS di Oracle.
Una volta eseguito il deployment, un DBA può eseguire le seguenti operazioni per ottenere informazioni (parametri: dnfs_monitor(sleep time), dnfs_itermonitor (sleep time,number of times to check), sleep time è in secondi):
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
Le visualizzazioni V$ sono:
V$DNFS_SERVER: mostra le informazioni per tutte le connessioni al server NFS (una per ogni server NFS). La visualizzazione è utile per verificare la connettività e le impostazioni dei socket TCP.
V$DNFS_CHANNELS: mostra informazioni per tutti i percorsi di rete creati per i server NFS. Ogni client dNFS crea un canale per processo per percorso di rete. Se esistono più percorsi (più NIC), il client dNFS distribuisce il carico su tutti i canali. I dati riflettono l'attività dall'ultima selezione.
V$DNFS_FILES: mostra i file aperti utilizzando il client dNFS.
V$DNFS_STAT: metriche sul rendimento per il client dNFS.
Colonna | Descrizione |
---|---|
SRVNAME
|
Nome server NFS |
DIRNAME
|
Volume esportato dal server NFS |
MNTPORT
|
Porta di montaggio locale |
NFSPORT
|
Porta del server NFS |
WTMAX
|
Dimensione massima di scrittura per il server NFS |
RTMAX
|
Dimensione massima di lettura per il server NFS |
Colonna | Descrizione |
---|---|
PNUM
|
Numero di processo Oracle (link al PID in v$process) |
SVRNAME
|
Nome del server NFS |
PATH
|
Percorso di rete del server |
CH_ID
|
ID canale dNFS |
SVR_ID
|
ID server dNFS |
SENDS
|
Invia operazioni sul canale dall'ultima selezione. |
RECVS
|
Ricevi operazioni sul canale dall'ultima selezione. |
PINGS
|
Operazioni di ping sul canale dall'ultima selezione. |
Colonna | Descrizione |
---|---|
FILENAME
|
Nome del file. |
FILESIZE
|
Dimensioni del file. |
PNUM
|
ID processo (link al PID in v$process) |
SRV_ID
|
ID server NFS |
Colonna | Descrizione |
---|---|
PNUM
|
Numero di processo Oracle (link al PID in v$process )
|
NFS_NULL
|
Null operations
|
NFS_GETATTR
|
Ottieni operazioni sugli attributi |
NFS_SETATTR
|
Impostare le operazioni sugli attributi |
NFS_LOOKUP
|
Operazioni di ricerca |
NFS_ACCESS
|
Operazioni di accesso |
NFS_READLINK
|
Operazioni di lettura dei link |
NFS_READ
|
Operazioni di lettura |
NFS_WRITE
|
Operazioni di scrittura |
NFS_CREATE
|
Operazioni create |
NFS_MKDIR
|
Esegui operazioni di directory |
NFS_MKNOD
|
Eseguire operazioni sui nodi |
NFS_SYMLINK
|
Operazioni sui link simbolici |
NFS_REMOVE
|
Rimuovere le operazioni |
NFS_RMDIR
|
Rimuovere le operazioni di directory |
NFS_RENAME
|
Operazioni di ridenominazione |
NFS_LINK
|
Operazioni sui link |
NFS_READDIR
|
Operazioni di lettura della directory |
NFS_READDIRPLUS
|
Read directory plus operations |
NFS_FSSTAT
|
Operazione di stato del file system |
NFS_FSINFO
|
Operazioni di informazione sul file system |
NFS_PATHCONF
|
Operazioni di configurazione del percorso |
NFS_COMMIT
|
Operazioni di commit |
NFS_MOUNT
|
Operazioni di montaggio |
Pacchetto di monitoraggio Oracle dNFS
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;
Guida per l'amministratore del database Oracle
- Backup e RE per i database Oracle
- Prerequisiti per la protezione di un database Oracle
- Patch Oracle e problemi noti
- Preparare i database Oracle per la protezione
- Scopri e proteggi un database Oracle
- Dettagli e impostazioni per i database Oracle
- Utilizzare dNFS con Backup e DR
- Proteggere un database Oracle rilevato
- Montare un database Oracle come montaggio standard
- Crea una copia virtuale istantanea di un database Oracle
- Ripristinare e recuperare un database Oracle
- Ripristino immediato di un database Oracle utilizzando Mount and Migrate
- Provisiona un ambiente con un workflow Backup e DR