Quando configuramos o Data Guard, habilitamos o registro forçado. Se configurarmos a replicação manual (via rsync e catalogação dos arquivos no destino + recuperação do banco de dados), precisaremos ativar o log forçado também?
Harry's questions
Meu banco de dados estava no estado de montagem e realizamos um backup do banco de dados.
backup database format '/backup/db_full%U.bkp';
Então, ao restaurá-lo, não posso simplesmente usar:
Restore database;
alter database open;
Isto mostra
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '+DATA/orcl/datafile/system.257.1161421855'
Por que ainda preciso recuperar o banco de dados? Eu sei que quando o banco de dados está aberto e realizamos algum backup, devemos recuperar porque o backup estava inconsistente, mas neste caso o banco de dados estava em estado de montagem quando o backup foi realizado. Não quero recuperar porque não quero aplicar todas as alterações após o backup.
Editar: encontrei a opção de backup "consistente" na documentação do Oracle 19c.
backup consistent database format '/backup/db_full%U.bkp';
mas ainda solicita a recuperação (e o backup foi executado no estado de montagem).
Configurei um Wal Shipping (standby) no postgresql como:
No mestre, habilitei archive_mode = on
, archive_command
para um local compartilhado entre mestre e escravo e archive_timeout
.
No escravo, configurei Restore_command
para recuperar esses arquivos wal do local compartilhado e criei um standby.signal
arquivo.
Mas como monitorar via SQL se o escravo está sincronizado e aplicando esses logs?
Eu sei que na replicação de streaming podemos:
-- on master
select * from pg_stat_replication;
-- On replica
select * from pg_stat_wal_receiver;
Mas e uma replicação manual usando o wal Shipping?
Se eu restaurar um backup do mysqldump e precisar recuperar as outras transações nos logs binários, devo iniciar a recuperação a partir do horário de início do dump (quando o backup foi iniciado) ou do horário de término do dump (quando o backup terminou)?
mysqlbinlog --start-datetime=?? /backup/mysql-bin.0*
Vi que a última linha do dump contém o tempo de conclusão. Devo usá-lo para iniciar a recuperação?
...
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-12-22 12:24:27
Mas não há hora de início no despejo. Se eu precisar me recuperar desde o início, como saber a hora?
Além disso, podemos recuperar apenas um único banco de dados (já que os logs binários alteram todos os bancos de dados)?
Por exemplo, precisei criar um diretório chamado ‘backup’ dentro do datadir
(temporariamente) para armazenar um arquivo de backup, mas percebi que o MySQL interpreta esse diretório como um banco de dados dentro do MySQL. Isso é seguro? É possível criar um diretório dentro do datadir
MySQL sem pensar que é um banco de dados?"
Meu servidor MySQL possui os seguintes parâmetros configurados corretamente
mysql> show global variables like '%have_ssl%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl | YES |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'ssl_ca';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| ssl_ca | ca.pem |
+---------------+--------+
1 row in set (0.00 sec)
mysql> show global variables like 'ssl_cert';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| ssl_cert | server-cert.pem |
+---------------+-----------------+
1 row in set (0.00 sec)
mysql> show global variables like 'ssl_key';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| ssl_key | server-key.pem |
+---------------+----------------+
1 row in set (0.00 sec)
mysql> show global variables like 'datadir';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| datadir | /dados/ |
+---------------+---------+
1 row in set (0.00 sec)
E esses arquivos existem emdatadir
[root@mysqlen1 dados]# ls -l ca.pem server-cert.pem server-key.pem
-rw-r--r-- 1 mysql mysql 1112 Nov 3 10:28 ca.pem
-rw-r--r-- 1 mysql mysql 1112 Nov 3 10:28 server-cert.pem
-rw------- 1 mysql mysql 1680 Nov 3 10:28 server-key.pem
Então eu crio um usuário:
mysql> create user 'teste'@'%' identified by 'teste123' require ssl;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
Posso me conectar usando os certificados
[root@TCCPUC-ENGDADOS:~]# mysql -uteste -p'teste123' -h 192.168.0.110 --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Mas sem os certificados também
[root@TCCPUC-ENGDADOS:~]# mysql -uteste -p'teste123' -h 192.168.0.110
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Isso está correto? Posso forçar o usuário a fazer login apenas com esses certificados?
Qual é a diferença entre instalar o MySQL a partir de binários genéricos e a partir do código-fonte (compilá-lo no kernel)? Existem diferenças em um ambiente produtivo?
Existe uma visualização na qual eu possa verificar isso? Preciso criar um script utilizando a SUBSTR
função by /
(Linux) ou \
(Windows).
SUBSTR('anything', 1, INSTR('anything', '/', 1, 1)) -- Linux
SUBSTR('anything', 1, INSTR('anything', '\\', 1, 1)) -- Windows
Existe uma maneira de montar o DBFS no lado do cliente ou ele só pode ser montado no lado do servidor de banco de dados?
Procurei o dbfs_client
binário no Oracle Instant Client
zip, mas parece que tal binário não existe. O DBFS só pode ser montado no servidor de banco de dados? Por que tantas referências dizem que é como um nfs
? nfs
pode ser montado em qualquer máquina cliente.
Como listar parâmetros não padrão no MySQL?
Estou procurando algo como \dconfig+
depostgresql
Gostaria de corromper uma página de qualquer tabela do banco de dados AdventureWorks . Como fazer isso?
Gostaria de testar a restauração no nível da página e também colocar um banco de dados suspeito on-line novamente usando dbcc checkdb
Preciso executar o --prepare
backup imediatamente após o xtrabackup para tornar o backup consistente ou posso executar esta etapa apenas quando estiver restaurando o banco de dados? Por exemplo, executando --prepare
3 semanas depois do backup, antes de executar a restauração.
Se eu também estiver usando backups incrementais, preciso executá-los --prepare
adicionalmente --apply-log-only
(juntos) ou devo executar primeiro --prepare
e depois --prepare --apply-log-only
evitar a fase de reversão?
IE: Se também tiver backups incrementais, devo fazê-lo?
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental1_backup/
xtrabackup --prepare --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental2_backup/
ou
xtrabackup --prepare --target-dir=/backup/FULL_backup/
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental1_backup/
xtrabackup --prepare --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental2_backup/
Não consigo obter um novo disco no momento e gostaria de saber se é possível compartilhar um disco entre dois grupos de discos.
Eu tenho um diskgroup FRA com um disco de 200gb e preciso adicionar 100gb no diskgroup DATA.
Limitei o disco FRA a 100g:
alter diskgroup FRA resize all size 100g;
Então, o espaço livre seria alocado em outro diskgroup (DATA). Existe uma maneira de fazer isso no ASM? Eu tentei no meu laboratório, mas recebo o erro:
alter diskgroup DATA add disk 'ORCL:DATA_STB3' size 100g;
(ORCL:DATA_STB3 é o disco onde agora tenho 100gb livres).
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15029: disk 'ORCL:DATA_STB3' is already mounted by this instance
Se não for possível, por que podemos limitar o tamanho do disco ASM? em que situação esse comando é útil?
Digamos que fazemos um backup incremental completo nível 0 (backup completo do banco de dados) e, por algum motivo, precisamos excluir alguns logs de arquivo (gerados após o backup completo do banco de dados) e, em seguida, executar um backup incremental nível 1 (backup incremental). Esse backup incremental ficará bem sem os logs de arquivo excluídos? Ou precisa desses arquivos para saber as diferenças desde o backup nível 0 (completo)? (Eu sei que devemos ter os logs de arquivos após o nível incremental 1 para fazer uma recuperação completa).
Se não, como o Oracle rastreia essas diferenças desde o nível incremental 0 (sem rastreamento de alteração de bloco)?
Acredito que a auditoria da Oracle não pode rastreá-lo, pois o usuário realmente não se conectou ao banco de dados. Ou a auditoria pode ajudar? Quero dizer, o Oracle audit track sem o login do usuário no banco de dados?
Alguém ou algum aplicativo está tentando se conectar várias vezes em uma conta e está causando LOCKED(TIMED) (excesso de tentativas de conexão com a senha errada, definida no perfil do usuário). Como posso descobrir de qual máquina ou usuário de IP e SO essas tentativas vêm?
Eu estava lendo a documentação sp_change_users_login e diz:
Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Em vez disso, use ALTER USER.
Como auto_fix usando o comando alter user?
Gostaria de saber se é possível converter o valor de um LSN.
ou seja: 306239000001950100001 para uma data/hora.
Algo silimilar de scn_to_timestamp
função no Oracle.
Este é um comportamento padrão/normal? Quando iniciamos um backup ele cria um arquivo de 316gb e somente após o término do backup ele diminui para 131gb. Não faz sentido porque neste caso precisamos de um disco de 316gb ou mais para iniciar o backup, mesmo que esteja compactado para 131gb.
Digamos que temos a seguinte nomenclatura local tns:
CMAN =
(DESCRIPTION=
(SOURCE_ROUTE=YES)
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.16)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=sat-scan)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=satdb)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=10)
(DELAY=1)
)
)
)
SOURCE_ROUTE=SIM é:
Quando você define esse parâmetro como ativado ou sim, o Oracle Net usa cada endereço em ordem até que o destino seja alcançado. Para usar o Oracle Connection Manager, é necessária uma conexão inicial do cliente com o Oracle Connection Manager e uma segunda conexão do Oracle Connection Manager com o listener.
Mas se tivermos dois cman's? como implementar os parâmetros LOAD_BALANCE e FAILOVER? isso é correto?
CMAN =
(DESCRIPTION=
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(SOURCE_ROUTE=YES)
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.16)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.17)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=sat-scan)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=satdb)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=10)
(DELAY=1)
)
)
)
Quer dizer, ele deve balancear e fazer failover apenas em torno 192.168.0.16:1522
e 192.168.0.17:1522
, mas acho que consideraria sat-scan:1521
também e talvez o cliente se conecte diretamente pensando scan-scan
sem passar pelo cman.
Eu sei que encolher não é uma boa prática, mas se eu executar apenas ie: dbcc shrinkfile (filename,1024)
, qual é o padrão? notruncate
ou truncateonly
? Não encontrei nada sobre isso na documentação.
NOTRUNCATE Move as páginas alocadas do final de um arquivo de dados para páginas não alocadas na frente de um arquivo com ou sem especificar target_percent. O espaço livre no final do arquivo não é retornado ao sistema operacional e o tamanho físico do arquivo não é alterado. Portanto, se NOTRUNCATE for especificado, o arquivo parecerá não ser reduzido.
NOTRUNCATE é aplicável apenas a arquivos de dados. Os arquivos de log não são afetados.
Esta opção não é compatível com contêineres de grupo de arquivos FILESTREAM.
....
TRUNCATEONLY Libera todo o espaço livre no final do arquivo para o sistema operacional, mas não executa nenhum movimento de página dentro do arquivo. O arquivo de dados é reduzido apenas até a última extensão alocada.
target_size é ignorado se especificado com TRUNCATEONLY.
A opção TRUNCATEONLY não move informações no log, mas remove VLFs inativos do final do arquivo de log. Esta opção não é compatível com contêineres de grupo de arquivos FILESTREAM.