-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSQL001.sql
93 lines (75 loc) · 3.95 KB
/
SQL001.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
Script para fazer copia da base de dados
Create By Bitts
(24/11/2015)
USO: EXECUTE dbo.restdb 'Base Origem', 'Base Destino', @retorno OUTPUT;
*/
IF OBJECT_ID ( 'dbo.restdb', 'P' ) IS NOT NULL
DROP PROCEDURE restdb;
GO
CREATE PROCEDURE restdb(@dbname_origem SYSNAME, @dbname_destino SYSNAME, @return VARCHAR(MAX) OUTPUT) AS
BEGIN
SET @return = @return + 'Inicionando processo de copia de database...' + char(13) ;
SET @return = @return + 'Definindo variaveis do escopo' + char(13) ;
DECLARE
--@dbname_origem SYSNAME = 'Rematriculas',
--@dbname_destino SYSNAME = 'RematriculasTeste',
@file_origem VARCHAR(MAX),
@file_origem_log VARCHAR(MAX),
@logicalname_origem VARCHAR(MAX),
@logicalname_origem_log VARCHAR(MAX),
@path_files VARCHAR(MAX),
@file_mdf VARCHAR(MAX),
@file_ldf VARCHAR(MAX),
@bkp_file VARCHAR(MAX),
@dest_mdf_file VARCHAR(MAX),
@dest_ldf_file VARCHAR(MAX),
@cmd_delbkpfile VARCHAR(400);
SET @return = @return + 'Localizando arquivo MDF da base de origem...' + char(13) ;
SELECT @file_origem = [physical_name], @logicalname_origem = [name]
FROM sys.[master_files]
WHERE [database_id] IN (DB_ID(@dbname_origem)) AND [type_desc] = 'ROWS';
SET @return = @return + 'Localizando arquivo LDF da base de origem...' + char(13) ;
SELECT @file_origem_log = [physical_name], @logicalname_origem_log = [name]
FROM sys.[master_files]
WHERE [database_id] IN (DB_ID(@dbname_origem)) AND [type_desc] = 'LOG';
SET @return = @return + 'Definindo destino do arquivo de Backup...' + char(13) ;
SELECT
@path_files = LEFT(@file_origem,LEN(@file_origem) - charindex('\',reverse(@file_origem),1) + 1),
@file_mdf = RIGHT(@file_origem, CHARINDEX('\', REVERSE(@file_origem)) -1),
@file_ldf = RIGHT(@file_origem_log, CHARINDEX('\', REVERSE(@file_origem_log)) -1);
SET @return = @return + 'Definindo destino completo do arquivo de Backup...' + char(13) ;
SET @bkp_file = @path_files + 'restore_database.bak';
SET @return = @return + 'Origens e destinos definidos...' + char(13) ;
SET @return = @return + 'Caminho completo do arquivo MDF de origem: '+ @file_origem + char(13) ;
SET @return = @return + 'Caminho completo do arquivo LDF de origem: '+ @file_origem_log + char(13) ;
SET @return = @return + 'Nome lógico da database :'+ @logicalname_origem + char(13) ;
SET @return = @return + 'Nome lógico do arquivo de logs :'+ @logicalname_origem_log + char(13) ;
SET @return = @return + 'Local de destino do arquivo de Backup :'+ @path_files + char(13) ;
SET @return = @return + 'Arquivo MDF origem '+ @file_mdf + char(13) ;
SET @return = @return + 'Arquivo LDF origem '+ @file_ldf + char(13) ;
SET @return = @return + 'Caminho completo do arquivo de Backup destino '+ @bkp_file + char(13) ;
SET @return = @return + 'Inicionado processo de Backup, arquivo: '+ @bkp_file + char(13) ;
BACKUP DATABASE @dbname_origem TO DISK = @bkp_file
WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 10;
SET @return = @return + 'Definindo caminho completo dos novos arquivo MDF e LDF para a database destino' + char(13) ;
SET @dest_mdf_file = @path_files + @dbname_destino + '.mdf';
SET @dest_ldf_file = @path_files + @dbname_destino + '_log.ldf';
SET @return = @return + 'Caminho completo do MDF de destino '+ @dest_mdf_file + char(13) ;
SET @return = @return + 'Caminho completo do LDF de destino '+ @dest_ldf_file + char(13) ;
SET @return = @return + 'Restaurando a database...' + char(13) ;
RESTORE DATABASE @dbname_destino FROM DISK = @bkp_file
WITH CHECKSUM,
MOVE @logicalname_origem TO @dest_mdf_file,
MOVE @logicalname_origem_log TO @dest_ldf_file,
RECOVERY, REPLACE, STATS = 10;
SET @return = @return + 'Removendo arquivo de Backup criado durante o processo' + char(13) ;
SET @cmd_delbkpfile = 'del '+ @bkp_file;
BEGIN TRY
EXEC master.dbo.xp_cmdshell @cmd_delbkpfile;
END TRY
BEGIN CATCH
SELECT @return = @return + 'Erro ao remover arquivo: ' + ERROR_MESSAGE() + char(13) ;
END CATCH;
SET @return = @return + 'Backup Finalizado!' + char(13) ;
END