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'

 

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