服务器环境:

Windows Server 2008 R2 x64操作系统,SQL Server 2008 R2 x64操作系统,Sharepoint Server 2010

问题描述:

SharePoint 2010服务器上创建的网站在某一天无法访问,错误提示HTTP 404错误,但是Sharepoint 2010管理中心可以正常登陆, 与此网站同一级的其他网站可以正常访问。

查错:

1.首先,Sharepoint 2010管理中心可用,同级网站可用,Sharepoint 2010 server端出现问题不大。

2.其次,一般网站访问不到,会想到是不是IIS出现问题,于是查看IIS,所建立好的网站在IIS中正常运行,从启IIS并没有修复问题。

3.最后,查看数据库文件,因为其他网站可以正常访问而其不能正常访问的情况下,可能是数据库出现问题,果真,发现了问题,名位WSS_Content的一个数据库上面多了一个问号,表示数据库被标记为可疑。这个可疑的数据库就有可能是出问题的数据库,所以从这里着手去做。问题如图1

 

图1

解决办法:

       由于是在服务器上做操作,所以为了防止出现数据库不可恢复的操作,先对出问题的数据库进行备份,备份好之后进行数据库修复。

      日常对数据库进行操作时,有时对数据库进行些不正常操作(如数据库在读写时而无故停止数据库)时会导致数据库不正常中断,而导致数据库文件不能正常被使用,有时会被标记为“可疑”(suspect),即在数据库名旁加上了×××的惊叹号,这时数据库就不能再被打开了,但数据库的结构及数据内容都还是存在的。 
    

     当数据库发生这种操作故障时,按如下操作步骤可解决此问题,打开数据库里的查询编辑器窗口,运行以下的命令。


1、修改数据库为紧急模式 

      ALTER DATABASE *** SET EMERGENCY(其中星号代表出问题的数据库名称)

     含义为修改数据库***设置为紧急模式。

2、使数据库变为单用户模式 

      ALTER DATABASE *** SET SINGLE_USER

     含义为修改数据库为单用户使用模式 

     注:如果在使用命令修改不成功,可以选择其他方式。选中出问题的数据库,右键——>属性——>选项——>状态下的限制接入,修改为单用户即可。如图2所示

图2

3、修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。

 DBCC CheckDB(***,REPAIR_ALLOW_DATA_LOSS)

命令执行完成后可能会出现以下警告:

警告: 数据库 'Sharepoint_Config' 的日志已重新生成。已失去事务的一致性。RESTORE 链已断开,服务器不再有以前的日志文件的上下文,因此您需要了解它们的内容。应运行 DBCC CHECKDB 验证物理一致性。数据库已置于 dbo-only 模式。在准备使数据库可用时,需要重置数据库选项,并删除所有多余的日志文件。

此时可以不用理会此警告,关闭Microsoft SQL Server Management Studio。

 

4、重新打开Microsoft SQL Server Management Studio,使数据库变回为多用户模式

     ALTER DATABASE *** SET MULTI_USER

     使用此命令有可能会出现以下问题:

     消息 5064,级别 16,状态 1,第 1 行
     此时无法更改数据库 ‘****’ 的状态或选项。

     此数据库处于单用户模  式,当前某个用户已与其连接。
    消息 5069,级别 16,状态 1,第 1 行
    ALTER DATABASE 语句失败。

    重启SQL服务后仍行不通。

    此时,可采用以下方法:执行以下命令

USE master;
GO

DECLARE @SQL VARCHAR(MAX);
SET @SQL=''
SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)
FROM master..sysprocesses
WHERE dbid=DB_ID('****_MSCRM');

EXEC(@SQL);
GO
ALTER DATABASE ****_MSCRM SET MULTI_USER;

       是在Alter语句执行之前,先执行了一个KILL Process的命令。而第一个方法之所以不能成功,应该也就是SQL的某个进程还在运行中,没有被终止,所以对****数据库做的任何操作都因为那个进程的Lock的存在而失败。在第一个帖子中,楼主也分享了他的方法:“查看监视器中的进程,把与目的库有关的KILL掉,然后刷新一下。”只是不知这个操作怎么去做。如果再笨一点,可以重启SQL  Server所在的服务器,这样应该也可以达到目的。

5、从启SQLServer服务。

      最后,再次打开数据库时被标记为“可疑”的数据库已恢复正常状态。
 

最终,Sharepoint网站无法访问的问题最终解决了。