使用tsql脚本还原日志文件

时间:2017-03-17 20:19:50

标签: sql tsql sql-server-2012

您好我的c盘中的日志文件为databasename_yyyymmddhhmm.trn0 formate。我们每30分钟获得3个事务日志文件,以0,1,2结尾 我正在使用

Restore database [databasename]
From disk=N 'c:\foldername\databasename_yyyymmddhhmm.trn0',
Disk = N 'c:\foldername\databasename_yyyymmddhhmm.trn1',
Disk= N 'c:\foldername\databasename_yyyymmddhhmm.trn2'
With norecovery
Go

恢复日志文件。但是我希望每30分钟使用一个时间戳每30分钟更改一次连续进程 例如:databasename _201701260700.trn0 30分钟后,我们得到另一个文件,如databasename_201701260730.trn0 那么我怎样才能“改变我的查询”,以便我可以在sql server agent作业中每30分钟运行一次,并改变时间戳。

提前致谢

1 个答案:

答案 0 :(得分:0)

嗯,你不能确定日志文件会有你想要的确切时间,所以我会用以下内容获取文件:

SUBSTRING

然后,更新该表以使用LEFTRIGHTupdate #FileNames set LogTime = left(right('subdirectory',17),12) 将文件名解析为LogTime,以获取日志文件的yyymmddhhmm。这是一个例子:

select left(right('c:\foldername\databasename_yyyymmddhhmm.trn0',17),12)

基本上这样做:

this.populateCodeList = function (ptNames_, listSelector_) {

    if (!ptNames_) { return self.displayError("Invalid pt name", "populatecodeList"); }
    if (!ptNames_.length) { return self.displayError("Invalid pt name", "populatecodeList"); }

    if (!listSelector_) { return self.displayError("Invalid list selector", "populatecodeList"); }

    var html = "";

    $_.each(ptNames_, function (ptName_) {

        var pt = self.registry.pt[ptName_];

        if (!pt) { return self.displayError("Invalid PT: " + ptName_, "populateCodeList"); }

        $_.each(pt.codes, function (index_, code) {

            if (!code || !code.id || !code.name) { return self.displayError("Invalid code at index " + index_, "populateCodeList"); }

            html += "<option value='" + code.id + "'>" + code.name + "</option>";
        });

    $_(listSelector_).html(html);
};

然后,使用文件名构建您的dyamic sql,基于表中的最后3个。 Booyakasha!