ALTER FEDERATION (Banco de Dados SQL do Windows Azure)
Modifica a distribuição de dados em uma federação.
Convenções de sintaxe (Banco de Dados SQL do Windows Azure)
ALTER FEDERATION federation_name
{
SPLIT AT (distribution_name = boundary_value)
| DROP AT ([LOW|HIGH] distribution_name = boundary_value)
}[;]
- federation_name
- O nome da federação a ser criada. O nome deve ser exclusivo dentro do Banco de dados SQL, obedecer às regras de identificadores e ser do tipo sysname.
- distribution_name
- O nome da chave da federação. O nome é um identificador usado para fazer referência à chave da federação. É feita referência a ela quando instruções relacionadas à federação, como CREATE TABLE … FEDERATED ON(...) ou USE FEDERATION ON. Distribution_name deve atender às regras de identificadores e ser do tipo sysname. Boundary_value é o ponto de divisão para a operação de reparticionamento. O valor de limite deve ser um valor válido para o tipo de dados especificado pela chave da federação. No caso de SPLIT, o valor se torna range_low e range_high para os novos membros da federação criados como parte dessa operação.
- SPLIT AT (distribution_name = boundary_value)
- Move os dados no membro da federação que atualmente contém o valor de limite em dois novos membros da federação. Todas as linhas das tabelas federadas com as instâncias da chave da federação < boundary_value são copiados em um dos novos membros da federação de destino. As instâncias >= valor de limite são copiadas no outro novo membro da federação. Todos os outros objetos como tabelas de referência, procedimentos armazenados, funções, usuários e permissões definidos em objetos são clonados para os novos membros da federação.
- DROP AT ([LOW|HIGH] distribution_name = boundary_value)
- Remove um membro da federação e amplia o intervalo de um membro adjacente para cobrir a lacuna criada pela operação DROP. Essa operação afeta o membro que está sendo removido e o membro adjacente que será ampliado para cobrir a lacuna. LOW ou HIGH determina o membro da federação que será removido na federação boundary_value determinada. O valor de limite deve corresponder a um valor de partição existente (range-high ou range_low de membros da federação) na federação. Durante a operação DROP, não há comparação de esquemas entre os membros afetados da federação. DROP não requer uma cópia física dos dados; ela redefine as conexões e altera o db_name() dos membros da federação afetados. DROP é uma operação assíncrona.
Propriedades da operação SPLIT
-
A instrução ALTER FEDERATION ... SPLIT deve ser a única instrução no lote e não pode fazer parte de uma transação externa.
-
A instrução ALTER FEDERATION ... SPLIT pode ser executada somente durante a conexão com o banco de dados de raiz da federação.
-
Somente um comando DROP ou SPLIT pode estar ativo em qualquer momento nos membros afetados da federação. Pode haver muitos comandos DROP e SPLIT ativos ao mesmo tempo, desde que eles estejam operando em diferentes membros de uma federação.
-
Todos os membros da federação de destino (os membros da federação criados devido a uma operação SPLIT) herdam as propriedades MAXSIZE e EDITION do membro da federação de origem.
-
SPLIT é uma operação atômica. Todos os membros de destino devem ser criados e sincronizados com êxito para que a operação SPLIT seja concluída.
-
SPLIT é uma operação assíncrona.
Durante a execução de SPLIT-
Todos os objetos regulares (não federados), esquemas e metadados do sistema são copiados do membro da federação de origem submetido à operação SPLIT no membro da federação de destino. Essa lista inclui usuários, funções, permissões de objetos, sprocs, exibições, tabelas federadas ou de referência, índices, etc. A única exceção é a estatística de distribuição marcada para recompilação. A estatística marcada com NORECOMPUTE é mantida e não é recalculada nas tabelas federadas após as operações de reparticionamento.
-
Todos os esquemas de tabelas federadas são copiados do membro da federação de origem submetido à operação SPLIT no membro da federação de destino.
-
Os dados de usuários nas tabelas federadas são movidos para os membros da federação de destino com base no valor de limite.
-
Os dados de usuários em todas as tabelas de referência são clonados e movidos para o membro da federação de destino.
-
O novo membro da federação contém todos os dados atualizados nos membros da federação de destino correspondente.
-
A exibição sys.federation_members é atualizada para incluir os novos membros da federação de destino com seus valores de intervalo. O membro da federação de origem é removido e deixa de existir em sys.databases e em sys.federation_members.
-
Todas as conexões existentes com os membros da federação de origem são desconectadas. Em caso de nova tentativa, as novas conexões são roteadas para os novos membros da federação.
-
Todos os objetos regulares (não federados), esquemas e metadados do sistema são copiados do membro da federação de origem submetido à operação SPLIT no membro da federação de destino. Essa lista inclui usuários, funções, permissões de objetos, sprocs, exibições, tabelas federadas ou de referência, índices, etc. A única exceção é a estatística de distribuição marcada para recompilação. A estatística marcada com NORECOMPUTE é mantida e não é recalculada nas tabelas federadas após as operações de reparticionamento.
Propriedades da operação DROP
-
A instrução ALTER FEDERATION ... DROP deve ser a única instrução no lote e não pode fazer parte de uma transação externa.
-
A instrução ALTER FEDERATION ... DROP pode ser executada somente durante a conexão com o banco de dados raiz da federação.
-
O valor de limite especificado precisa corresponder a um limite de intervalo (range_high, range_low) existente na federação.
-
DROP é uma operação assíncrona.
Quando a operação DROP é iniciada, a opção LOW ou HIGH e o valor de limite especificado determinam o membro da federação que será removido. Um membro da federação adjacente é expandido para cobrir o intervalo do membro da federação removido.
Durante a execução de DROP, nenhuma transferência de dados é executada e não ocorre nenhuma comparação de esquemas.
Após a conclusão de DROP-
O membro da federação restante é renomeado.
-
A tabela sys.federation_members não inclui mais o membro da federação removido e tem o intervalo atualizado para o membro da federação restante.
-
Todas as conexões existentes com os membros da federação são desconectadas. O membro da federação removido deixa de aceitar conexões. O membro da federação restante anula todas as conexões existentes.
-
O membro da federação restante é renomeado.
Considerações sobre segurança para operações em federações
Para executar as instruções CREATE, ALTER e DROP em federações, é necessário estar conectado com a raiz da federação e ser membro da função dbmanager no servidor. Você também deve ser membro do grupo dbo do banco de dados.
As instruções SPLIT e DROP exigem que você tenha as permissões CREATE e DROP DATABASE nos membros da federação de origem e no servidor ao qual você está conectado. No Banco de dados SQL do Windows Azure, isso é restrito aos membros da função de servidor dbmanager. O proprietário do membro da federação de origem se torna o proprietário do membro da federação de destino, seja qual for a conta de usuário que estiver executando a operação.
Simultaneidade de operações SPLIT e DROP
É permitido executar várias operações DROP ou SPLIT simultaneamente, desde que nenhum dos membros da federação de origem nem de destino se sobreponha.
-
DROP AT (LOW distribution_name = boundary_value)
Remove o membro da federação para o limite INFERIOR do valor limite e amplia o membro da federação para o valor SUPERIOR do valor de limite. Por exemplo, uma determinada federação (fed1) contendo três membros da federação que cobrem 0,100 (db1), 100,200 (db2) e 200,300 (db3), emitindo ALTER FEDERATION fed1 DROP AT (LOW customer_id=200), executará o seguinte:-
DROP db2 e todos os dados entre 100,200
-
db3 é renomeado para db4. Dbid de Db4 permanece o mesmo.
-
Db4 agora cobre o intervalo de 100,300
-
DROP db2 e todos os dados entre 100,200
-
DROP AT (HIGH distribution_name = boundary_value)
Remove o membro da federação para o limite SUPERIOR do valor de limite e amplia o membro da federação para o valor INFERIOR do valor de limite. Por exemplo, uma determinada federação (fed1) contendo três membros da federação que cobrem 0,100 (db1), 100,200 (db2) e 200,300 (db3), emitindo ALTER FEDERATION fed1 DROP AT (HIGH customer_id=200), executará o seguinte:-
DROP db3 e todos os dados entre 200,300
-
db2 é renomeado para db4. Dbid de Db4 permanece o mesmo que db2.
-
Db4 agora cobre o intervalo de 100,300
-
DROP db3 e todos os dados entre 200,300