SQL Server 问题汇总

   记下自己工作中,使用SQL  Server是遇到的问题和解决办法,持续更新,便于以后查阅。

一,找到死锁的对象,并删掉,免得重启服务或电脑

1.根据表名找到对象  select top 1 id from sysobjects where  name='tblName'可以查出表的Objectid
2。再exec  sp_lock  就可以找到 spid
3。再kill spid 解锁

 

二。sql 修改Auto Group

  不知道谁把数据库Auto Group 改成了398500 %了,不能用界面改了

  ALTER DATABASE Test1
  MODIFY FILE
 (NAME = test1dat3,
 FILEGROWTH= 20MB)       数据库名不加‘’

 

三。sql 2005 删除log

前提是保证数据库先正常的detach,

CREATE DATABASE TEST
ON PRIMARY (
NAME=TEST_DAT_MAIN1
,FILENAME='D:/DATABASE/TEST_DAT_MAIN1.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_MAIN2
,FILENAME='D:/DATABASE/TEST_DAT_MAIN2.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
FOR ATTACH_REBUILD_LOG   --ATTACH

四.

BACKUP LOG DateBaseName WITH TRUNCATE_ONLY 
DBCC ShrinkDatabase(DateBaseName) 
 
五。删除replication

 sp_removedbreplication 'database','both'

六。

alter schema myschema transfer dbo.myTable
go

declare @schemaName nvarchar(100)
set @schemaName = ''
select @schemaName = TABLE_SCHEMA from INFORMATION_SCHEMA.TABLES where TABLE_NAME='t1‘
if (@schemaName <> 'dbo')
begin
 set @schemaName = @schemaName + '.t1'
 EXEC SP_ChangeObjectOwner @schemaName, 'dbo'
end
GO

 

七。

现在有两台机器,不同网段的,机器A为172.16.0.10,机器B为172.20.0.100,现在机器A可以ping通机器B,但在机器A上的Sql   server却不能找到机器B上的Sql   server,这时要连接上数据库可以使用如下方法:

如果网络找不到活动的数据库连接的话,先试试直接用ip地址连,如果还不行就参看下面的设置方法,一般都能解决。

1、先保证ping通(必须,ping不通网络就不通,根本不可能连上)

可能是服务器防火墙阻止或网络原因

2、在dos下写入telnet   ip   1433不会报错(这条无所谓,不行就看下面)

  3、用ip连如企业管理器:
企业管理器-->右键SQlserver组-->新建sqlserver注册-->下一步-->写入远程实例名(IP,机器名)-->下一步-->选Sqlserver登陆-->下一步-->写入登陆名与密码(sa,pass)-->下一步-->下一步-->完成
(以下两条需要修改数据库服务器设置)

4、如果还不行:

  sqlserver服务器-->开始菜单-->SQLserver-->服务器网络实用工具-->启用   WinSock代理-->代理地址:(sqlserver服务器IP)-->代理端口--> 1433-->OK了
  5、如果还不行:
  sqlserver服务器-->开始菜单-->SQLserver-->客户端网络实用工具-->别名-->添加-->写入别名如"call"-->"网络库"选tcp/ip-->服务器名称写入远程ip或实例名-->OK了

如何设置sql server2005的数据库系统时间:

 

 
--修改前时间
select getdate() 

--打开高级系统控制选项 
EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE 

--修改执行权限,这样就可以执行修改时间的命令了 
EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE 

--修改系统时间 
exec master..xp_cmdshell 'date 2008-10-23'
exec master..xp_cmdshell 'time 11:30:15'

--修改后时间 
select getdate()

--与数据库所在计算机的时间同步 
exec master.dbo.xp_cmdshell 'net time \\localhost /set  /Y'  

--同步后时间 
select getdate()
 

 

要注意,修改系统时间的时候,会连sql server所在计算机的时间一起修改了,所以如果想要变回准确的时间,需要先用计算机的时间同步更新功能更新一下时间,然后在把sql server的时间和计算机时间同步. 但反过来,如果用双击时间出现的"日期和时间属性面板"中修改了计算机时间,是不会修改到sql server时间的。

select *from sys.role_permissions--可以查询--修改,报错:无法更新数据库"mssqlsystemresource",因为数据库是只读的。update sys.role_permissions set number=111where name='System Administrators'

 

-- trace log 1400

go to the SQL Server COnfiguration manager, select the MSSQLSERVER service --> PROPERTIES --> ADVANCED, look for the startup parameters.

append the ";-T1400" parameter to the back of the existing parameters. take note.. no spaces.

dbcc traceon(1400,-1)

 

There were some stale A records in the DC's DNS server, which were causing Node-B to get rather confused about what pointed where. I fixed the DNS to reflect reality and hit 'go' and..... It worked! Well, actually it paused because I'd run out of disk space on Node-B, but other than that, all seems good.

  • 具有镜像会话在 Microsoft SQL Server 2005年中的数据库。
  • 数据库镜像会话没有证人。
  • 您将见证服务器设置。
  • 在主体服务器以及见证服务器上,则不要使用 DHCP 和 DNS 进行名称解析。相反,您指定的主机文件应该用于名称解析。
  • 在主体服务器实例上,您尝试设置的见证。

在此方案中,您将收到以下错误消息:

消息 1456年,16,状态 3,第 1 行级别
ServerName: port。数据库镜像配置未更改。验证在服务器连接,并且再试一次。" _msthash="382890" _mstchunk="true">ServerName:port'. " _msthash="382890" _mstchunk="true">ALTER DATABASE 命令可能不会发送给远程服务器实例 ' TCP: / /ServerName:port数据库镜像配置未更改。请验证该服务器已连接,然后再试一次

 

  1. 在 DNS 服务器上注册所有内部 IP 地址。
  2. 在主服务器上,单击开始,然后单击控制面板
  3. 在控制面板中,双击网络连接
  4. 右键单击连接见证服务器,您使用的连接,然后单击属性
  5. 连接属性对话框中的此连接使用下列项目,在下单击Internet 协议 (TCP/IP),然后单击属性
  6. Internet 协议 (TCP/IP) 属性 对话框中单击 高级
  7. 高级 TCP/IP 设置对话框中,单击DNS选项卡。
  8. DNS选项卡,请单击附加这些 DNS 后缀 (按顺序),然后单击添加
  9. 域后缀 TCP/IP 域后缀对话框中,在下键入域后缀,然后单击添加
  10. 单击确定三次。

 Using the command prompt enter either netstat -abn (for Windows Server 2003 SP1 machines) or enternetstat -ano (for Windows Server 2003 pre-SP1 machines).  This will display the ports being listened to and the list of processes.  According to MS, if a second process is listening on the Witness port, mirroring connection will fail. 

I had the same problem doing SET WITNESS using certificates with 3 instances of SQL on the same server. 

Then I found an article on msdn support that said the ACL of C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys could be the cause and to look at article 278381.  Well, the ACL for 'Administrator' was set to 'special'. I changed it to 'FULL'. 

I re-issued the "GRANT CONNECT ON ENDPOINT::myendpoint to principalLogin" on the witness SQL instance and then I re-issued the SET WITNESS command on the Principal server and it worked! (I first tried without the grant connect on the Witness SQL instance but it still failed.)

diagnostic tool that may help you.  Using the command prompt enter either netstat -abn (for Windows Server 2003 SP1 machines) or enter netstat -ano (for Windows Server 2003 pre-SP1 machines).  This will display the ports being listened to and the list of processes.  According to MS, if a second process is listening on the Witness port, mirroring connection will fail. 

 

 


SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
        @MaxMinutes INT,
        @NewSize INT


USE     Test             -- 要操作的数据库名
SELECT  @LogicalFileName = 'Test',  -- 日志文件名
@MaxMinutes = 10,               -- Limit on time allowed to wrap log.
        @NewSize = 1                -- 你想设定的日志文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)


