Vamos supor um banco de dados com um design de segurança ruim, digamos que todos acessem o banco de dados com um usuário com autoridade DBADM ou SYSADM e também, pode haver apenas nome de usuário para todos (ou seja, db2inst1).
Gostaria de realizar uma tarefa administrativa, por exemplo uma migração de esquema, e preciso ser o único conectado ao banco de dados.
Como posso ter certeza de que serei o único a acessar o banco de dados?
- O banco de dados Quiesce não é suficiente porque outros usuários acessam com um usuário de alto privilégio.
- A instância Quiesce não permite ativar o banco de dados se o acesso restrito for selecionado.
- O DB2COMM pode ser removido do db2set, no entanto, um cron local pode ser acionado eventualmente.
- MAXAPPLS para 1. No entanto, eu deveria ser aquele, se não forçar os aplicativos novamente devem ser emitidos.
- A conexão em modo exclusivo não funcionará se o usuário for usado por outras pessoas.
- Alterar a configuração da carga de trabalho para permitir apenas a mim? (do meu IP)
No entanto, essas são muitas mudanças apenas para uma tarefa simples.
Eu vi uma discussão semelhante, porém não vejo algo que me convença: http://database.ittoolbox.com/groups/technical-functional/db2-l/luw-how-to-prevent-connections-to-a- banco de dados único dentro de uma instância-3189860
Quais são as suas propostas? O que você faria nesse caso?
A maneira mais fácil de fazer isso seria simplesmente cancelar o catálogo e, em seguida, catalogar novamente o banco de dados com um nome diferente (faça isso como o proprietário da instância no servidor de banco de dados):
db2 uncatalog database SAMPLE
db2 catalog database SAMPLE as XXX on <path>
... executar atividades de manutenção ...
db2 uncatalog database XXX
db2 catalog database SAMPLE on <path>
Qualquer usuário que tentar se conectar localmente no servidor de banco de dados, usando
connect to sample
, obterá o erro:No entanto, para que as conexões remotas também não consigam se conectar, você terá que reiniciar a instância do DB2 . Isso é necessário porque o DB2 TCP Connection Manager (db2tcpcm) armazenará em cache as entradas do catálogo do banco de dados, portanto, até que o EDU seja reiniciado, ele ainda "saberá" sobre o banco de dados. Depois de reiniciar a instância do DB2, as conexões remotas receberão o erro:
Ter que reiniciar a instância não é a melhor solução, mas funciona.