Frage : Wiederherstellungsindex benötigt für Einsatzbereitschaft

Hallo, ist das
I morgens versuchend, mit einem Index aufzukommen, der die „späteste“ Unterstützung zu den Bereitschaftsdatenbanken wieder herstellt, aber hier mein Dilemma….

Our Unterstützungsplan ist, wie folgt:

nightly gedrückt volle backups
zweimal täglich differenziale backups
hourly Verhandlungmaschinenbordbuch backups

These Unterstützungen vorbei zu den Bereitschaftsbedienern in der unterschiedlichen folders

I Notwendigkeit, den Prozess des Findens der rechten Unterstützungen zu automatisieren…. und das Datenbank (voll, Differenzial, Verhandlungmaschinenbordbücher)

Can wieder herstellend, versehen jemand mir a mit einer Schablone, die die ganze dieses tun kann, das, ich nicht imstande gewesen, zu finden, was ich online benötige. Thanks.



Antwort : Wiederherstellungsindex benötigt für Einsatzbereitschaft

Wenn Sie nichts besser erhalten, ist dieses proc nah.  Es wieder herstellt die neueste Unterstützung te und wieder herstellt dann die folgenden Maschinenbordbücher en.  Wir tun nicht Differenziale, also behandelt es sie nicht.   Einige Wege sind fest verdrahtet, gibt es Annahmen über logische Namen der Datenbank, und es voraussetzt nd, dass Sicherungsdateien mit dem Format genannt, das durch sql-Wartungspläne verursacht.
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:
6:
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:
VERFAHREN [dbo] ÄNDERN. [p_RestoreBackupDirForNightlyLoad]

  @i_sDevDbType        varchar (8),
  @i_sLogPathAppName   varchar (40)

WIE
ANFANGEN

ERKLÄREN
   @bValidDevDbType       Spitze,
   @bValidLogPathAppName  Spitze,
   @sErrorMessage         varchar (250)

