Question : manuscrit de restauration requis pour la réserve

Bonjour, le
I AM essayant de fournir un manuscrit qui reconstitue le « dernier » support aux bases de données de réserve mais voici mon dilemme….le plan de secours du

Our est comme suit : de pleins supports deux fois par jour différentiels du backups

These de notation de transaction du backups
hourly du backups
du

nightly sont poussés plus d'aux serveurs de réserve dans le besoin différent du folders

I d'automatiser le processus de trouver les bons supports…. et reconstituant le

Can de base de données (complètement, différentiel, notations de transaction) quelqu'un me fournissent à a un calibre qui peut faire tout de ceci que j'ai ne pu pas trouver de ce que j'ai besoin en ligne. Thanks.



class= de

Réponse : manuscrit de restauration requis pour la réserve

Si vous n'obtenez rien meilleur, ce proc est étroit.  Il reconstitue le support le plus récent et puis reconstitue les notations suivantes.  Nous ne faisons pas des différentiels, ainsi il ne les manipule pas.   Quelques chemins sont hard-coded, il y a des prétentions au sujet des noms logiques de base de données, et il présume que des dossiers de secours sont appelés avec le format créé par des plans d'entretien de 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 :
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É
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us