Monday, April 11, 2011

Script of Getting OS Version using Powershell



Powershell makes it easy to get information from remote servers.

Below is the query to find OS Version of all the remote servers you are connected with-

Step1- Create the list of all the servers in a notepad with name "serverlist.txt". I have saved this file on location "D:\Powershell" you can change it with your own location.

Step2- Execute below script-

PS C:\Windows\system32>$serverlist = Get-Content "D:\Powershell\serverlist.txt"
PS C:\Windows\system32>foreach($server in $serverlist)
{
$serverversion = Get-WmiObject -computer $server -cl Win32_OperatingSystem
write-output $server, $serverversion.version | out-file "D:\Powershell\OSVersion.txt" -append
}

You can also save the script in a notepad and save it with extension ".ps1". When you will execute the file OS Version for all the servers in the server list will store in the OSVersion file.

Saturday, April 9, 2011

Error 1067: The cluster service is stopped on passive node of my two node sql cluster. It throws following error when I try to start this:

This is found that the cluster service in one of the passive stops. This throws following error when I try to start this.

Error 1067: The process terminated unexpectedly

I verified the password under which this cluster service is running. This account is perfect. So there should be some other problem.

Let's go ahead and see the problem in the cluster.log file.

Info from %WINDIR%\Cluster\cluster.log is as follows:

WARN [EVT] EvtBroadcaster: EvPropEvents for node 2 failed. status 1727
WARN [NM] RpcExtErrorInfo: Error info not found.

Error from clusterlog

Error: Failed to read (sector 12), error 170. and Failed to write (sector 12), error 170.


1. started from cmd. net start clussvc
2. The Windows Firewall/Internet Connection Sharing service should neither be enabled nor set to start automatically.

FmGetQuorumResource failed, error 170. Failed to read. Failed to form cluster, status 5086.

Follwoing was the problem:

The Admin NIC threw an error. This caused the netowrk connectionos in the cluster disabled. I disabled and enabled the NIC and this started working.

Regards,
tuitionaffordable

Saturday, February 19, 2011

Sql Server Error 8951 Data row does not have a matching index row in the index



The error 8951 emerges most often when there is a duplicate row exists on PK. You would not be able to find the duplicate row

till you drop the PK and try as follows:

Let's Understand: There is a simple table EmployeeInfo where the PK is created on Empid, Rid, KeyInfo, DateTimeSlot columns. There are duplicate rows in the table for the columns on which PK is established but following query throws only one value for the following query even though two rows exist:

select Empid, Rid, KeyInfo, DateTimeSlot, count(1)
from Tuitionaffordable..EmployeeInfo
GROUP BY Empid, Rid, KeyInfo, DateTimeSlot
HAVING COUNT(1) > 1

Let's drop the PK and run the above query again. This shows me duplicate values for the columns on which PK is created. You need to filter the bad data out or modify these rows to avoid this info.

Let's again restore the same DB on a Test server and use following command for any specific value where this had duplicate rows:

select Empid, Rid, KeyInfo, DateTimeSlot, count(1)
from Tuitionaffordable..EmployeeInfo
where LTRIM(RTRIM(Empid)) = 97
and LTRIM(RTRIM(Rid))=2
and KeyInfo = 'ACAF387865567973E43C3ADB96C'
and DateTimeSlot= '2011-01-29 00:00:00.000'

This doesn't show the duplicate rows but following query will show you the data

select Empid, Rid, KeyInfo, DateTimeSlot,count(bit_delete)
from Tuitionaffordable..EmployeeInfo
where LTRIM(RTRIM(Empid)) = 97
and LTRIM(RTRIM(Rid))=2
and LTRIM(RTRIM(KeyInfo)) = 'ACAF31DBC69556EA9A973E43C3ADB96C'
and DateTimeSlot= '2011-01-29 00:00:00.000'
GROUP BY Empid, Rid, KeyInfo, DateTimeSlot

Following is the data:



Empid Rid KeyInfo DateTimeSlot (No column name)
97 2 ACAF387865567973E43C3ADB96C 2011-01-29 00:00:00.000 1
97 2 ACAF387865567973E43C3ADB96C 2011-01-29 00:00:00.000 1

The problem is in your DateTimeSlot column. drop the PK and this will catch where your duplicate data is.

Regards,
http://tuitionaffordable.webstarts.com

Tuesday, February 8, 2011

Restoring the stripped backup Files