DECLARE @Counter   INT,
        @StartTime DATETIME,
        @TruncLog  VARCHAR(255)
SELECT  @StartTime = GETDATE(),
        @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
      AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
      AND (@OriginalSize * 8 /1024) > @NewSize 
  BEGIN -- Outer loop.
    SELECT @Counter = 0
    WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
      BEGIN -- update
        INSERT DummyTrans VALUES ('Fill Log') 
        DELETE DummyTrans
        SELECT @Counter = @Counter + 1
      END  
    EXEC (@TruncLog) 
  END  
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

 http://www.jb51.net/article/33150.htm

 

 

USE master
RESTORE DATABASE test
   FROM DISK = '\\11.11.11.9\DBBackup\db.bak'
   WITH MOVE 'test_Data' TO 'E:\thcDB\test_Data.MDF',
   MOVE 'test_Log' TO 'E:\thcDB\test_log.LDF',
STATS = 10, REPLACE
GO

ALTER DATABASE test SET ONLINE  --in rocoving

alter DATABASE test set partner off  --mirror

restore database test with recovery

datalength(text)

 

DBCC SHRINKFILE (N'DBHJFI_Data' , 0, TRUNCATEONLY)
GO  SHRINKDATABASE  
0表示压缩到最小值

 

EXEC sp_addlinkedserver @server='ip'

EXEC sp_addlinkedsrvlogin 'ip', 'false', NULL, 'sa', 'sa'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章