<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Srinivas-V-V</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/srinivas-v-v/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/srinivas-v-v/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:50:28 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Logger for performance testing</title>
      <link>https://docs.microsoft.com/archive/blogs/srinivas-v-v/logger-for-performance-testing</link>
      <pubDate>Sun, 11 Oct 2015 23:25:40 GMT</pubDate>
      <dc:creator><![CDATA[SRINIVAS V V]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/srinivas-v-v/2015/10/11/logger-for-performance-testing/</guid>
      <description><![CDATA[About the Logger

Logging is an integral part of performance testing. The following method of...]]></description>
      <content:encoded><![CDATA[<strong>About the Logger</strong>

Logging is an integral part of performance testing. The following method of logging performance testing, (done) using coded UI test or selenium test using Visual Studio will help in getting better insights into
<ol>
 	<li>The response time for a transaction</li>
 	<li>The response time for a complete scenario</li>
 	<li>Finding out average response time</li>
 	<li>90th % response time.</li>
</ol>
Though there are multiple ways of logging such as text file based logging, logging in test context, this method provides easier mode of analysis of the results. Using the queries given in section 6, a user can get a holistic view of the response times for scenario/transaction; and import the results into excel and create graphical modals for better analysis. The other main advantage; is use of sql queries for analysis, compared to reading text file based logging.

&nbsp;

[Note]: There are different ways of invoking timers in and logging results, this is one such method that makes use of DateTime difference to calculate and log results into SQL. For simpler ways of invoking timers and noting the results, please refer "https://blogs.msdn.microsoft.com/geoffgr/updated-adding-timers-to-coded-ui-tests-running-in-load-tests/"

<strong>How to do it:</strong>

1. Create 2 tables [DataLog] and [ExceptionLog]

2. Create the coded UI project that does coded UI based clicks

3. Include the logger code [.cs file]

4. Include the connection strings in web.config

5. Add the code for logging before and after every transaction and scenario.

6. Collect the data using the SQL queries given.

&nbsp;

<strong>Step1</strong>

<strong>Create database Logging</strong>

<strong>Table creation</strong>

<span>USE</span> [Logging]

GO

/****** Object:  Table [dbo].[DataLog]    Script Date: 4/9/2015 4:39:31 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

<span>CREATE TABLE</span> [dbo]<span>.</span>[DataLog]<span>(</span>

[Id] [int] <span>IDENTITY</span><span>(</span>1<span>,</span>1<span>) NOT NULL,</span>

[MachineName] [nvarchar]<span>(</span>100<span>) NULL,</span>

[UserId] [nvarchar]<span>(</span>100<span>) NULL,</span>

[ScenarioName] [nvarchar]<span>(</span>100<span>) NULL,</span>

[ScenarioResponseTime] [nvarchar]<span>(</span>30<span>) NULL,</span>

[TransactionName] [nvarchar]<span>(</span>100<span>) NULL,</span>

[TransactionResponseTime] [nvarchar]<span>(</span>30<span>) NULL,</span>

[StartDateTime] [datetime] <span>NULL,</span>

[EndDateTime] [datetime] <span>NULL,</span>

[Misc] [nvarchar]<span>(</span>100<span>) NULL,</span>

PRIMARY KEY CLUSTERED

(       [Id] ASC

<span>)</span><span>WITH </span><span>(</span><span>PAD_INDEX </span><span>= </span><span>OFF</span><span>, </span><span>STATISTICS_NORECOMPUTE </span><span>= </span><span>OFF</span><span>, </span><span>IGNORE_DUP_KEY </span><span>= </span><span>OFF</span><span>, </span><span>ALLOW_ROW_LOCKS </span><span>= </span><span>ON</span><span>, </span><span>ALLOW_PAGE_LOCKS </span><span>= </span><span>ON</span><span>) </span><span>ON</span> [PRIMARY]

<span>) </span><span>ON</span> [PRIMARY]

GO

&nbsp;

<span>USE</span> [Logging]

GO

/****** Object:  Table [dbo].[ExceptionLog]    Script Date: 4/9/2015 4:39:50 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

<span>CREATE TABLE</span> [dbo]<span>.</span>[ExceptionLog]<span>(</span>

[ExceptionId] [int] <span>IDENTITY</span><span>(</span>1<span>,</span>1<span>) NOT NULL,</span>

[MachineName] [nvarchar]<span>(</span>100<span>) NULL,</span>

[UserId] [nvarchar]<span>(</span>100<span>) NULL,</span>

[ScenarioName] [nvarchar]<span>(</span>100<span>) NULL,</span>

[Exception] [nvarchar]<span>(</span>4000<span>) NULL,</span>

[ExceptionTime] [datetime] <span>NULL,</span>

PRIMARY KEY CLUSTERED

(

[ExceptionId] <span>ASC</span>

<span>)</span><span>WITH </span><span>(</span><span>PAD_INDEX </span><span>= </span><span>OFF</span><span>, </span><span>STATISTICS_NORECOMPUTE </span><span>= </span><span>OFF</span><span>, </span><span>IGNORE_DUP_KEY </span><span>= </span><span>OFF</span><span>, </span><span>ALLOW_ROW_LOCKS </span><span>= </span><span>ON</span><span>, </span><span>ALLOW_PAGE_LOCKS </span><span>= </span><span>ON</span><span>) </span><span>ON</span> [PRIMARY]

<span>) </span><span>ON</span> [PRIMARY]

GO

&nbsp;

<strong>Step2</strong>

Create your coded UI based project

&nbsp;

<strong>Step3</strong>

<strong>Copy paste this code into a cs file</strong>

using System;

using System.Collections.Generic;

using System.Configuration;

using System.Data;

using System.Data.SqlClient;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

&nbsp;

namespace Logger

{

public class Logger

{

private static SqlConnection con = null;

public List&lt;DataLog&gt; DataLogCollection = new List&lt;DataLog&gt;();

DateTime sc_startdateTime = new DateTime();

DateTime sc_enddateTime = new DateTime();

DateTime tr_startdateTime = new DateTime();

DateTime tr_enddateTime = new DateTime();

&nbsp;

public Logger(string _ScenarioName="undefined")

{

ScenarioName = _ScenarioName;

}

&nbsp;

//Singleton object

public static SqlConnection GetDataContext()

{

if (con == null)

{

string loggerConnectionString = ConfigurationManager.AppSettings.Get("LoggerConnectionString");

con = new SqlConnection();

con.ConnectionString = loggerConnectionString;

con.Open();

return con;

}

else

{

return con;

}

}

&nbsp;

public void ScenarioStart()

{

sc_startdateTime = DateTime.Now;

}

public void ScenarioEnd()

{

DataLog dataLog = new DataLog();

var dataContext = GetDataContext();

sc_enddateTime = DateTime.Now;

var ScenarioResponseTime = sc_enddateTime.Subtract(sc_startdateTime);

dataLog.MachineName = Environment.MachineName;

dataLog.UserName = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;

dataLog.ScenarioName = ScenarioName;

dataLog.ScenarioResponseTime = ScenarioResponseTime.ToString();

dataLog.TransactionName = null;

dataLog.TransactionResponseTime = null;

dataLog.StartDateTime = sc_startdateTime;

dataLog.EndDateTime = sc_enddateTime;

DataLogCollection.Add(dataLog);

StringBuilder sqlcommmand = new StringBuilder();

string tableName = ConfigurationManager.AppSettings.Get("TableName");

foreach (DataLog dataLogvalue in DataLogCollection)

{

sqlcommmand.Append("Insert into " + tableName.ToString() + " values('"+dataLogvalue.MachineName+"','"+dataLogvalue.UserName+"','"+dataLogvalue.ScenarioName+"','"+dataLogvalue.ScenarioResponseTime+"','"+dataLogvalue.TransactionName+"','"+dataLogvalue.TransactionResponseTime+"','"+dataLogvalue.StartDateTime+"','"+dataLogvalue.EndDateTime+"','');\r\n");

}

SqlCommand myCommand = new SqlCommand(sqlcommmand.ToString(), con);

myCommand.ExecuteNonQuery();

}

&nbsp;

public void TransactionStart(string TransactionName)

{

tr_startdateTime = DateTime.Now;

}

public void TransactionEnd(string TransactionName)

{

DataLog dataLog = new DataLog();

var dataContext = GetDataContext();

tr_enddateTime = DateTime.Now;

var TransactionResponseTime = tr_enddateTime.Subtract(tr_startdateTime);

dataLog.MachineName = Environment.MachineName;

dataLog.UserName = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;

dataLog.ScenarioName = ScenarioName;

dataLog.ScenarioResponseTime = null;

dataLog.TransactionName = TransactionName;

dataLog.TransactionResponseTime = TransactionResponseTime.ToString();

dataLog.StartDateTime = tr_startdateTime;

dataLog.EndDateTime = tr_enddateTime;

DataLogCollection.Add(dataLog);

}

&nbsp;

public void LogException(string ScenarioName, string exception)

{

ExceptionLog exceptionLog = new ExceptionLog();

var dataContext = GetDataContext();

exceptionLog.MachineName = Environment.MachineName;

exceptionLog.UserName = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;

exceptionLog.ScenarioName = ScenarioName;

exceptionLog.Exception = exception;

exceptionLog.ExceptionTime = DateTime.Now;

string tableName = ConfigurationManager.AppSettings.Get("ExceptionLogTable");

string sqlcommand = "insert into " + tableName + " values ('" + exceptionLog.MachineName + "','" + exceptionLog.UserName + "','" + exceptionLog.ScenarioName + "','" + exceptionLog.Exception.Replace("\"", string.Empty).Replace("'", string.Empty) +"','" + exceptionLog.ExceptionTime + "')";

SqlCommand myCommand = new SqlCommand(sqlcommand, con);

myCommand.ExecuteNonQuery();

}

&nbsp;

public void WriteToDB()

{

var dataContext = GetDataContext();

StringBuilder sqlcommmand = new StringBuilder();

string tableName = ConfigurationManager.AppSettings.Get("TableName");

foreach (DataLog dataLogvalue in DataLogCollection)

{

sqlcommmand.Append("Insert into " + tableName.ToString() + " values('" + dataLogvalue.MachineName + "','" + dataLogvalue.UserName + "','" + dataLogvalue.ScenarioName + "','" + dataLogvalue.ScenarioResponseTime + "','" + dataLogvalue.TransactionName + "','" + dataLogvalue.TransactionResponseTime + "','" + dataLogvalue.StartDateTime + "','" + dataLogvalue.EndDateTime + "','');\r\n");

}

SqlCommand myCommand = new SqlCommand(sqlcommmand.ToString(), dataContext);

myCommand.ExecuteNonQuery();

DataLogCollection = new List&lt;DataLog&gt;();

}

public string ScenarioName { get; set; }

}

&nbsp;

public class DataLog

{

public string MachineName { get; set; }

public string UserName { get; set; }

public string ScenarioName { get; set; }

public string ScenarioResponseTime { get; set; }

public string TransactionName { get; set; }

public string TransactionResponseTime { get; set; }

public DateTime StartDateTime { get; set; }

public DateTime EndDateTime { get; set; }

}

&nbsp;

public class ExceptionLog

{

public string MachineName { get; set; }

public string UserName { get; set; }

public string ScenarioName { get; set; }

public string Exception { get; set; }

public DateTime ExceptionTime { get; set; }

}

}

<strong>Step4</strong>

Add the following code in App settings

In case you have integrated security please change the first line of the connection string

&lt;appSettings&gt;
<pre>  &lt;add key="LoggerConnectionString" value="Data Source=&lt;&lt;servername&gt;&gt;;Initial Catalog=&amp;quot;&lt;&lt;DBName&gt;&gt;&amp;quot;;User ID=&lt;&lt;UserID&gt;&gt;;Password=&lt;&lt;Password&gt;&gt;"/&gt;  
  &lt;add key="TableName" value="DataLog"/&gt;
  &lt;add key="ExceptionLogTable" value="ExceptionLog"/&gt;
    &lt;add key="TimeforExecutionmin" value="5"/&gt;</pre>
<pre>&lt;/appSettings&gt;</pre>
&nbsp;

<strong>Step5</strong>

<strong>Adding the logging code to collect results in SQL</strong>

Logger.Logger obj = new Logger.Logger("<strong>&lt;&lt;Scenario Name&gt;&gt;</strong>")

var connection = Logger.Logger.GetDataContext();

//This is the higher level

<strong>obj.ScenarioStart()</strong>

<strong>&lt;&lt;Ur code&gt;&gt;</strong>

obj.TransactionStart("<strong>Transaction Name</strong>");

&lt;&lt;Ur code&gt;&gt;

obj.TransactionEnd("<strong>Transaction Name</strong>");

&nbsp;

obj.TransactionStart("<strong>Transaction Name</strong>");

&lt;&lt;Ur code&gt;&gt;

obj.TransactionEnd("<strong>Transaction Name</strong>");

<strong>obj.SenarioEnd()</strong>

&nbsp;

<strong>Step 6</strong>

<strong>Collecting Results</strong>

<strong>Query1</strong>

<strong>This gives you</strong>

<strong>Scenario Name, Avg Response Time, Total Time, Number of times Scenario Executed, Min response time, Max response time</strong>

<strong>Transaction Name, Avg Response Time, Total Time, Number of times Scenario Executed, Min response time, Max response time</strong>

<span>declare</span> @scnName <span>varchar</span><span>(</span><span>max</span><span>) = </span><span>'%Scenario Name%'</span>

<span>declare</span> @starttime <span>datetime </span><span>= </span><span>'2015-06-24 04:16:33.743'</span>

<span>declare</span> @endtime <span>datetime </span><span>= </span><span>'2015-06-24 09:19:33.743'</span>

select ScenarioName, TransactionName,

<span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>, </span><span>cast</span><span>(</span><span>cast</span><span>(</span><span>avg</span><span>(</span><span>cast</span><span>(</span><span>CAST</span><span>(LEFT(</span>ScenarioResponseTime<span>,</span> 12<span>) </span><span>as datetime</span><span>) </span><span>as float</span><span>)) </span><span>as datetime</span><span>) </span><span>as time</span><span>))</span>  ScenarioAvgTime<span>,</span>

<span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>, </span><span>cast</span><span>(</span><span>cast</span><span>(</span><span>sum</span><span>(</span><span>cast</span><span>(</span><span>CAST</span><span>(LEFT(</span>ScenarioResponseTime<span>,</span> 12<span>) </span><span>as datetime</span><span>) </span><span>as float</span><span>)) </span><span>as datetime</span><span>) </span><span>as time</span><span>))</span>  ScenarioTotalTime<span>,</span>

<span>COUNT</span><span>(</span><span>distinct</span><span>(</span>ScenarioName<span>))</span> CountofScenarios<span>,</span>

<span>MIN</span><span>(</span><span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>,</span> ScenarioResponseTime<span>))</span> MinScenarioResponseTime<span>,</span>

<span>MAX</span><span>(</span><span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>,</span> ScenarioResponseTime<span>))</span> MaxScenarioResponseTime<span>,</span>

<span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>, </span><span>cast</span><span>(</span><span>cast</span><span>(</span><span>avg</span><span>(</span><span>cast</span><span>(</span><span>CAST</span><span>(LEFT(</span>TransactionResponseTime<span>,</span> 12<span>) </span><span>as datetime</span><span>) </span><span>as float</span><span>)) </span><span>as datetime</span><span>) </span><span>as time</span><span>))</span> TransactionAvgTimeInSec<span>,</span>

<span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>, </span><span>cast</span><span>(</span><span>cast</span><span>(</span><span>sum</span><span>(</span><span>cast</span><span>(</span><span>CAST</span><span>(LEFT(</span>TransactionResponseTime<span>,</span> 12<span>) </span><span>as datetime</span><span>) </span><span>as float</span><span>)) </span><span>as datetime</span><span>) </span><span>as time</span><span>))</span>  TransactionTotalTimeInSec<span>,</span>

<span>COUNT</span><span>(</span>TransactionName<span>)</span> CountofTransactions<span>,</span>

<span>MIN</span><span>(</span><span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>,</span> TransactionResponseTime<span>))</span> MinTransactionResponseTime<span>,</span>

<span>MAX</span><span>(</span><span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>,</span> TransactionResponseTime<span>))</span> MaxTransactionResponseTime

<span>from</span>  [Logging]<span>.</span>[dbo]<span>.</span>[DataLog] <span>where</span> StartDateTime <span>between</span> @starttime <span>and</span> @endtime

<span>and</span> scenarioname <span>like</span> @scnName <span>group by</span> ScenarioName<span>,</span> TransactionName<span>;</span>

&nbsp;

<strong>Query2 - gives 90th percentile of the response time</strong>

<span>SELECT DISTINCT</span> ScenarioName<span>,</span> TransactionName <span>AS</span> ScName

<span>,</span><span>DATEDIFF</span><span>(</span>S<span>, </span><span>'00:00:00.000'</span><span>,</span><span>CONVERT</span><span>(</span><span>VARCHAR</span><span>,</span><span>DATEADD</span><span>(</span>ms<span>, (</span>

PERCENTILE_CONT<span>(</span>0.9<span>) </span><span>WITHIN GROUP </span><span>(</span><span>ORDER BY </span><span>DATEDIFF</span><span>(</span>MS<span>, </span><span>'00:00:00.000'</span><span>,</span> TransactionResponseTime<span>) ) </span>

<span>OVER </span><span>(</span><span>PARTITION BY</span> TransactionName<span>)),</span>0<span>),</span>114<span>)) </span><span>as </span><span>'90thpercentile'</span>

<span>FROM</span> dbo<span>.</span>DataLog <span>where</span> StartDateTime <span>between</span> @starttime <span>and</span> @endtime

<span>and</span> scenarioname <span>like</span> @scnName<span>;</span>

&nbsp;

<strong>Query3 - for specific transaction </strong>

<span>SELECT</span> TransactionName<span>, </span><span>count</span><span>(</span><span>distinct</span><span>(</span>StartDateTime<span>))</span> CountOfStart <span>, </span><span>count</span><span>(</span><span>distinct</span><span>(</span>EndDateTime<span>))</span> CountOfEnd <span>FROM</span> [Logging]<span>.</span>[dbo]<span>.</span>[DataLog]

<span>where</span> ScenarioName <span>like</span> @scnName <span>and</span> TransactionName <span>like </span><span>'%&lt;&lt;TransactionName&gt;&gt;%'</span>

<span>and</span> StartDateTime <span>between</span>  @starttime <span>and</span> @endtime

<span>group by</span> ScenarioName<span>,</span> TransactionName

&nbsp;

<strong> </strong>]]></content:encoded>
    </item>
    <item>
      <title>Re-initialization with Log Sequence Numbering (LSN) for  SQL Server Failover and Failback.</title>
      <link>https://docs.microsoft.com/archive/blogs/srinivas-v-v/re-initialization-with-log-sequence-numbering-lsn-for-sql-server-failover-and-failback</link>
      <pubDate>Mon, 24 Jun 2013 23:42:00 GMT</pubDate>
      <dc:creator><![CDATA[SRINIVAS V V]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/srinivas-v-v/2013/06/24/re-initialization-with-log-sequence-numbering-lsn-for-sql-server-failover-and-failback/</guid>
      <description><![CDATA[Log Squence Numbering (LSN) :&nbsp;Every record in the SQL Server&nbsp;transaction...]]></description>
      <content:encoded><![CDATA[<p><strong style="font-size: medium;"><span style="font-family: arial, helvetica, sans-serif;">Log Squence Numbering (LSN) :&nbsp;</span></strong><span style="font-size: small;"><span style="font-family: arial, helvetica, sans-serif;">Every record in the SQL Server&nbsp;</span><span style="font-family: arial, helvetica, sans-serif;"><a href="https://msdn.microsoft.com/en-us/library/ms190925(v=sql.105).aspx">transaction log</a>&nbsp;is&nbsp;uniquely identified by a log sequence number (LSN). LSNs are ordered such that if LSN2 is greater than LSN1, the change described by the log record referred to by LSN2 occurred after the change described by the log record LSN.</span></span></p>
<p><span style="font-family: arial, helvetica, sans-serif; font-size: small;">The following are the pre-requisites for performing Re-intialization with LSN</span></p>
<pre><strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">1. Distributor Server: </span></strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">It is the server that contains the distribution database and stores meta data, history data and transactions</span></pre>
<pre><strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">2. Publisher Server: </span></strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">It is the server that makes data available for replication for subscribers.</span></pre>
<pre><strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">3. Subscriber: </span></strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">It is the server that receives replicated data. we will have two subscribers in Failover. (i.e. Old subscriber and New Subscriber)</span></pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">a. Old Subscriber: Server which is in failed state/Disaster state</span></pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">b. New Subscriber: Server to which failover will be performed using LSN.</span></pre>
<pre><strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">4. Publisher DB: </span></strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">It is the source of data to be replicated on the publisher server.</span></pre>
<pre><strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">5. Subscriber DB: </span></strong><span style="font-family: arial, helvetica, sans-serif; font-size: small;">It is the destination database residing on subscriber server and receives replicated data.</span></pre>
<pre><strong><span style="font-size: small; font-family: arial, helvetica, sans-serif;">6. Publication: </span></strong><span style="font-size: small; font-family: arial, helvetica, sans-serif;">Its refers to publication name property of publisher.</span></pre>
<pre>&nbsp;</pre>
<pre><strong><span style="font-family: arial, helvetica, sans-serif; font-size: medium;">Steps for Performing Re-initialization with LSN:</span></strong> </pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">1. Finding the LSN number from the publisher.</span> </pre>
<pre class="scroll"><code class="mysql">select @Query = '<br /> SELECT * FROM '+@subscriber_db+'.dbo.MSreplication_subscriptions<br /> WHERE publisher = '''+@publisher+<br /> ''' AND publisher_db = '''+@publisher_db+<br /> ''' AND publication = '''+@publication+''';'</code></pre>
<pre class="scroll"><code class="mysql"><br /></code></pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">2. Validate the LSN with distributor.</span> </pre>
<pre class="scroll"><code class="mysql">SELECT @Query = '<br /> IF EXISTS(SELECT *<br /> FROM MSpublications p<br /> JOIN master..sysservers srv<br /> ON srv.srvid = p.publisher_id<br /> JOIN MSpublisher_databases d<br /> ON d.publisher_id = p.publisher_id<br /> JOIN MSrepl_transactions trans<br /> ON trans.publisher_database_id = d.id<br /> <br /> WHERE p.publication = '''+ $(publication) +'''<br /> AND p.publisher_db = '''+ $(publisher_db) +'''<br /> AND srv.srvname = '''+ $(publisher) +'''<br /> AND xact_seqno = '+ $(LSN) +'<br /> AND '+ $(LSN) +' &gt; p.min_autonosync_lsn)<br /> BEGIN<br /> PRINT ''The LSN: '+ $(LSN) +' is correct''<br /> END<br /> ELSE<br /> BEGIN<br /> PRINT ''The LSN: '+ $(LSN) +' is wrong''<br /> END <br /> <br /> '</code></pre>
<pre class="scroll"><span style="font-family: arial, helvetica, sans-serif; font-size: small;">3. Add subscription for the new subscriber on the publisher.</span></pre>
<pre class="scroll"><code class="mysql">select @Query = '<br /> EXEC sp_addsubscription<br /> @publication = N'''+$(publication)+''',<br /> @subscriber = N'''+$(subscriber)+''', <br /> @destination_db = N'''+$(subscriber_db)+''', <br /> @subscription_type = N'''+$(subscription_type)+''', <br /> @sync_type = N''initialize from LSN'', <br /> @article = N''all'', <br /> @update_mode = N''read only'', <br /> @subscriber_type = 0,<br /> @subscriptionlsn = '+$(LSN)+';<br /> '</code></pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">4. Adding subscription agent at the new subscriber</span></pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">a. For Pull based replication</span></pre>
<pre class="scroll"><code class="mysql">select @Query = '<br /> EXEC sp_addpullsubscription<br /> @publisher = N''' + $(publisher) + ''',<br /> @publication = N''' + $(publication) + ''',<br /> @publisher_db = N''' + $(publisher_db) + ''',<br /> @independent_agent = N''True'',<br /> @subscription_type = N''pull'',<br /> @description = N'' '',<br /> @update_mode = N''read only'',<br /> @immediate_sync = 0;<br /> <br /> EXEC sp_addpullsubscription_agent<br /> @publisher = N''' + $(publisher) + ''',<br /> @publisher_db = N''' + $(publisher_db) + ''',<br /> @publication = N''' + $(publication) + ''',<br /> @distributor = N''' + $(distributor) + ''',<br /> @frequency_type = 4,<br /> @frequency_interval = 1,<br /> @frequency_relative_interval = 0,<br /> @frequency_recurrence_factor = 0,<br /> @frequency_subday = 4,<br /> @frequency_subday_interval = 15,<br /> @active_start_time_of_day = 0,<br /> @active_end_time_of_day = 235959,<br /> @active_end_date = 99991231<br /> '</code></pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">b. For Push based replication</span></pre>
<pre class="scroll"><code class="mysql">select @Query = '<br /> EXEC sp_addpushsubscription_agent <br /> @publication = N''' + $(publication) + ''', <br /> @subscriber = N''' + $(subscriber) + ''', <br /> @subscriber_db = N''' + $(subscriber_db) + ''', <br /> @job_login = NULL, <br /> @job_password = NULL, <br /> @subscriber_security_mode = 1, <br /> @frequency_type = 4,<br /> @frequency_interval = 1,<br /> @frequency_relative_interval = 0,<br /> @frequency_recurrence_factor = 0,<br /> @frequency_subday = 4,<br /> @frequency_subday_interval = 15,<br /> @active_start_time_of_day = 0,<br /> @active_end_time_of_day = 235959,<br /> @active_end_date = 99991231,<br /> @dts_package_location = N''Distributor'';<br /> ' </code></pre>
<pre><span style="font-family: arial, helvetica, sans-serif; font-size: small;">5. Drop old subscriptions</span></pre>
<pre class="scroll"><code class="mysql">select @Query = '<br /> EXEC sp_dropsubscription<br /> @publication = N''' + $(publication)+''', <br /> @subscriber = N''' + $(subscriber)+''', <br /> @destination_db = N''' + $(subscriber_db)+''', <br /> @article = N''all'';<br /> '</code></pre>
<pre class="scroll"><code class="mysql"><br /></code></pre>
<pre class="scroll"><code class="mysql"><br /></code></pre>
<pre class="scroll"><code class="mysql"><br /></code></pre>
<pre class="scroll"><code class="mysql"><br /></code></pre>]]></content:encoded>
    </item>
    <item>
      <title>Setting up Always On Availability group on SQL Server 2012</title>
      <link>https://docs.microsoft.com/archive/blogs/srinivas-v-v/setting-up-always-on-availability-group-on-sql-server-2012</link>
      <pubDate>Mon, 24 Jun 2013 22:53:00 GMT</pubDate>
      <dc:creator><![CDATA[SRINIVAS V V]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/srinivas-v-v/2013/06/24/setting-up-always-on-availability-group-on-sql-server-2012/</guid>
      <description><![CDATA[Note: User is expected to have basic knowledge of Always On Availability groups.

Pre-requisites...]]></description>
      <content:encoded><![CDATA[<span style="font-family: arial, helvetica, sans-serif;font-size: small"><strong>Note:</strong> User is expected to have basic knowledge of Always On Availability groups.</span>

<span style="font-size: medium"><strong><span style="font-family: arial, helvetica, sans-serif">Pre-requisites :- Setting up Windows Server Failover Cluster (WSFC)</span></strong></span>
<ol>
 	<li><span style="font-family: arial, helvetica, sans-serif;font-size: small">Installation of Windows Server edition (2008 R2 or higher), SQL Server 2012, Windows Cluster + KB for quorum voting configuration, SQL Light Speed and DFS.</span></li>
 	<li><span style="font-family: arial, helvetica, sans-serif;font-size: small">The primary and the secondaries on the primary datacenter and disaster recovery datacenter should be part of the windows failover cluster configuration.</span></li>
</ol>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/8688.1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/8688.1.png" alt="" border="0" /></a></div>
<div></div>
<div><span style="font-family: arial, helvetica, sans-serif;font-size: small">3. Once the servers are joined to the windows failover cluster manager, the quorum is set. The vote for the primary nodes are set to 1 and for disaster recovery is set to 0, with a file share having vote to 1. (The file share is kept in order to maintain odd number of votes and node majority in the case of disaster on one of the nodes).</span></div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3034.2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3034.2.png" alt="" border="0" /></a></div>
<div></div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/1780.3.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/1780.3.png" alt="" border="0" /></a></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div><strong><span style="font-family: arial, helvetica, sans-serif;font-size: medium">Enabling Always On Availability group</span></strong></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div><span style="font-family: arial, helvetica, sans-serif;font-size: small">4.  After the installation of failover cluster, enable Always On Availability Group and add the nodes to primary, secondary and the disaster recovery nodes to the Availability  Group.</span></div>
<div></div>
<div></div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3782.4.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3782.4.png" alt="" border="0" /></a></div>
<div></div>
<div>

<span style="font-family: arial, helvetica, sans-serif;font-size: small"><strong>Note:</strong> While the availability group appears as a resource in the WSFC, you should not attempt to manage it with Failover Cluster Manager or WSFC-scoped interfaces. Instead, manage the availability group within the context of the SQL Server instance via SQL Server Management Studio, Transact-SQL, or Windows PowerShell. For more information about why you should not use Failover Cluster Manager or other WSFC-scoped interfaces, see the blog post <a href="https://go.microsoft.com/fwlink/?LinkId=255057">DO NOT use Windows Failover Cluster Manager to perform Availability Group Failover</a>.</span>

&nbsp;

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/4278.5.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/4278.5.png" alt="" border="0" /></a>

&nbsp;

<span style="font-family: arial, helvetica, sans-serif;font-size: small">The AlwaysOn Dashboard is a recommended way to quickly view the health of a specific availability group. In it you can see the location of the primary instance, the failover mode of the replicas, the synchronization state of the replicas, and the failover readiness of the various replicas. You can also access the AlwaysOn Health Events Extended Events session data directly from the dashboard in order to view recent availability group activity, state changes, and events. </span>

<span style="font-family: arial, helvetica, sans-serif;font-size: small"> </span>

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/5483.6.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/5483.6.png" alt="" border="0" /></a>

[Note: In order to understand more about Always on availability group, please have a read through of the white paper https://download.microsoft.com/download/D/2/0/D20E1C5F-72EA-4505-9F26-FEF9550EFD44/HomeDepot%20BCDR%20Whitepaper.docx]

</div>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server Replication</title>
      <link>https://docs.microsoft.com/archive/blogs/srinivas-v-v/sql-server-replication</link>
      <pubDate>Mon, 24 Jun 2013 21:49:53 GMT</pubDate>
      <dc:creator><![CDATA[SRINIVAS V V]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/srinivas-v-v/2013/06/24/sql-server-replication/</guid>
      <description><![CDATA[Replicating a database&nbsp;
In order to create replication for a database, create a new...]]></description>
      <content:encoded><![CDATA[<p><strong><span style="font-family: 'arial black', 'avant garde'; font-size: medium;">Replicating a database&nbsp;</span></strong></p>
<p><span style="font-family: arial, helvetica, sans-serif; font-size: small;">In order to create replication for a database, create a new publication as shown in the figure.</span></p>
<ol>
<li><span style="font-family: arial, helvetica, sans-serif; font-size: small;">Create publication on the publisher server.</span></li>
<li><span style="font-family: arial, helvetica, sans-serif; font-size: small;">Create subscription on either subscriber (in case of pull based subscription) or on the publisher ( in case of push based subscription).</span></li>
</ol>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/1667.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/1667.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/1667.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/1667.tmp.png" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3162.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3162.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3162.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3162.tmp.png" alt="" border="0" /></a></div>
<div>&nbsp;</div>
<div>
<p><span style="font-family: arial, helvetica, sans-serif; font-size: small;">Here SERVER1 can be distributor or it can also be on some other machine. For example purposes, SERVER1 is itself kept as publisher and distributor but in most real time scenarios, publisher, distributor and the DR-database are different physical machines.</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/5807.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/5807.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/5807.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/5807.tmp.png" alt="" border="0" /></a></p>
<p><span style="font-family: arial, helvetica, sans-serif; font-size: small;">Once the publication is created, create the subscription. The gui based steps for creating subscription are given below:</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/6724.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/6724.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/6724.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/6724.tmp.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><span style="font-family: arial, helvetica, sans-serif; font-size: small;">Specify whether the subscription is pull based or push based. Push based communication is used when&nbsp;</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/2262.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/2262.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/2262.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/2262.tmp.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/7282.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/7282.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/7282.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/7282.tmp.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3652.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3652.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3652.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3652.tmp.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/5582.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/5582.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/5582.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/5582.tmp.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/0755.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/0755.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/0755.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/0755.tmp.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/2337.tmp.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/2337.tmp.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/2337.tmp.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/2337.tmp.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Log shipping for SQL Server</title>
      <link>https://docs.microsoft.com/archive/blogs/srinivas-v-v/log-shipping-for-sql-server</link>
      <pubDate>Mon, 17 Jun 2013 04:21:00 GMT</pubDate>
      <dc:creator><![CDATA[SRINIVAS V V]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/srinivas-v-v/2013/06/17/log-shipping-for-sql-server/</guid>
      <description><![CDATA[The steps describe how to perform log shipping using GUI.
1. Assume machine on which log shipping...]]></description>
      <content:encoded><![CDATA[<p>The steps describe how to perform log shipping using GUI.</p>
<p>1. Assume machine on which log shipping is performed as primary.</p>
<p>&nbsp;&nbsp;&nbsp; PRIMARY = //MACHINE-NAME/ (or) //IP-ADDRESS/</p>
<p>&nbsp;&nbsp;&nbsp; PRIMARY = SECONDARY but it can also be different.</p>
<p>2. Create a database =&gt; AdventureWorks on PRIMARY</p>
<p>&nbsp;&nbsp; use AdventureWorks</p>
<p>&nbsp;&nbsp; create table employee ( name varchar(20), age int);</p>
<p>&nbsp;&nbsp; insert into employee values ('variable', 20)</p>
<p>&nbsp;&nbsp; select * from employee</p>
<p>3. Create database =&gt; Adv1 on Secondary.</p>
<p>&nbsp;&nbsp;&nbsp;Logshipping has to be done from Adventureworks to Adv1.</p>
<p>&nbsp;&nbsp; Note: Log shipping can only be applied at the database level.</p>
<p>4. Setting recovery model</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3750.pic1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3750.pic1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3750.pic1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3750.pic1.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>5. Setting the transaction log shipping</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/1425.pic1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/1425.pic1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/1425.pic1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/1425.pic1.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>6. Setting primary server setting</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/2450.pic1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/2450.pic1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/2450.pic1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/2450.pic1.png" alt="" border="0" /></a></p>
<p>For testing purpose set the scheduled time or 1 min and&nbsp;&nbsp;in case of actual scenario leave it to default 15 min.</p>
<p>7. Adding secondary server</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3487.pic1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3487.pic1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/3487.pic1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/3487.pic1.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>8. Secondary server = Primary server in our scenario</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/7851.pic1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/7851.pic1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/7851.pic1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/7851.pic1.png" alt="" border="0" /></a></p>
<p>9. Restoring in secondary</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/6064.pic1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/6064.pic1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/80/6064.pic1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-59-80/6064.pic1.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Once jobs are running properly we have to perform breaking of logshipping.</p>
<p>Again go to properties of the database in PRIMARY SERVER. In Transaction Log shipping uncheck the check box which states enable transaction log shipping. This will disconnect the server. Once disconnected, the new database on the secondary will show restoring.</p>
<p>For bringing Adv1 online use the following command:</p>
<p>RESTORE DATABASE [Adv1] WITH RECOVERY</p>
<p>&nbsp;Note: To test log shipping - insert a record in AdventureWorks <strong><em>just before breaking log shipping step </em></strong>and wait till the jobs complete. Once the jobs complete and we break log shipping the changes will get reflected in Adv1.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>