The blog can give you good understanding on "MSSQLServer stripped backup".


Why anyone wants to go to stripped backups?
The answer is that when you have your drives on SAN and you want to use the I\O

from each more than one SAN while taking the backup then this is a good option to go for the stripped backups. Another point is that in some scenario the free space in one drive is not enough to accomodate your complete backup file.

After you are clear on why you decide stripping the backup file, lets talk on how to stripe the backupfile.

Command to create the stripped backups

BACKUP  TO
DISK
= 'E:\MSSQL\BAK\Tuitionaffordable_1of2.BAK'

,DISK = 'J:\MSSQL\BAK\Tuitionaffordable_2of2.BAK'
WITH  INIT

Let's go ahead and restore the command

RESTORE   DATABASE Tuitionaffordable
WITH   RECOVERY, REPLACE



FROM DISK= 'K:\MSSQL\Test\Tuitionaffordable_1of4.BAK'

,DISK = 'K:\MSSQL\Test\Tuitionaffordable_2of4.BAK'
,DISK= 'K:\MSSQL\Test\Tuitionaffordable_3of4.BAK'
,DISK= 'K:\MSSQL\Test\Tuitionaffordable_4of4.BAK'

There is one more important thing. In case your destination server doesn't have enouth free space in the corresponding drives then above command will fail. Backup file has the information where it needs to create the mdf, ndf and ldf files. Let's take a scenario when you are going to MOVE all the files to only one drive eg K because you have enough free space only in K drive of your destination server. The command will be as follows:

RESTORE DATABASE Tuitionaffordable
FROM DISK= 'K:\MSSQL\Test\Tuitionaffordable_1of4.BAK',

DISK= 'K:\MSSQL\Test\Tuitionaffordable_2of4.BAK',
DISK= 'K:\MSSQL\Test\Tuitionaffordable_3of4.BAK',
DISK= 'K:\MSSQL\Test\Tuitionaffordable_4of4.BAK',
WITH RECOVERY, REPLACE  

MOVE 'Tuitionaffordable' TO 'K:\MSSQL\Test\Tuitionaffordable.MDF',
MOVE 'Tuitionaffordable_Data2' TO 'K:\MSSQL\Test\Tuitionaffordable_Data2.NDF',
MOVE 'Tuitionaffordable_Data3' TO 'K:\MSSQL\Test\Tuitionaffordable_Data3.NDF',
MOVE 'Tuitionaffordable_Data4' TO 'K:\MSSQL\Test\Tuitionaffordable_Data4.NDF',
MOVE 'Tuitionaffordable_Data5' TO 'K:\MSSQL\Test\Tuitionaffordable_Data5.NDF',
MOVE 'Tuitionaffordable_Data6' TO 'K:\MSSQL\Test\Tuitionaffordable_Data6.NDF',
MOVE 'Tuitionaffordable_Data7' TO 'K:\MSSQL\Test\Tuitionaffordable_Data7.NDF',
MOVE 'Tuitionaffordable_Data8' TO 'K:\MSSQL\Test\Tuitionaffordable_Data8.NDF',
MOVE 'Tuitionaffordable_Data9' TO 'K:\MSSQL\Test\Tuitionaffordable_Data9.NDF',
MOVE 'Tuitionaffordable_Index' TO 'K:\MSSQL\Test\Tuitionaffordable_Index.NDF',
MOVE 'Tuitionaffordable_Index2' TO 'K:\MSSQL\Test\Tuitionaffordable_Index2.NDF',
MOVE 'Tuitionaffordable_Log' TO 'K:\MSSQL\Test\Tuitionaffordable_Log.lDF'

Monday, January 24, 2011

Logshipping Error: "Skipping log backup file" and "Could not apply log backup file"



This was a bad day for log shipping. I was on a leave for last two days and got my junior DBA screeming over logshipping latency as soon I stepped in.

DBA got many skip messages in logshipping as follows:

2011-01-24 21:50:11.17 Skipping log backup file 'j:\logshipping\Tuitionaffordable\Tuitionaffordable_20110123100410.trn' for secondary database 'Tuitionaffordable' because the file could not be verified.

Another interesting error was as follows:

