記下自己工作中,使用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 進行名稱解析。相反,您指定的主機文件應該用於名稱解析。
- 在主體服務器實例上,您嘗試設置的見證。
在此方案中,您將收到以下錯誤消息:
ServerName: port。數據庫鏡像配置未更改。驗證在服務器連接,並且再試一次。" _msthash="382890" _mstchunk="true">ServerName:port'. " _msthash="382890" _mstchunk="true">ALTER DATABASE 命令可能不會發送給遠程服務器實例 ' TCP: / /ServerName:port。數據庫鏡像配置未更改。請驗證該服務器已連接,然後再試一次
- 在 DNS 服務器上註冊所有內部 IP 地址。
- 在主服務器上,單擊開始,然後單擊控制面板
- 在控制面板中,雙擊網絡連接
- 右鍵單擊連接見證服務器,您使用的連接,然後單擊屬性
- 在連接屬性對話框中的此連接使用下列項目,在下單擊Internet 協議 (TCP/IP),然後單擊屬性
- Internet 協議 (TCP/IP) 屬性 對話框中單擊 高級。
- 在高級 TCP/IP 設置對話框中,單擊DNS選項卡。
- 在DNS選項卡,請單擊附加這些 DNS 後綴 (按順序),然後單擊添加
- 域後綴 TCP/IP 域後綴對話框中,在下鍵入域後綴,然後單擊添加
- 單擊確定三次。
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'