由于执行触发器导致登录失败-错误号为17892的解决方案

baiu 2月前 39

问题概述::登录SQL  SERVER  时间提示“由于执行触发器,登录名xxx的登录失败”,如下图

原因:  编写了服务器级别的触发器,执行触发器时发生了错误导致.  如下图,trg_logon  为一个登录触发器,如果执行错误,则不能正常登录SQL  SERVER.

解决方法:以最小配置模式启动SQL  SERVER后,禁用或删除触发器.

详细步骤:

1.从开始菜单启动配置管理器



点击SQL  SERVER  服务,右侧双击SQL  SERVER(XXX)  打开属性窗口->高级->启动参数->在启动参数里加上”;-f”  注意-f前要加上分号。

-f  表示以最小配置模式运行SQ  L  SERVER,  从个人使用效果来看最小配置模式SQL  SERVER只允许一个用户连接,似乎已经包含了”单用户模式(参数为-m)”  ,  填写好参数后,点击确定。(参数详细说明,见本文最后)

 

保存启动参数后,会出现以下对话框,点击确定,然后重启SQL  SERVER  ,刚才的设置就会生效。

重启SQL  SERVER  后,打开SQL  SERVER  Management  Studio,  第一次弹出登录窗口时,点击取消

点击对象资源管理器上的连接按钮,弹出连接对话框,设置好后连接


连接成功后,找到触发器,右键-》禁用.    禁用后,再重新修改SQL  SERVER  启动参数,去掉-f选项,重启SQL  SERVER,  即可正常使用.


最后附SQL  SERVER启动参数资料供参考:

 

1.Sqlservr.exe运行参数。

SqlServer的启动可以为Windows服务方式(默认),也可以以应用程序方式启动。下面介绍sqlservr.exe以应用程序方式启动时的参数问题。

sqlservr应用程序用法:

sqlservr[-sinstance_name][-c][-dmaster_path][-f]
[-eerror_log_path][-lmaster_log_path][-m]
[-n][-Ttrace#][-v][-x][-gnumber][-O][-ynumber]

-sinstance_name

指定要连接到的SQLServer实例。如果未指定命名实例,sqlservr将启动SQLServer默认实例。重要启动SQLServer实例时,必须从实例所在的适当目录使用sqlservr应用程序。对于默认实例,从/MSSQL/Binn目录运行sqlservr。对于命名实例,在/MSSQL$instance_name/Binn目录运行sqlservr。

-c

表示以独立于WindowsNT服务控制管理器的方式启动SQLServer实例。当从命令提示符下启动SQLServer时,可使用该选项缩短启动SQLServer的时间。(注意:当使用该选项时,无法通过使用SQLServer服务管理器或netstop命令停止SQLServer,而且如果已从MicrosoftWindowsNT?系统注销,则SQLServer将停止运行。)-dmaster_path指出master数据库文件的完全合法路径。在-d和master_path之间没有空格。

-f

以最小配置模式启动服务器。然后,系统管理员可对配置选项重新配置(使用sp_configure系统存储过程)。

-eerror_log_path

表示错误日志文件的完全合法路径。如果未指定路径,则默认实例的默认位置是x:/ProgramFiles/MicrosoftSQLServer/MSSQL/Log/Errorlog,命名实例的默认位置是x:/ProgramFiles/MicrosoftSQLServer/MSSQL$instance_name/Log/Errorlog。在-e和error_log_path之间没有空格。

-lmaster_log_path

指示master数据库事务日志文件的完全合法路径。在-l和master_log_path之间没有空格。

-m

表示在单用户模式下启动SQLServer实例。如果SQLServer是以单用户模式启动的,则只能连接一个用户。CHECKPOINT机制(它确保完成的事务定期从磁盘高速缓存写入数据库设备中)将不启动。(一般情况下,如果您遇到需要修复的系统数据库问题时,可使用此选项。)

-n

表示您不想使用WindowsNT应用程序日志来记录SQLServer事件。如果用-n选项启动SQLServer实例,则最好也使用-e选项,否则将不会记录SQLServer事件。

-Ttrace#

表示应使用指定的有效跟踪标记(trace#)来启动SQLServer实例。跟踪标志用来启动具有非标准行为的服务器。有关可用跟踪标记(trace#)的更多信息,请参见跟踪标记。重要当指定跟踪标志时,请使用–T来传递跟踪标志号。SQLServer接受小写字母t(-t);然而,-t还设置SQLServer支持工程师所需的其它内部跟踪标记。

-v

显示服务器的版本号。

-x

禁用维护CPU统计。

-gmemory_to_reserve

指定内存的兆字节整数,该内存被保留下来用于SQLServer2000内部(进程内)运行的其它应用程序。

-O

指定不需要分布式COM(DCOM),从而禁用异类查询。

-yerror_number

如果SQLServer2000遇到在该选项中指定的错误信息,它将把表象堆栈跟踪写入错误日志。可以使用多个–y参数指定多个错误。

最新回复 (0)
返回
发新帖