2011-01-24 21:50:10.92 *** Error: Could not apply log backup file 'j:\logshipping\Tuitionaffordable\Tuitionaffordable_20110123100410.trn' to secondary database 'Tuitionaffordable'.(Microsoft.SqlServer.Management.LogShipping) ***
2011-01-24 21:50:10.92 *** Error: Cannot open backup device 'j:\logshipping\Tuitionaffordable\Tuitionaffordable_20110123100410.trn'. Operating system error 32(The process cannot access the file because it is being used by another process.).
RESTORE LOG is terminating abnormally.(.Net SqlClient Data Provider) ***

Let me discuss about these errors one by one.

Error 1 indicates that some transactional log file is missed in between. It just means that log chain is broken and you need to copy those logs manually to the secondary server.


Error 2 indicates that the log file is corrupt. Let's run following command to verify the log file.

RESTORE VERIFYONLY
FROM DISK = 'J:\logshipping\Tuitionaffordable\bak\Tuitionaffordable_20110123100410.trn'

Msg 3203, Level 16, State 1, Line 1
Read on "J:\logshipping\Tuitionaffordable\bak\Tuitionaffordable_20110123100410.trn" failed: 13(The data is invalid.)
Msg 3013, Level 16, State 1, Line 1
VERIFY DATABASE is terminating abnormally.

And this told that your log file is invalid. This happens when you use robocopy or xcopy to transfer file manually and your session is logged off. So get those files again from primary DB manually. I prefer to create a job and run it so that session logoff doesn't cause any problem.

Most of the readers of this blog also read following interview questions so linking them here:
Powershell Interview Questions and Answers
SQL Server DBA “Interview Questions And Answers”
SQL Azure Interview Questions and Answers Part - 1



Regards,
http://tuitionaffordable.webstarts.com

Sunday, January 16, 2011

Windows Azure Interview Questions and Answers


Custom Search
Want to prepare in ten minutes - read article Interview and Beyond in 10 Min

Qu1: What is Windows Azure?
Ans: Windows Azure is Microsoft Cloud Computing OS. Someone needs to worry about the h\w requirement, n\w requirement and the correct OS and much other stuff when he starts designing an application. Windows Azure will help the developer to get rid of these things and let him concentrate on main area which is nothing but automation and business needs.  
Qu2: What is fabric?
Ans: In the Windows Azure cloud fabric is nothing but a combination of many virtualized instances which run client application.
Qu3: What is the downtime for applications in case of any patching?
Ans: Windows Azure will have replicas for each and every application and provide zero downtime in case of any security patching.
Qu4: How many copies of data are maintained in Windows Azure?
Ans: Windows Azure provides you with three copies of data. This makes your application running on very reliable data.
Qu5: What is queue storage in the Windows Azure?
Ans: Queue storage gives you capability of sending the small data just as messages. Queue storage basically helps informing the task to the worker threads.


Most of the readers of this blog also read following interview questions so linking them here:
Powershell Interview Questions and Answers
SQL Server DBA “Interview Questions And Answers”
SQL Azure Interview Questions and Answers Part - 1


Regards,
http://tuitionaffordable.webstarts.com

Friday, January 14, 2011

MS SQL SERVER 2008 Fix Fragmented Index



Who Should Read This Blog: MS SQL Server DBA facing following issues:

1. MS SQL Server DBA - Index getting fragmented often.
2. MS SQL Server DBA - Index not being used by the queries properly.

I can see many DBAs asking the same questions again and again regarding index fragmentation. Most of them take a wrong path to fix this problem. Let's understand how index fragmentation happens and how to fix this.

Index fragmentation is of two types: Internal and External. Internal is not very harmful. Let's talk External now.

Before you start fixing index fragmentation, you should be able to identify whether the system is OLTP or OLAP. Please never go for high fill factor if you have an OLTP system and low fill factor if you have an OLAP system.

Let's Understand: If you go for high fill factor then this means you are allowing more data
to absorbe into the index pages. And when new data will come in the order, page split will
occur. So wait before you look for high fill factor. The same rule applies on Low fill
factor also. If your system is OLAP then never ever go for low fill factor as this will
unnecessarily consume the space on each page. So the key is to understand your system
before you understand the problem.

Reason of Index Fragmentation:

1. Autoshrink. Verify that autoshrink is not on. The sql server will cost high fragmentation in case it needs to shrink the data. I believe to confirm index defragmentation as soon as you ever need to shrink the DB.

2. Having less Fill factor on OLTP env can cause the more page splits. Please understand your system before you go for the fill factor and index managment. You can fix the fill factor with following command.

