Derrubar usuário conectado ao BD
05/08/2004
0
Pessoal tenho uma restauração de backup diário agendado +
as vezes ele não ocorre pois algum usuário esta conectado ao bd.
Existe algum comando(script) que possa colocar junto ou antes da execução da restauração para derrubar o(s) usuário(s) permitindo a execução ´job´ ?
Jbb
Posts
05/08/2004
Marcus.magalhaes
Vc pode usar este script q eu montei :
[color=green:d5174c1e93]Declare @var_dbnameVarChar(255),
@var_bkpdevVarChar(255),
@var_commandVarChar(255),
@var_dbidInt,
@var_spidInt
Set @var_dbname = ´db_name´
Set @var_bkpdev = ´dev_name´ / ´disk = ´´caminho\arquivo´´´ -- Tem q ter todos estes apóstrofos
Select @var_dbid = dbid
From master..sysdatabases
Where name = @var_dbname
Declare cur_Users Cursor For Select spid From master..sysprocesses (NoLock) Where dbid = @var_dbid
Open cur_Users
Fetch Next From cur_Users Into @var_spid
While (@@fetch_status = 0)
Begin
Select @var_spid
Set @var_command = ´kill ´ + Convert(VarChar, @var_spid)
Exec (@var_command)
Fetch Next From cur_Users Into @var_spid
End
Close cur_Users
Deallocate cur_Users
Set @var_command = ´Alter Database ´ + @var_dbname + ´ Set SINGLE_USER´
Exec (@var_command)
Set @var_command = ´Restore Database ´ + @var_dbname + ´ From ´ + @var_bkpdev + ´ with Stats = 10´
Exec (@var_command)
Set @var_command = ´Alter Database ´ + @var_dbname + ´ Set MULTI_USER´
Exec (@var_command)[/color:d5174c1e93]
Att,
11/08/2004
Jbb
Testei a instrução e ocorre o seguinte erro:
´Server: Msg 403, Level 16, State 1, Line 8
Invalid operator for data type. Operator equals divide, type equals varchar.´
Este erro esta aponta pra linha:
Set @var_bkpdev = ´TESTE´ / ´disk = ´´E:\TESTE.BAK´´´ -- Tem q ter todos estes apóstrofos
E ai alguma dica?
11/08/2004
Marcus.magalhaes
Retestei o código na agora (copiei do site e colei no query analyzer e funcionou :
[color=green:0f06d01d68]Declare @var_dbname VarChar(255),
@var_bkpdev VarChar(255),
@var_command VarChar(255),
@var_dbid Int,
@var_spid Int
Set @var_dbname = ´TESTE´
Set @var_bkpdev = ´disk = ´´C:\TESTE.BAK´´´ -- Tem q ter todos estes apóstrofos
Select @var_dbid = dbid
From master..sysdatabases
Where name = @var_dbname
Declare cur_Users Cursor For Select spid From master..sysprocesses (NoLock) Where dbid = @var_dbid
Open cur_Users
Fetch Next From cur_Users Into @var_spid
While (@@fetch_status = 0)
Begin
Select @var_spid
Set @var_command = ´kill ´ + Convert(VarChar, @var_spid)
Exec (@var_command)
Fetch Next From cur_Users Into @var_spid
End
Close cur_Users
Deallocate cur_Users
Set @var_command = ´Alter Database ´ + @var_dbname + ´ Set SINGLE_USER´
Exec (@var_command)
Set @var_command = ´Restore Database ´ + @var_dbname + ´ From ´ + @var_bkpdev + ´ with Stats = 10´
Exec (@var_command)
Set @var_command = ´Alter Database ´ + @var_dbname + ´ Set MULTI_USER´
Exec (@var_command) [/color:0f06d01d68]
e o resultado foi o seguinte :
[color=green:0f06d01d68](1 row(s) affected)
16 percent restored.
24 percent restored.
33 percent restored.
41 percent restored.
58 percent restored.
66 percent restored.
74 percent restored.
83 percent restored.
91 percent restored.
100 percent restored.
Processed 96 pages for database ´TESTE´, file ´TESTE_Data´ on file 1.
Processed 1 pages for database ´TESTE´, file ´TESTE_Log´ on file 1.
RESTORE DATABASE successfully processed 97 pages in 0.404 seconds (1.951 MB/sec).[/color:0f06d01d68]
Att,
11/08/2004
Jbb
Velho blz!
- Retirei o ´dev_name´ como vc fez e agora tá redondinho!!!
- Muito obrigado.
Só + uma perguntinha.... Pq não consigo criar 1 device que ira armazenar o arquivo de backup(.bak) em outra máquina da rede ?
-Já tentei fazer por mapeamento de pasta + não funcionou.
11/08/2004
Marcus.magalhaes
[color=green:8ffef53c5b]Backup Batabase TESTE To Disk = ´\\192.168.7.50\d$\backup\TESTE.BAK´ With INIT[/color:8ffef53c5b]
Desta forma seu backup será armazenado em outra máquina. Só não se esqueça de criar o compartilhamento e dar os direitos para o usuário q sobe o SQL Server em ambos os nós.
Para fazer isso com device vc pode criar da seguinte forma
[color=green:8ffef53c5b]sp_addevice ´disk´, ´TESTE.BAK´, ´\\192.168.5.34\d$\backup\TESTE.BAK´[/color:8ffef53c5b]
Att,
12/08/2004
Jbb
Cara este negócio de fazer o backup em
outra máquina deve uma coisa de outro mundo ou eu que sou burro mesmo.
Estou executando a consulta da seguinte forma:
Backup Database WEB To Disk = ´\\192.168.0.10\e$\TESTE.BAK´ With INIT
Erro gerado:
Server: Msg 3201, Level 16, State 1, Line 1
Cannot open backup device ´\\192.168.0.10\e$\TESTE.BAK´. Device error or device off-line. See the SQL Server error log for more details.
Server: Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.
:-(
12/08/2004
Marcus.magalhaes
O usuário q sobe o sql server (MS SQL Server service) não está conseguindo gravar na maquina destino.
Ah...se vc estiver usando o [b:ef2c45fbc9]local system[/b:ef2c45fbc9] para subir os serviços SQL, este usuário não é válido no dominio. Vc deve usar um usuário de DOMINIO.
Att,
17/08/2004
Jbb
Não consegui realizar o backup remoto.
Realmente estou pecando em alguma parte de permissão.
Se não for pedir de +, vc pode citar os processos que devo verificar ou mesmo configurar para que acabe de vez com este probleminha :-?
desde de já + q obrigado.
17/08/2004
Marcus.magalhaes
1) Deve ter um usuário de domínio ou o usuário deve existir nos dois servidores, com a mesma senha, para subir os serviços.
2) Verificar se o usuário q sobe o SQL Server, de acordo com item anterior, tem permissão de leitura/gravação na pasta destino.
Para teste, vc pode fazer o seguinte :
Exec master..xp_cmdshell ´dir \\xxx.xxx.xxx.xxx\compartilhamento´
Este comando deve funcionar
Att,
Clique aqui para fazer login e interagir na Comunidade :)