答:请确认SQL服务是否启动,用户密码是否正确,连接的实例名称,端口是否正确
日志问题
描述:系统日志LDF满了 或 日志文件非常大 如何收缩?
答:简单恢复模式下SQL Server会自动截断日志文件,完整模式下需要日志备份
恢复模式查看
日志备份的方式
收缩日志
查询很久很慢
描述:查询很久都查不出数据,很慢!
答:这样的情况出现一般是查询语句被其他语句阻塞。在查询中添加 select * from table with (nolock)如果能查出来说明阻塞
具体的阻塞情况 可以使用sp_who2 或者 sys.dm_exec_requests 视图查询
具体脚本(查看语句运行情况)
WITH sess AS( SELECT es.session_id, database_name = DB_NAME(er.database_id), er.cpu_time, er.reads, er.writes, er.logical_reads, login_name, er.status, blocking_session_id, wait_type, wait_resource, wait_time, individual_query = SUBSTRING (qt.text, (er.statement_start_offset/2)+1, ((CASE WHEN er.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 ELSE er.statement_end_offset END - er.statement_start_offset)/2)+1), parent_query = qt.text, program_name, host_name, nt_domain, start_time, DATEDIFF(MS,er.start_time,GETDATE()) as duration, (SELECT query_plan FROM sys.dm_exec_query_plan(er.plan_handle)) AS query_plan FROM sys.dm_exec_requests er INNER JOIN sys.dm_exec_sessions es ON er.session_id = es.session_id CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt WHERE es.session_id > 50 AND es.session_Id NOT IN (@@SPID))SELECT *FROM sessUNION ALL SELECT es.session_id, database_name = "", 0, 0, 0, 0, login_name, es.status, 0, "", "", "", qt.text, parent_query = qt.text, program_name, host_name, nt_domain, es.last_request_start_time, DATEDIFF(MS,es.last_request_start_time,GETDATE()) as duration, NULL AS query_planFROM sys.dm_exec_sessions es INNER JOIN sys.dm_exec_connections ec ON es.session_id = ec.session_id CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle)as qtWHERE ec.most_recent_session_id IN ( SELECT blocking_session_id FROM sess WHERE blocking_session_id NOT IN(SELECT DISTINCT session_id FROM sess) )ORDER BY 1, 2分区表问题
2.选择数据库权限及用户映射
3.查询刚才创建“登录名”的脚本(此脚本也可以用于升级或迁移数据库还原后,登录名同步的问题)
CREATE PROCEDURE #sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar (514) OUTPUTAS DECLARE @charvalue varchar (514) DECLARE @i int DECLARE @length int DECLARE @hexstring char(16) SELECT @charvalue = "0x" SELECT @i = 1 SELECT @length = DATALENGTH (@binvalue) SELECT @hexstring = "0123456789ABCDEF" WHILE (@i <= @length) BEGIN DECLARE @tempint int DECLARE @firstint int DECLARE @secondint int SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SELECT @firstint = FLOOR(@tempint/16) SELECT @secondint = @tempint - (@firstint*16) SELECT @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SELECT @i = @i + 1 END SELECT @hexvalue = @charvalueGODECLARE @name sysnameDECLARE @type varchar (1)DECLARE @hasaccess intDECLARE @denylogin intDECLARE @is_disabled intDECLARE @PWD_varbinary varbinary (256)DECLARE @PWD_string varchar (514)DECLARE @Principal_id intDECLARE @SID_varbinary varbinary (85)DECLARE @SID_string varchar (514)DECLARE @tmpstr varchar (1024)DECLARE @is_policy_checked varchar (3)DECLARE @is_expiration_checked varchar (3)DECLARE @defaultdb sysnameDECLARE @language sysnameDECLARE @rolename sysnameDECLARE login_curs CURSOR FOR SELECTp.principal_id, p.sid,p.name,p.type,p.is_disabled,p.default_database_name,p.default_language_name, l.hasaccess,l.denylogin FROMsys.server_principals p LEFT JOINsys.syslogins l ON ( l.name = p.name ) WHEREp.type IN ( "S", "G", "U" ) ANDp.name <> "sa"OPEN login_cursFETCH NEXT FROM login_curs INTO @Principal_id, @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @language, @hasaccess, @denyloginIF (@@fetch_status = -1)BEGIN PRINT "No login(s) found." CLOSE login_curs DEALLOCATE login_curs RETURNENDSET @tmpstr = "** Generated " + CONVERT (varchar, GETDATE()) + " on " + @@SERVERNAME + " */"PRINT @tmpstrPRINT ""WHILE (@@fetch_status <> -1)BEGIN IF (@@fetch_status <> -2) BEGIN PRINT "" SET @tmpstr = "-- Login: " + @name PRINT @tmpstr IF (@type IN ( "G", "U")) BEGIN -- NT authenticated account/groupSET @tmpstr = "CREATE LOGIN " + QUOTENAME( @name ) + " FROM WINDOWS WITH DEFAULT_DATABASE = [" + @defaultdb + "], DEFAULT_LANGUAGE = [" + @language + "]" END ELSEBEGIN -- SQL Server authentication-- obtain password and sidSET @PWD_varbinary = CAST( LOGINPROPERTY( @name, "PasswordHash" ) AS varbinary (256) )EXEC #sp_hexadecimal @PWD_varbinary, @PWD_string OUTEXEC #sp_hexadecimal @SID_varbinary,@SID_string OUT-- obtain password policy stateSELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN "ON" WHEN 0 THEN "OFF" ELSE NULL END FROM sys.sql_logins WHERE name = @nameSELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN "ON" WHEN 0 THEN "OFF" ELSE NULL END FROM sys.sql_logins WHERE name = @nameSET @tmpstr = "CREATE LOGIN " + QUOTENAME( @name ) + " WITH PASSWORD = " + @PWD_string + " HASHED, SID = " + @SID_string + ", DEFAULT_DATABASE = [" + @defaultdb + "], DEFAULT_LANGUAGE = [" + @language + "]"IF ( @is_policy_checked IS NOT NULL )BEGINSET @tmpstr = @tmpstr + ", CHECK_POLICY = " + @is_policy_checkedENDIF ( @is_expiration_checked IS NOT NULL )BEGINSET @tmpstr = @tmpstr + ", CHECK_EXPIRATION = " + @is_expiration_checkedEND END IF (@denylogin = 1) BEGIN -- login is denied accessSET @tmpstr = @tmpstr + "; DENY CONNECT SQL TO " + QUOTENAME( @name ) END ELSE IF (@hasaccess = 0) BEGIN -- login exists but does not have accessSET @tmpstr = @tmpstr + "; REVOKE CONNECT SQL TO " + QUOTENAME( @name ) END IF (@is_disabled = 1) BEGIN -- login is disabledSET @tmpstr = @tmpstr + "; ALTER LOGIN " + QUOTENAME( @name ) + " DISABLE" END PRINT @tmpstr PRINT "GO" DECLARE server_role_members_curs CURSOR FOR SELECT (SELECT [name] FROM sys.server_principals WHERE principal_id = role_principal_id) AS rolenameFROM sys.server_role_members WHERE member_principal_id = @Principal_id OPEN server_role_members_curs FETCH NEXT FROM server_role_members_curs INTO @rolename WHILE (@@fetch_status <> -1) BEGINSELECT @tmpstr = "EXEC master..sp_addsrvrolemember @loginame = N""" + @name + """, @rolename = N""" + @rolename + """"PRINT @tmpstrPRINT "GO"FETCH NEXT FROM server_role_members_curs INTO @rolename END CLOSE server_role_members_curs DEALLOCATE server_role_members_cursEND FETCH NEXT FROM login_curs INTO @Principal_id, @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @language, @hasaccess, @denyloginENDCLOSE login_cursDEALLOCATE login_cursGODROP PROCEDURE #sp_hexadecimalGO4.找到查询出的脚本,在辅助节点运行(其中主要的就是SID)