ALTER INDEX PK_Powershelltute ON [Tuitionaffordable].dbo.Powershelltute REBUILD WITH
(ONLINE=ON, MAXDOP=1, SORT_IN_TEMPDB=ON, FILLFACTOR=95)

3. Following is the query where you can identify the fill factor of your tables:

SELECT  tbl.name AS table_name,
        indx.name AS index_name,
        indx.fill_factor
FROM    sys.tables tbl
        JOIN
        sys.indexes indx
        ON tbl.object_id = indx.object_id
WHERE
        indx.type in (1,2)
ORDER BY
        tbl.name,
        indx.name


Tuesday, January 11, 2011

SQL SERVER 2008 R2 - Trasaction and Isolation Levels - "Cannot roll back Transaction. No transaction or savepoint of that name was found."



Who Should Read This Blog: DBA who wants to understan how Transaction works.

Let's run following command first:

1. SELECT @@TRANCOUNT
--Result 0

2. DBCC OPENTRAN()
--Result as follows
Transaction information for database 'Tuition'.
Oldest active transaction:
    SPID (server process ID): 54
    UID (user ID) : -1
    Name          : Affordable
    LSN           : (3073:52373:1)
    Start time    : Jan 11 2011  6:23:47:993PM
    SID           : 0x0105000000000005150000001ac6c4f30376dea8123bc97be8030000
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

So the difference between these two commands are as follows:

1. @@TRANCOUNT will tell you how many open transactions are there whereas DBCC OPENTRAN() tells only about the oldest trasaction.

2. @@TRANCOUNT will tell you the open transaction as soon as you run BEGIN TRAN but DBCC OPENTRAN() will tell some information only when any other command is run under BEGIN TRAN.

There is more to understand about the transactions and two popular ISOLATION Levels ie READ COMMITTED AND READ UNCOMMITTED:

Let's create a simple test table TestTran with a column server. Populate the table with any data.

Execute the commands as follows:

SELECT @@TRANCOUNT --0
DBCC OPENTRAN()
No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Let's run following command now and verify the difference between @@TRANCOUNT and DBCC
OPENTRAN()
BEGIN TRAN Tuition

Let's verify

SELECT @@TRANCOUNT --1
DBCC OPENTRAN()
No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

I want to add one popular error in the blog which most of the DBAs would get when they try to rollback the transaction. Use follwoing code to see the error:

BEGIN TRAN Affordable

ROLLBACK tran affordable
Msg 6401, Level 16, State 1, Line 1
Cannot roll back Affordable. No transaction or savepoint of that name was found.


Try this now:

ROLLBACK tran Affordable
Command(s) completed successfully.

Now this is the time to go ahead with understanding how nested transactions behave:


Custom Search
Run following command:

BEGIN TRAN Affordable1
UPDATE TestTran
SET Server= 'Affordable1'


BEGIN TRAN Affordable2
UPDATE TestTran
SET Server= 'Affordable2'


BEGIN TRAN Affordable3
UPDATE TestTran
SET Server= 'Affordable3'


Now we shall try to rollback the last trans Affordable3. We get following error msg:

Msg 6401, Level 16, State 1, Line 1
Cannot roll back Afford. No transaction or savepoint of that name was found.


You can commit any internal transaction but cann't rollback. Now if you rollback the transaction the changes affected by the  internal transaction would go away.

Let's also understand READ COMMITTED and READ UNCOMMITTED Transaction Isolation Level.

Let's run following command on one connection.

BEGIN TRAN Affordable1
UPDATE TestTran
SET Server= 'Affordable1'


Run following command on another session

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT *
FROM TestTran

The session will hung as you asked the sql server to show you only committed data.

Now run following command on another session

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT *
FROM TestTran

This data is nothing but the "dirty read" because if you rollback the transaction in the previous session then the data would change.




Monday, January 10, 2011

Cost Analysis Among EXISTS (SELECT 1), EXISTS (SELECT COUNT(1)), EXISTS (SELECT *) AND EXISTS (SELECT TOP 1)



Let's understand how 'SELECT 1', 'SELECT COUNT(1)', 'SELECT *' and 'SELECT TOP 1' would behave when they are called in the WHERE EXISTS clause. Let's look at following queries and find out which one will cost least.

Query 1:
SELECT a.ProductId, a.ProductName
FROM Product.Catalog AS a
WHERE EXISTS
(SELECT *
FROM Product.Products AS b
WHERE a.ProductId = b.ProductId
AND a.ProductName = 'RAM');
GO

