Para usar o Oracle Direct NFS (dNFS) com um appliance de backup/recuperação, é necessário atender aos seguintes requisitos:
Largura de banda de rede suficiente entre o servidor de banco de dados e o dispositivo de backup/recuperação
Use todos os patches obrigatórios ou recomendados da Oracle. A Oracle mantém uma lista de patches obrigatórios ou recomendados na documentação de suporte da Oracle.
Configurar o console de gerenciamento para proteger e montar bancos de dados virtuais do Oracle pelo dNFS
Para fazer backup com o dNFS, defina o formato de disco de preparo do dispositivo de backup/recuperação (preferência de disco) como NFS.
Use estas instruções para definir o formato do disco de preparação (preferência de disco) como NFS:
Acesse Gerenciar > Hosts.
Clique com o botão direito do mouse no host e selecione Edit.
Em Como preparar o formato do disco, selecione NFS e clique em Salvar.
Ações a serem realizadas no host de destino para que o dNFS funcione
Execute estas ações para garantir que o dNFS esteja configurado corretamente:
Verifique a seguinte mensagem em DB Alert.log para confirmar se o dNFS está ativado:
Oracle instance running with ODM: Oracle Direct NFS ODM Library Version 3.01.
Se o dNFS não estiver ativado, faça o seguinte:
Os pacotes de cliente NFS precisam existir no host do banco de dados para jobs de proteção e em qualquer host Oracle em que você possa montar um banco de dados Oracle capturado usando o dNFS. Por exemplo, no Linux, o pacote
nfs-util
precisa existir no host. Verifique o seguinte:rpm -qa |grep nfs-util
Ative o dNFS no host Oracle:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk dnfs_on
Reinicie os bancos de dados em execução nesse
ORACLE_HOME
e verifique a seguinte mensagem em DB Alert.log para confirmar se o dNFS está ativado:Instância do Oracle em execução com ODM: Oracle Direct NFS ODM Library Version 3.0
Durante o job de backup, execute a consulta a seguir para verificar o uso do dNFS:
select * from gv$dnfs_servers;
Confira as estatísticas de leitura/gravação do NFS para a E/S em andamento:
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;
Podemos ver as informações do processo do canal de 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;
Resolver problemas de dNFS: problemas de banco de dados
Isso inclui:
Registro de alertas
A primeira etapa de qualquer operação de depuração é verificar o registro de alertas em busca de mensagens relacionadas ao dNFS. Um problema comum observado em bancos de dados com dNFS é o tamanho do buffer de soquete limitado. O Oracle tenta ajustar o tamanho, mas isso pode ser limitado pelo SO. Nesse caso, um erro como este é encontrado no registro de alertas:
Direct NFS: Failed to set socket buffer size.wtmax=[1048576]\
rtmax=[1048576], errno=-1
Outros itens a serem procurados no registro de alertas incluem se as placas de rede corretas estão sendo usadas para se comunicar com o arquivador. Isso pode ser determinado procurando uma mensagem semelhante a esta:
Direct NFS: channel id [0] path [192.168.56.3] to filer [192.168.56.3] via local [] is UP
Arquivos de rastreamento do banco de dados
Se houver problemas de E/S, os eventos a seguir poderão ser definidos no banco de dados para capturar outras informações de registro. Defina esses eventos, aguarde o incidente ocorrer e analise os arquivos de rastreamento.
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
O banco de dados não está respondendo
Se um banco de dados em execução no dNFS não estiver respondendo, faça login como SYSDBA usando o sqlplus e execute um "hanganalyze" ou um dump:
```oradebug
oradebug setmypid
oradebug unlimited
oradebug hanganalyze 3
oradebug dump systemstate 266
```
Se o banco de dados for um banco de dados RAC, adicione uma opção -g aos dois últimos comandos oradebug.
Visualizações de dNFS
O cliente dNFS está no kernel do banco de dados. Portanto, várias visualizações v$ existem no banco de dados para monitorar e verificar a integridade do dNFS. O Oracle fornece um pacote que pode ser usado para monitorar rapidamente a performance do dNFS. Esse pacote está no pacote de monitoramento dNFS do Oracle.
Após a implantação, um DBA pode executar as seguintes ações para receber informações (parâmetros: dnfs_monitor(sleep time), dnfs_itermonitor (sleep time,number of times to check), sleep time is in seconds):
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
As visualizações de V$ são:
V$DNFS_SERVER: mostra informações para todas as conexões do servidor NFS (uma para cada servidor NFS). A visualização é útil para verificar a conectividade e as configurações do soquete TCP.
V$DNFS_CHANNELS: mostra informações de todos os caminhos de rede criados para os servidores NFS. Cada cliente dNFS cria um canal por processo por caminho de rede. Se houver vários caminhos (várias NICs), o cliente dNFS vai fazer o balanceamento de carga em todos os canais. Os dados refletem a atividade desde a última seleção.
V$DNFS_FILES: mostra os arquivos abertos usando o cliente dNFS.
V$DNFS_STAT: métricas de desempenho para o cliente dNFS.
Coluna | Descrição |
---|---|
SRVNAME
|
Nome do servidor NFS |
DIRNAME
|
Volume exportado pelo servidor NFS |
MNTPORT
|
Porta de montagem local |
NFSPORT
|
Porta do servidor NFS |
WTMAX
|
Tamanho máximo de gravação para o servidor NFS |
RTMAX
|
Tamanho máximo de leitura para o servidor NFS |
Coluna | Descrição |
---|---|
PNUM
|
Número do processo do Oracle (link para o PID em v$process) |
SVRNAME
|
Nome do servidor NFS |
PATH
|
Caminho de rede para o servidor |
CH_ID
|
ID do canal dNFS |
SVR_ID
|
ID do servidor dNFS |
SENDS
|
Enviar operações pelo canal desde a última seleção. |
RECVS
|
Receber operações pelo canal desde a última seleção. |
PINGS
|
Operações de ping no canal desde a última seleção. |
Coluna | Descrição |
---|---|
FILENAME
|
Nome do arquivo. |
FILESIZE
|
Tamanho do arquivo. |
PNUM
|
ID do processo (link para o PID em v$process) |
SRV_ID
|
ID do servidor NFS |
Coluna | Descrição |
---|---|
PNUM
|
Número do processo do Oracle (link para o PID em v$process )
|
NFS_NULL
|
Null operations
|
NFS_GETATTR
|
Acessar operações de atributos |
NFS_SETATTR
|
Definir operações de atributo |
NFS_LOOKUP
|
Operações de pesquisa |
NFS_ACCESS
|
Operações de acesso |
NFS_READLINK
|
Ler operações de link |
NFS_READ
|
Operações de leitura |
NFS_WRITE
|
Operações de gravação |
NFS_CREATE
|
Criar operações |
NFS_MKDIR
|
Fazer operações de diretório |
NFS_MKNOD
|
Fazer operações de nó |
NFS_SYMLINK
|
Operações de link simbólico |
NFS_REMOVE
|
Remover operações |
NFS_RMDIR
|
Remover operações de diretório |
NFS_RENAME
|
Renomear operações |
NFS_LINK
|
Operações de vinculação |
NFS_READDIR
|
Operações de leitura de diretório |
NFS_READDIRPLUS
|
Operações de leitura de diretório e mais |
NFS_FSSTAT
|
Operação de status do sistema de arquivos |
NFS_FSINFO
|
Operações de informações do sistema de arquivos |
NFS_PATHCONF
|
Operações de configuração de caminho |
NFS_COMMIT
|
Confirmar operações |
NFS_MOUNT
|
Operações de montagem |
O pacote de monitoramento dNFS do 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;
Guia do DBA do Oracle
Criar uma cópia virtual instantânea de um banco de dados Oracle
Recuperação instantânea de um banco de dados Oracle usando o Mount and Migrate
Provisionar um ambiente com um fluxo de trabalho de backup e DR