分类目录归档:MsSQL

MsSQL 64位配置方法

新搭建一台R710,CPU XEON 5520再搭配16G内存,使用起来应该还蛮爽的说~~~以为装起来应该很顺利,但发现每次系统总是N多东西需要配置。

1、安装WINDOWS2003 64位 + SP
2、安装MsSQL 2005 64位 + SP
3、配置环境:
1)新建SqlServer用户;
2)使用SqlServer运行SqlServer以及SqlAgent服务;
3)至此,以为系统就已经配置成功了,但SqlAgent老是无法启动,提示错误如下:

SQLServerAgent could not be started (reason: SQLServerAgent 必须能够以 SysAdmin 身份连接到 SQLServer,但“(未知)”不是 SysAdmin 角色的成员)。
SQL Server 阻止了对组件 ‘Agent XPs’ 的 过程’dbo.sp_sqlagent_get_startup_info’ 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 ‘Agent XPs’。有关启用 ‘Agent XPs’ 的详细信息,请参阅 SQL Server 联机丛书中的 “外围应用配置器”。
原来漏掉了内存分配权限,如图:
mssql-x64

MsSQL 2005 数据库镜像的搭建与维护

数据库镜像大大提高了可用性,并为故障转移群集或日志传送提供了一种易于管理的替代方案或补充方案。同步数据库镜像会话时,数据库镜像提供了热备用服务器,可支持在已提交事务不丢失数据的情况下进行快速故障转移。在一般的镜像会话期间,如果生产服务器出现故障,客户端应用程序可以通过重新连接到备用服务器来快速进行恢复。

继续阅读

MsSQL备份文件还原后引起的孤立用户解决方法

很多用户使用的是远程的SQL服务器,数据库备份后都备份在远程服务器中,如果要将数据转存到本地SQL服务器的话,就会使用到强制还原。这样就会产生孤立用户,对于SQL SERVER2000中需要在数据库中执行以下查询,就可以删除。

exec sp_change_users_login 'update_one','没有登陆名的数据库用户', '新的登陆名'

但由于SQL SERVER 2005采用了架构,所以在删除用户是会出现一些错误,因此在这里把我在强制还原后的一些处理方法介绍给大家以作参照。
* 适用于远程服务器数据库备份后,下载到本地并在本地SQL服务器上还原引的狐立用户问题;
* 仅适用于SQLSERVER 2005 或以上版本;

MsSQL 收缩数据库日志

SQL2005

USE [master]
DUMP TRANSACTION [DB_Samples] WITH NO_LOG
BACKUP LOG [DB_Samples] WITH NO_LOG
DBCC SHRINKDATABASE([DB_Samples])

SQL2008

USE [master]
GO
ALTER DATABASE [DB_Samples] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [DB_Samples] SET RECOVERY SIMPLE
GO

USE [DB_Samples]
GO
DBCC SHRINKFILE (N 'DB_Samples_log' , 0, TRUNCATEONLY)
GO

USE [master]
GO
ALTER DATABASE [DB_Samples] SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE [DB_Samples] SET RECOVERY FULL
GO

MsSQL 2005 查看表的索引碎片状态

MSSQL 2005 提供了一个动态管理函数 sys.dm_db_index_physical_stats
通过调用这个函数,可以方便直观地查看到指定表或视图的数据和索引的大小和碎片信息。
下面这条语句,就可以查看当前数据库中所有索引的碎片情况

SELECT
 object_name(a.object_id) [TableName]
 ,a.index_id
 ,name [IndexName]
 ,avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats
 (
 DB_ID()
 , NULL
 , NULL, NULL, NULL
) AS a
JOIN sys.indexes AS b
ON a.object_id = b.object_id AND a.index_id = b.index_id;

如果 avg_fragmentation_in_percent 一项的值在 10.0 – 30.0 建议使用 ALTER INDEX .. REORGANIZE 语句重新组织索引
如果 > 30.0 建议使用 ALTER INDEX .. REBUILD 语句重建索引
SQL 2005 在 ALTER INDEX 语句中提供了一个重要的参数 ONLINE,如果想重建索引的时候,不会将表锁住,需要将该参数设置为 ON。
例如:

ALTER INDEX ALL ON [dbo].[RecordTable]
 REBUILD WITH (
 SORT_IN_TEMPDB = ON
 ,STATISTICS_NORECOMPUTE = ON
 ,ONLINE = ON);

ONLINE 参数说明如下:

ONLINE = { ON | OFF }
指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。默认值为 OFF。

ON
在索引操作期间不持有长期表锁。在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。这使得能够继续对基础表和索引进行查询或更新。操作开始时,将对源对象保持极短时间的共享 (S) 锁。操作结束时,如果创建非聚集索引,将对源持有极短时间的 S 锁;当在线创建或删除聚集索引时,或者重新生成聚集或非聚集索引时,将获取 SCH-M(架构修改)锁。对本地临时表创建索引时,ONLINE 不能设置为 ON。

OFF
在索引操作期间应用表锁。创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。这样可以防止所有用户在操作期间访问基础表。创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。

有关详细信息,请参阅联机索引操作的工作方式。有关锁的详细信息,请参阅锁模式。
索引(包括全局临时表中的索引)可以联机重新生成,但以下索引除外:
* 禁用的索引
* XML 索引
* 本地临时表中的索引
* 分区索引
* 聚集索引(如果基础表包含 LOB 数据类型)
* 使用 LOB 数据类型列定义的非聚集索引

如果表包含 LOB 数据类型,但这些列中没有任何列在索引定义中用作键列或非键列,则可以联机重新生成非聚集索引。

MsSQL 查找死锁脚本

use master
go
declare @spid int,@bl int
DECLARE s_cur CURSOR FOR
select 0 ,blocked
from (select * from sysprocesses where blocked>0 ) a
where not exists(select * from (select * from   sysprocesses where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where blocked>0
OPEN s_cur
FETCH NEXT FROM s_cur INTO @spid,@bl
WHILE @@FETCH_STATUS = 0
begin
if @spid =0
        select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
else
        select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前    进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )
FETCH NEXT FROM s_cur INTO @spid,@bl
end
CLOSE s_cur
DEALLOCATE s_cur

查看死锁执行语句:

exec sp_who2