Query 2:
SELECT a.ProductId, a.ProductName
FROM Product.Catalog AS a
WHERE EXISTS
(SELECT 1
FROM Product.Products AS b
WHERE a.ProductId = b.ProductId
AND a.ProductName = 'RAM');
GO

Query 3:
SELECT a.ProductId, a.ProductName
FROM Product.Catalog AS a
WHERE EXISTS
(SELECT TOP 1
FROM Product.Products AS b
WHERE a.ProductId = b.ProductId
AND a.ProductName = 'RAM');
GO

Custom Search
Query 4:
SELECT a.ProductId, a.ProductName
FROM Product.Catalog AS a
WHERE EXISTS
(SELECT COUNT(1)
FROM Product.Products AS b
WHERE a.ProductId = b.ProductId
AND a.ProductName = 'RAM');
GO

There is a grave misconception among DBAs and I saw most of them choosing query 3 and 4. The clue is that work under 'WHERE EXISTS' completes as soon as the first record is returned. Query 1 and 2 are same here. Now Query 3 is more costlier than the first two and query 4 is most costly. Also query 4 is nowhere equivalent to others as this will always execute even this returns 0.

We can arrange the queries Cost wise: query 1 = query 2 < query3 < query 4


Thursday, January 6, 2011

Comparison between Litespeed Backup and Native Backup Compression



Following article would help you understand the benefit of taking backup using litespeed. The backup file size with litespeed is far lighter than the native backup with compression. This is a well known fact that the compression of any backup depends on the data in the DB. This is why the ratio of this analysis can vary in different scenarios. I tested this with 5 different kind of DBs and always got better results with Litespeed. Let’s walk through:
Database size- 3GB
Comparison between native backup and litespeed backup-

--Native Backup
BACKUP DATABASE Tower
TO DISK= 'D:\towerbknative.bak'
WITH COMPRESSION


Custom Search
--Litespeed Backup
EXEC master.dbo.xp_backup_database
@database='Tower'
   , @filename='D:\towerbknative.bak'
   , @init=1
   , @compressionlevel = 8
   , @encryptionkey='Password' 

--Native Restore
RESTORE DATABASE Tower
FROM DISK= 'D:\towerbknative.bak'

--Litespeed Restore
EXEC master.dbo.xp_restore_database
@database='Tower'  
   , @filename='D:\towerbknative.bak'
   , @encryptionkey='Password'
Considering the Newbies in litespeed, let me explain how to take the litespeed backup at Litespeed console.
Step 1- Go to Backup Manager wizard in LiteSpeed consol
Step 2- Select Backup type as Fast Compression-















Step 3- Next > Select the backup destination>Next Fast Compression type- Select Self-containded backup sets.













Step 4- Next>Next> Compression :Select Compression level as 8 which is highest level of compression.
Give your encryption password











Step 5- Finish. Your backup is created in the destination.
In my case the backup was of 3GB and my LiteSpeed backup size after fast Compression, is only 753KB.
You can see the status of your backup job in the job manager window by clicking Cntr+5:

Same way you can restore the DB using Litespeed Restore Backup Wizard in Backup Manager.-


Regards,
http://tuitionaffordable.webstarts.com

Sql Job Failure - Unable to Determine if the Owner (PROD\tuitionaffordable) of Job has Server Access "error code 0x2"



Unable to determine if the owner (PROD\tuitionaffordable) of job  has server access error code 0x2

Got following error for some job which runs every day without any issue-
Error 
Date                      1/6/2011 2:25:00 PM
Log                         Job History (Tuitionaffordable-REPLDB-Tuition-28)

Step ID                 0
Server                   Tuitionaffordable
Job Name                            Tuitionaffordable-REPLDB-Tuition-28
Step Name                         (Job outcome)
Duration                              00:00:09
Sql Severity                        0
Sql Message ID                 0
Operator Emailed                           
Operator Net sent                          
Operator Paged                               
Retries Attempted                          0

Message
The job failed.  Unable to determine if the owner (PROD\tuitionaffordable) of job Tuitionaffordable-REPLDB-Tuition-28 has server access (reason: Could not obtain information about Windows NT group/user 'PROD\tuitionaffordable', error code 0x2. [SQLSTATE 42000] (Error 15404)).

Let's Understand: The error is thrown because the account PROD\tuitionaffordable is either disabled or doesn't have access to the shared folders where the job tries to save/access files.