@bValidDevDbType EINSTELLEN = 0
@bValidDevDbType VORWÄHLEN = 1
 WO @i_sDevDbType INNEN („allabendlich geändert“, „")
 
WENN @bValidDevDbType = 0
   ANFANGEN
    @sErrorMessage = @i_sDevDbType EINSTELLEN + „- den unzulässigen Parameter eingeben.  Muss entsprechen „„allabendlich“ geändert“ oder“
	GOTO- STÖRUNG
   ENDE
;

@bValidLogPathAppName EINSTELLEN = 0
@bValidLogPathAppName VORWÄHLEN = 1
 IN WO @i_sLogPathAppName (verschiedene Datenbanknamen hier)
 
WENN @bValidLogPathAppName = 0
   ANFANGEN
    @sErrorMessage = @i_sLogPathAppName EINSTELLEN + „- den unzulässigen Parameter eingeben.“
	GOTO- STÖRUNG
   ENDE
;

ERKLÄREN
   @sLogFullPath         varchar (100),
   @sBackupFileList      varchar (100),

   @iBAKFileNameStartPos int,

   @iCmdReturnCode       int,
   @sCommand             varchar (150),
   @sBAKFile_MaxTS       varchar (12),
   @sDirBAKFile          varchar (100),
   @sDirTRNFile          varchar (100)


ERKLÄREN 
   @LockResult           int;

Druck „*** Zeit, bevor VERSCHLUSS-ANTRAG“ + der BEKEHRTE ist (varchar (25), getdate (), 121);
    EXEC @LockResult = sp_getapplock @Resource = „tempdb. .tables“, 
									 @LockMode = „Exklusives“,
									 @LockOwner = „Lernabschnitt“,
									 @LockTimeout  = 3600000;

wenn @LockResult >= 0 
   anfangen
     „den *** VERSCHLUSS drucken, der an“ + der BEKEHRTE bewilligt (varchar (25), getdate (), 121);
   Ende
sonst
   anfangen
     den erfolgreichen *** VERSCHLUSS nicht, Zeit drucken „ist“ + der BEKEHRTE (varchar (25), getdate (), 121);
   Ende
;


    WENN OBJECT_ID (N'tempdb. .CmdDirContents_t', N'U') IST NICHT UNGÜLTIG 
        TROPFEN-TABELLE tempdb. .CmdDirContents_t;


    TABELLE tempdb. .CmdDirContents_t VERURSACHEN 
    (
     DirList       varchar (100)  NULL
     );


    WENN OBJECT_ID (N'tempdb. .CmdDirAndTS_t', N'U') IST NICHT UNGÜLTIG 
        TROPFEN-TABELLE tempdb. .CmdDirAndTS_t;


    TABELLE tempdb. .CmdDirAndTS_t VERURSACHEN 
    (
     DirList       varchar (100)  NICHT NULL,
     Backup_TS     varchar (12)   NICHT NULL     
     );


    @sLogFullPath EINSTELLEN = „K:\BackMeUp\User\“
                      + @i_sLogPathAppName
                      + „\“;
    Druck  „LogFullPath Weg zur Unterstützung ist“ + IsNull (@sLogFullPath, '')

    @sBackupFileList = @sLogFullPath EINSTELLEN + „BackupFileList.txt“
    @sCommand EINSTELLEN = „del“ + @sBackupFileList;

    exec @iCmdReturnCode = xp_cmdshell @sCommand
    @sCommand EINSTELLEN = „dir“ + @sLogFullPath + „>“ + @sBackupFileList
    exec @iCmdReturnCode = xp_cmdshell @sCommand
    Druck  „BackupFileList lokalisiert an“ + IsNull (@sBackupFileList, '')
    

ERKLÄREN
   @sSqlStmt   nvarchar (250)

        @sSqlStmt EINSTELLEN = 
            N'BULK EINSATZ tempdb. .CmdDirContents_t '+ 
            N'FROM „+ QUOTENAME (@SBACKUPFILELIST)  + N“ '+ 
            N'WITH '+ 
               N'(FIELDTERMINATOR = '' \ t '', '+ 
               N'FIRSTROW = 1, '+ 
               N'KEEPNULLS, '+
               N'ROWTERMINATOR = '' \ n '') ';

        EXEC sp_executesql @sSqlStmt;

        WENN @@ERROR = 0
           „Erfolgreichen Einsatz in tempdb. .CmdDirContents_t“ drucken


    LÖSCHUNG 
      Vom tempdb. .CmdDirContents_t
     WO DirList UNGÜLTIG IST;

    LÖSCHUNG 
      Vom tempdb. .CmdDirContents_t
     WO DirList NICHT MÖGEN „%_backup_%.bak“
       UND DirList NICHT MÖGEN „%_backup_%.trn“;

    Tempdb. .CmdDirAndTS_t EINSETZEN
    DirList VORWÄHLEN,
           Backup_TS = VERLASSEN (RECHT (DirList, 16), 12)
      Vom tempdb. .CmdDirContents_t;

   * vom tempdb. .CmdDirAndTS_t VORWÄHLEN;

   @sBAKFile_MaxTS = mxbk. Backup_TS VORWÄHLEN
     VON (OBERSEITE 1 VORWÄHLEN
                  *
             Vom tempdb. .CmdDirAndTS_t
            WO DirList MÖGEN „%_backup_%.bak“
            AUFTRAG DURCH 2 DESC
           ) mxbk;

   Druck ''
   Druck „der Zeitstempel der Sicherungsdatei gewählt ist“ + IsNull (@sBAKFile_MaxTS, '');

   @iBAKFileNameStartPos = PATINDEX („%“ + @i_sLogPathAppName + „_b“ + „%“, DirList) VORWÄHLEN
     Vom tempdb. .CmdDirAndTS_t
    WO DirList MÖGEN „%_backup_%.bak“
      UND Backup_TS = @sBAKFile_MaxTS;


   @sDirBAKFile VORWÄHLEN = @sLogFullPath + TEILKETTE (DirList, @iBAKFileNameStartPos, LEN (DirList))
     Vom tempdb. .CmdDirAndTS_t
    WO DirList MÖGEN „%_backup_%.bak“
      UND Backup_TS = @sBAKFile_MaxTS;

ERKLÄREN
   @sCoreAppName        varchar (128),
   @sRstrDBName         varchar (128),
   @sLogicalNameData    varchar (128),
   @sLogicalNameLog     varchar (128),
   @sPhysicalNameData   varchar (128),
   @sPhysicalNameLog    varchar (128)

   @sCoreAppName EINSTELLEN = ERSETZEN (@i_sLogPathAppName, „Signaldatenumformer“, '');
   @sRstrDBName EINSTELLEN =  ERSETZEN (@sCoreAppName, „Stoß“, '');
   @sRstrDBName = @i_sDevDbType  + @sRstrDBName EINSTELLEN;

   @sLogicalNameData = @i_sLogPathAppName EINSTELLEN + „_Data“;
   @sLogicalNameLog = @i_sLogPathAppName EINSTELLEN + „_Log“;

   @sPhysicalNameData EINSTELLEN = „M:\MsSqlData\“ + @sRstrDBName + „_Data.MDF“;
   @sPhysicalNameLog EINSTELLEN = „N:\MsSqlTranLog\“ + @sRstrDBName + „_Log.LDF“;

   Druck „Wiederherstellung DB-Name ist“ + IsNull (@sRstrDBName, '');
   Druck „logische Name-Daten sind“ + IsNull (@sLogicalNameData, '')
   Druck „körperliche Name-Daten sind“ + IsNull (@sPhysicalNameData, '')
   Druck „logisches Name-Maschinenbordbuch ist“ + IsNull (@sLogicalNameLog, '')
   Druck „körperliches Name-Maschinenbordbuch ist“ + IsNull (@sPhysicalNameLog, '')
   Druck „Sicherungsdatei ist“ + IsNull (@sDirBAKFile, '')
   Druck ''

   WIEDERHERSTELLUNGS-DATENBANK @SRSTRDBNAME
      VON DER SCHEIBE = @SDIRBAKFILE 
      DURCH ERSETZEN,
        @SLOGICALNAMEDATA AUF @SPHYSICALNAMEDATA VERSCHIEBEN, 
        @SLOGICALNAMELOG AUF @SPHYSICALNAMELOG VERSCHIEBEN,
        NORECOVERY;

   drucken „abgeschlossen, Datenbank mit Sicherungsdatei von wieder herstellend“ + @sDirBAKFile


TrnLog_cursor ERKLÄREN 
  CURSOR FÜR 
         DirTRNFile = @sLogFullPath + TEILKETTE (DirList, @iBAKFileNameStartPos, LEN (DirList) VORWÄHLEN)
           Vom tempdb. .CmdDirAndTS_t
          WO DirList MÖGEN „%_backup_%.trn“
            UND Backup_TS >= @sBAKFile_MaxTS
          AUFTRAG DURCH Backup_TS asc;

   TrnLog_cursor ÖFFNEN

   ZUNÄCHST VON TrnLog_cursor HOLEN 
    IN @sDirTRNFile

   EXEC @LockResult = sp_releaseapplock @Resource = „tempdb. .tables“,
										@LockOwner = „Lernabschnitt“

Druck „*** Zeit, nachdem VERSCHLUSS-FREIGABE“ + der BEKEHRTE ist (varchar (25), getdate (), 121);


   WÄHREND @@FETCH_STATUS = 0
   ANFANGEN

      MASCHINENBORDBUCH @SRSTRDBNAME WIEDER HERSTELLEN
         VON DER SCHEIBE = @SDIRTRNFILE 
         MIT NORECOVERY;

      Druck „abschloß das Anwenden von Verhandlung-Protokolldatei von“ + @sDirTRNFile e
      Druck ''

      REICHWEITE ZUNÄCHST VON TrnLog_cursor 
       IN @sDirTRNFile

   ENDE

   NAHES TrnLog_cursor
   TrnLog_cursor FREIGEBEN

   DATENBANK @SRSTRDBNAME WIEDER HERSTELLEN
   MIT WIEDERAUFNAHME

   RÜCKKEHR 0


STÖRUNG:
   RAISERROR (@sErrorMessage, 16, 1)
      -1 ZURÜCKBRINGEN


ENDE
Weitere Lösungen  
 
programming4us programming4us