SQL SERVER – SSMS: Transaction Log Shipping Status Report

History has its own way to define now civilizations thrived. Most of the cities flourished in the river side and transporting lumber was one of the key activity. Most of the cities like Seattle and many others have this boom and bust life. The idea here was to cut the timber upstream and use the natural flow of rivers to transport to factories downstream using the river. These are classic and wonderful examples of how we typically work with Log-Shipping in SQL Server too. This blog is about Transaction Log Shipping Status report.

Ensuring the availability of databases, meeting SLA and performance tuning are some of the top priorities for today’s database administrators (DBAs). One of the important work of DBA is to monitor the database servers and make sure the application is working fine. The monitoring might involve automatic alerts, running scripts or looking at some dashboard. Even for high availability solutions, we need some kind of monitoring mechanism. One of the traditional high availability solution is Log Shipping.

As the name suggests, Log-shipping is based on transaction log backups getting shipped from one server to one or more servers on the other side. For understanding this you need to know basics of transaction log backups. First, log backups can be taken from the database which is in full or bulk logged recovery model. In the simple recovery model, transaction log backups are not allowed because every checkpoint flushes the transaction log file. In other two recovery models log backup would do flush. Another basics of log shipping is that all log backups form a chain. T1, T2 and T3 must be restored in sequence. Missing any one the file would cause an error message during restore. In log shipping, backup, copy and restore is done automatically. The SQL Agent service does that for us. Since we can ship to multiple servers, backup location is shared so that other servers can get a copy of that file to perform the restore. Source server in technical terms is called as the primary server. Rest all servers which are at receiving end are called as a secondary server. You would also hear monitor server, which is responsible to check the health of copy, backup and restore job. If the jobs are not running properly, then secondary would be behind primary server and would defeat the purpose of high availability. Based in the threshold defined, monitor server can raise alerts so that corrective action can be taken.

This is the last report in the list under server node. Based on the name of the report, you might have already guessed that it can be used to “see” the status of log shipping status.

SQL SERVER - SSMS: Transaction Log Shipping Status Report reportlaunch1

Solarwinds

The important note about this report is that the data shown in the column would be dependent on the server where we launch the report. Here is the report, when launched from Primary Server.

SQL SERVER - SSMS: Transaction Log Shipping Status Report reportlaunch2

If we notice, information about backup section is populated. This is because the report doesn’t make a remote connection to check secondary server status. If the report is launched from a Secondary Server the output would be as below:

SQL SERVER - SSMS: Transaction Log Shipping Status Report reportlaunch3

The information about copy and restore related information is populated automatically because those are available on secondary server.

If we configure monitor server in log-shipping (which I have not done) and launch report there, we can see information about all three steps (i.e. backup, copy and restore)

The good part about the report is that it shows the alarming pair in red color. To demonstrate, I have configured log shipping for two databases, and for one, I have disabled the backup, copy and restore jobs so that alerts are raised and we can see the impact on report.

You may wonder how this information is fetched. This has the simplest possible query behind the scene.

EXEC sp_help_log_shipping_monitor

As per Books online – “Returns a result set containing status and other information for registered primary and secondary databases on a primary, secondary, or monitor server.”

If you see anything in red color, you need to start investigation further to find the cause of delay. What is the most common cause you have observed, which causes delay in log shipping? Networking, Disk slowness or something else? Please comment and let me know.

Reference: Pinal Dave (https://blog.sqlauthority.com)

Solarwinds
, , , ,
Previous Post
SQL SERVER – How to Format and Refactor Your SQL Code Directly in SSMS and Visual Studio
Next Post
MySQL – UDF – Validate Integer Function

Related Posts

5 Comments. Leave new

  • Hi pinal ,

    I am Atul from Mumbai i want two solutions for my problem as below,

    1)
    I want entire steps with code if possible for restoring the log shipping if my .trn log file got deleted or corrupted on principal server without re-configuring log shipping?

    2)
    I want to partition an existing table with entire script and example?

    Thanks in Advance..

    Reply
  • I see that the logshipping report is very useful but I will like to filter only the OUT OF SYNC Status and not the IN SYNC. Any suggestion

    Reply
  • Hi Jaime, Give this script a go on or secondary server (DR)


    select ls.primary_server,ls.primary_database,lsd.restore_delay,
    DATEDIFF(mi,lms.last_restored_date,getdate()) as time_since_last_restore,
    lms.last_copied_date,lms.last_restored_date,lms.last_copied_file,
    lms.last_restored_file,
    lsd.disconnect_users,ls.backup_source_directory,
    ls.backup_destination_directory,ls.monitor_server

    from msdb.dbo.log_shipping_secondary ls
    join msdb.dbo.log_shipping_secondary_databases lsd
    on lsd.secondary_id=ls.secondary_id
    join msdb.dbo.log_shipping_monitor_secondary lms
    on lms.secondary_id=lsd.secondary_id

    WHERE
    lms.last_restored_date < DATEDIFF(mi,lms.last_restored_date,getdate())

    Reply

Leave a Reply

Menu