Array
(
)

Derrubar usuário conectado ao BD

Jbb
   - 05 ago 2004

bom dia!

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´ ?

Marcus.magalhaes
   - 05 ago 2004

Bom dia cara, blz?

Vc pode usar este script q eu montei :

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)

Att,

Jbb
   - 11 ago 2004

bom dia Marcus!

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?

Marcus.magalhaes
   - 11 ago 2004

Bom dia, blz.

Retestei o código na agora (copiei do site e colei no query analyzer e funcionou :

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)

e o resultado foi o seguinte :

(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).

Att,

Jbb
   - 11 ago 2004

boa tarde Marcus!

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.

Marcus.magalhaes
   - 11 ago 2004

Para fazer o backup em outra máquina, vc pode utilizar o endereço da máquina, Ex.:

Backup Batabase TESTE To Disk = ´\\192.168.7.50\d$\backup\TESTE.BAK´ With INIT

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

sp_addevice ´disk´, ´TESTE.BAK´, ´\\192.168.5.34\d$\backup\TESTE.BAK´

Att,

Jbb
   - 12 ago 2004

olá Marcus;

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.

:-(

Marcus.magalhaes
   - 12 ago 2004

Não é vc que é burro e nem é do outro mundo, vc está tendo problema de permissão.

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 local system para subir os serviços SQL, este usuário não é válido no dominio. Vc deve usar um usuário de DOMINIO.

Att,

Jbb
   - 17 ago 2004

olá Marcus!

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.

Marcus.magalhaes
   - 17 ago 2004

Blz cara.

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,