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 :
94 :
95 :
96 :
97 :
98 :
99 :
100 :
101 :
102 :
103 :
104 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
145 :
146 :
147 :
148 :
149 :
150 :
151 :
152 :
153 :
154 :
155 :
156 :
157 :
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 :
167 :
168 :
169 :
170 :
171 :
172 :
173 :
174 :
175 :
176 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 :
199 :
200 :
201 :
202 :
203 :
204 :
205 :
206 :
207 :
208 :
209 :
210 :
211 :
212 :
213 :
214 :
215 :
216 :
217 :
218 :
219 :
220 :
221 :
222 :
223 :
224 :
225 :
226 :
227 :
228 :
229 :
230 :
231 :
232 :
233 :
234 :
235 :
236 :
237 :
238 :
239 :
240 :
241 :
242 :
243 :
244 :
|
CHANGER LE PROCÉDÉ [dbo]. [p_RestoreBackupDirForNightlyLoad]
@i_sDevDbType varchar (8),
@i_sLogPathAppName varchar (40)
AS
COMMENCER
DÉCLARER
peu de @bValidDevDbType,
peu de @bValidLogPathAppName,
@sErrorMessage varchar (250)
PLACER le @bValidDevDbType = 0
CHOISIR le @bValidDevDbType = 1
LÀ OÙ @i_sDevDbType DEDANS (« modifié », « de nuit ")
SI @bValidDevDbType = 0
COMMENCER
PLACER le @sErrorMessage = le @i_sDevDbType + « - entrer le paramètre inadmissible. Doit égaler « modifié » ou « de nuit » »
ERREUR GOTO
EXTRÉMITÉ
;
PLACER le @bValidLogPathAppName = 0
CHOISIR le @bValidLogPathAppName = 1
DANS LÀ OÙ @i_sLogPathAppName (divers noms de base de données ici)
SI @bValidLogPathAppName = 0
COMMENCER
PLACER le @sErrorMessage = le @i_sLogPathAppName + « - entrer le paramètre inadmissible. »
ERREUR GOTO
EXTRÉMITÉ
;
DÉCLARER
@sLogFullPath varchar (100),
@sBackupFileList varchar (100),
@iBAKFileNameStartPos international,
@iCmdReturnCode international,
@sCommand varchar (150),
@sBAKFile_MaxTS varchar (12),
varchar @sDirBAKFile (100),
varchar @sDirTRNFile (100)
DÉCLARER
@LockResult international ;
temps de *** d'impression « avant que la DEMANDE de SERRURE soit » + CONVERTI (varchar (25), getdate (), 121) ;
@LockResult d'EXEC = @Resource de sp_getapplock = « tempdb. .tables »,
@LockMode = « exclusivité »,
@LockOwner = « session »,
@LockTimeout = 3600000 ;
si >= 0 de @LockResult
commencer
imprimer la « SERRURE de *** accordée à » + CONVERTI (varchar (25), getdate (), 121) ;
extrémité
autrement
commencer
imprimer la « SERRURE de *** non réussie, temps est » + CONVERTI (varchar (25), getdate (), 121) ;
extrémité
;
SI OBJECT_ID (N'U') de Ne tempdb. .CmdDirContents_t', N'EST PAS NUL
Tempdb. .CmdDirContents_t de TABLE de BAISSE ;
CRÉER le tempdb. .CmdDirContents_t de TABLE
(
NULLES varchar de DirList (100 )
) ;
SI OBJECT_ID (N'U') de Ne tempdb. .CmdDirAndTS_t', N'EST PAS NUL
Tempdb. .CmdDirAndTS_t de TABLE de BAISSE ;
CRÉER le tempdb. .CmdDirAndTS_t de TABLE
(
NULLE varchar de DirList (100 ) PAS,
NULLE varchar de Backup_TS (12 ) PAS
) ;
PLACER le @sLogFullPath = « K:\BackMeUp\User\ »
+ @i_sLogPathAppName
+ « \ » ;
chemin de LogFullPath d'impression le « au support est » + IsNull (le @sLogFullPath, '')
PLACER le @sBackupFileList = le @sLogFullPath + « BackupFileList.txt »
PLACER le @sCommand = « del » + @sBackupFileList ;
@iCmdReturnCode d'exec = @sCommand de xp_cmdshell
PLACER le @sCommand = « dir » + @sLogFullPath + « > » + @sBackupFileList
@iCmdReturnCode d'exec = @sCommand de xp_cmdshell
la copie « BackupFileList est localisée à » + IsNull (le @sBackupFileList, '')
DÉCLARER
@sSqlStmt nvarchar (250)
PLACER le @sSqlStmt =
Tempdb. .CmdDirContents_t d'INSERTION de N'BULK '+
Ne FROM « + QUOTENAME (@SBACKUPFILELIST) + N » '+
Ne WITH '+
N'(FIELDTERMINATOR = '' \ t '', '+
Ne FIRSTROW = 1, '+
Ne KEEPNULLS, '+
Ne ROWTERMINATOR = '' \ n '') ';
@sSqlStmt de sp_executesql d'EXEC ;
SI @@ERROR = 0
Imprimer « l'insertion réussie dans le tempdb. .CmdDirContents_t »
SUPPRESSION
Du tempdb. .CmdDirContents_t
LÀ OÙ DirList EST NUL ;
SUPPRESSION
Du tempdb. .CmdDirContents_t
LÀ OÙ DirList PAS AIMENT « %_backup_%.bak »
ET DirList PAS AIMENT « %_backup_%.trn » ;
INSÉRER le tempdb. .CmdDirAndTS_t
CHOISIR DirList,
Backup_TS = PARTI (DROIT (DirList, 16), 12)
Du tempdb. .CmdDirContents_t ;
CHOISIR * à partir du tempdb. .CmdDirAndTS_t ;
CHOISIR le @sBAKFile_MaxTS = le mxbk. Backup_TS
DE (CHOISIR LE PRINCIPAL 1
*
Du tempdb. .CmdDirAndTS_t
LÀ OÙ DirList AIMENT « %_backup_%.bak »
ORDRE PAR 2 DESC
) mxbk ;
copie ''
horodateur d'impression le « du dossier de secours choisi est » + IsNull (@sBAKFile_MaxTS, '') ;
CHOISIR les @iBAKFileNameStartPos = le PATINDEX (« % » + @i_sLogPathAppName + « _b » + « % », DirList)
Du tempdb. .CmdDirAndTS_t
LÀ OÙ DirList AIMENT « %_backup_%.bak »
ET Backup_TS = @sBAKFile_MaxTS ;
CHOISIR @sDirBAKFile = @sLogFullPath + SOUS-CHAÎNE (DirList, @iBAKFileNameStartPos, LEN (DirList))
Du tempdb. .CmdDirAndTS_t
LÀ OÙ DirList AIMENT « %_backup_%.bak »
ET Backup_TS = @sBAKFile_MaxTS ;
DÉCLARER
@sCoreAppName varchar (128),
@sRstrDBName varchar (128),
@sLogicalNameData varchar (128),
@sLogicalNameLog varchar (128),
@sPhysicalNameData varchar (128),
@sPhysicalNameLog varchar (128)
PLACER le @sCoreAppName = REMPLACENT (@i_sLogPathAppName, « Sdc », '') ;
PLACER le @sRstrDBName = REMPLACENT (@sCoreAppName, « aiguillon », '') ;
PLACER le @sRstrDBName = le @i_sDevDbType + le @sRstrDBName ;
PLACER le @sLogicalNameData = le @i_sLogPathAppName + « _Data » ;
PLACER le @sLogicalNameLog = le @i_sLogPathAppName + « _Log » ;
PLACER le @sPhysicalNameData = « M:\MsSqlData\ » + @sRstrDBName + « _Data.MDF » ;
PLACER le @sPhysicalNameLog = « N:\MsSqlTranLog\ » + @sRstrDBName + « _Log.LDF » ;
nom de DB de restauration d'impression le « est » + IsNull (@sRstrDBName, '') ;
les Nom-Données logiques d'impression « sont » + IsNull (le @sLogicalNameData, '')
les Nom-Données physiques d'impression « sont » + IsNull (le @sPhysicalNameData, '')
la Nom-Notation logique d'impression « est » + IsNull (le @sLogicalNameLog, '')
la Nom-Notation physique d'impression « est » + IsNull (le @sPhysicalNameLog, '')
le dossier de secours d'impression « est » + IsNull (@sDirBAKFile, '')
copie ''
@SRSTRDBNAME DE BASE DE DONNÉES DE RESTAURATION
À PARTIR DU DISQUE = @SDIRBAKFILE
PAR REMPLACER,
DÉPLACER LE @SLOGICALNAMEDATA AU @SPHYSICALNAMEDATA,
DÉPLACER LE @SLOGICALNAMELOG AU @SPHYSICALNAMELOG,
NORECOVERY ;
impriment « accompli reconstituant la base de données avec le dossier de secours de » + @sDirBAKFile
DÉCLARER TrnLog_cursor
CURSEUR POUR
CHOISIR DirTRNFile = @sLogFullPath + SOUS-CHAÎNE (DirList, @iBAKFileNameStartPos, LEN (DirList))
Du tempdb. .CmdDirAndTS_t
LÀ OÙ DirList AIMENT « %_backup_%.trn »
ET @sBAKFile_MaxTS de >= de Backup_TS
ORDRE PAR Backup_TS asc ;
OUVRIR TrnLog_cursor
CHERCHER APRÈS de TrnLog_cursor
DANS @sDirTRNFile
@LockResult d'EXEC = @Resource de sp_releaseapplock = « tempdb. .tables »,
@LockOwner = « session »
temps de *** d'impression « après que le DÉGAGEMENT de SERRURE soit » + CONVERTI (varchar (25), getdate (), 121) ;
TANDIS QUE @@FETCH_STATUS = 0
COMMENCER
RECONSTITUER LE @SRSTRDBNAME DE NOTATION
À PARTIR DU DISQUE = @SDIRTRNFILE
AVEC NORECOVERY ;
la copie « a accompli appliquer le fichier de consignation de transaction de » + @sDirTRNFile
copie ''
EFFORT APRÈS de TrnLog_cursor
DANS @sDirTRNFile
EXTRÉMITÉ
TrnLog_cursor ÉTROIT
DÉSAFFECTER TrnLog_cursor
RECONSTITUER LE @SRSTRDBNAME DE BASE DE DONNÉES
AVEC LE RÉTABLISSEMENT
RETOUR 0
ERREUR :
RAISERROR (@sErrorMessage, 16, 1)
RENVOYER -1
EXTRÉMITÉ
|