Solution: Change the owner of the job to some other account which has access to the shared folders where the job tries to save/access files.



Another Problem: What if there are 50 jobs with the same owner id and I want all of them to change.

Solution:
UPDATE sysjobs
SET    owner_sid = 0x01
FROM   sysjobs
INNER  JOIN  sysjobhistory hist
ON     hist.job_id = sysjobs.job_id
AND    hist.run_status = 0
AND    hist.message LIKE '%PROD\tuitionaffordable%'

Note: When the owner of the job is sa then the job runs under the account under which sql agent runs.



Custom Search






Wednesday, January 5, 2011

MSSQL Replication Error: "The process could not connect to Subscriber"



Error Message: "The process could not connect to Subscriber"

MSSQL Error: 45000 Severity: 16 State: 1 ALERT: REPLICATION LATENCY BETWEEN PUBLISHER AND DISTRIBUTOR IS MORE THAN THE THRESHOLD VALUE OF 3000 SECONDS FOR THE PUBLICATION:TuitionaffordablePublication SUBSCRIBER:Tuitionaffordable || SUBSCRIBER DB:TestDB

I connect to the replication agent and found that the distributor was struggling with following error:

Message
The replication agent encountered an error and is set to restart within the job step retry interval. See the previous job step history message or Replication Monitor for more information. The Agent 'Tuitionaffordable-Test_0_Rpt1-Tuitionaffordable1-33' is retrying after an error. 5 retries attempted. See agent job history in the Jobs folder for more details.

Let's Understand: The process could not connect to Subscriber 'TuitionaffordableREP1' indicates that there is some connection problem between the subscriber and the publisher.

Let's go to the job and find out what went wrong:

The job history looks like as follows:

Date                      1/5/2011 10:50:00 AM
Log                         Job History (Tuitionaffordable-Test_0_Rpt1-Tuitionaffordable1-33)

Step ID                 2
Server                   Tuitionaffordable
Job Name            Tuitionaffordable-Test_0_Rpt1-Tuitionaffordable1-33
Step Name         Run agent.
Duration              00:06:56
Sql Severity                        0
Sql Message ID                 0
Operator Emailed                           
Operator Net sent                          
Operator Paged                               
Retries Attempted                          0

Message
2011-01-05 10:50:00:112 User-specified agent parameter values:
                                                -Subscriber Tuitionaffordable1
                                                -SubscriberDB Test
                                                -Publisher Tuitionaffordable
                                                -Distributor TuitionaffordableDist
                                                -DistributorSecurityMode 1
                                                -PublisherDB Test
                                                -OutputVerboseLevel 0
                                                -Continuous
                                                -XJOBID 0x64BAEC84ECCFB2423D323296D689F
                                                -XJOBNAME Tuitionaffordable-Test_0_Rpt1-Tuitionaffordable1-33
                                                -XSTEPID 2
                                                -XSUBSYSTEM Distribution
                                                -XSERVER Tuitionaffordable
                                                -XCMDLINE 0
                                                -XCancelEventHandle 0000000222000991

Custom Search
                                                -XParentProcessHandle 0000003330013DC
2011-01-05 10:50:00:112 Startup Delay: 4935 (msecs)Parameter values obtained from agent profile:
                                                -bcpbatchsize 213232247
                                                -commitbatchsize 100
                                                -commitbatchthreshold 1000
                                                -historyverboselevel 1
                                                -keepalivemessageinterval 300
                                                -logintimeout 15
                                                -maxbcpthreads 1
                                                -maxdeliveredtransactions 0
                                                -pollinginterval 5000
                                                -querytimeout 1800
                                                -skiperrors
                                                -transactionsperhistory 100
2011-01-05 10:50:00:112 The process could not connect to Subscriber 'TuitionaffordableREP1'.
2011-01-05 10:50:00:112 The agent failed with a 'Retry' status. Try to run the agent at a later time.

Action: The next step is to go to the subscriber and look whether there is any connection from host 'Publisher'.

SELECT *
FROM   sys.sysprocesses
where   hostname = 'Tuitionaffordable'

Let's Understad: I can see the connection from publisher but the job and replication agent throw following error continuously: "The process could not connect to Subscriber".

Problem Found: The exact problem is that there is a lot of blocking because of which the resources are not allocated to the publisher connection and this throws a false error. I killed some resource intensive jobs and replication started working properly.