主页 > 服务支持 Service > 技术支持 Technical Support >

技术支持 Technical Support

SQL数据库无法装载DLL解决方法


当系统提示数据库不能备份,或者弹出“
错误0:无法装载DLL Microsoft提示你请误随意操作sql数据库以免对起数据库造成不必…………”等报错时,可执行以下操作,测试能够修复一下。
其实是因为系统原因,导自己没有安装好SQL的MDAC,所以只要将这个装好就可以了,具体方法如下:
    1、在系统中找c:\windows\inf下的mdac.inf(这里以windows2003为例),点击安装。
    2、在安装过程会提示使用系统光盘,如果没有系统光盘也没有关系,只需使用查找文件功能,将安装过程中所需要的文件找到,然后再指定其路径就可以了,直到安装完成!
    3、完成后,为可了保险起见,可以启用系统!

网上看的第二种方法:



打开查询分析器,执行以下语句:

drop procedure sp_OACreate
drop procedure xp_dirtree
drop procedure xp_regwrite
exec sp_addextendedproc N' sp_OACreate', N'odsole70.dll'
exec sp_addextendedproc N' xp_dirtree', N' xpstar.dll'
exec sp_addextendedproc 'xp_regwrite', 'xpstar.dll'

可能会再次出现这样的错误:未能找到存储过程 master.dbo.xp_dirtree|错误2812

再次打开查询分析器,执行以下语句:
use master
EXEC sp_addextendedproc xp_dirtree ,@dllname ='xpstar.dll'



我遇到这个问题在我本机试了下这两个方法都不管用,后来我用了我自己想出来的一个办法,结果OK,这里分享下,希望对您有帮助!

第一步

打开查询分析器,执行以下语句:
drop procedure  sp_password

第二步找到一个正常的sqlservel,在master下将sp_password存储过程复制过来

我这里贴个正常的

create procedure sp_password
    @old sysname = NULL,        -- the old (current) password
    @new sysname,               -- the new password
    @loginame sysname = NULL    -- user to change password on
as
    -- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --
set nocount on
    declare @self int
    select @self = CASE WHEN @loginame is null THEN 1 ELSE 2 END

    -- RESOLVE LOGIN NAME
    if @loginame is null
        select @loginame = suser_sname()

    -- CHECK PERMISSIONS (SecurityAdmin per Richard Waymire) --
IF (not is_srvrolemember('securityadmin') = 1)
        AND not @self = 1
begin
    dbcc auditevent (107, @self, 0, @loginame, NULL, NULL, NULL)
    raiserror(15210,-1,-1)
    return (1)
end
ELSE
begin
    dbcc auditevent (107, @self, 1, @loginame, NULL, NULL, NULL)
end

    -- DISALLOW USER TRANSACTION --
set implicit_transactions off
IF (@@trancount > 0)
begin
  raiserror(15002,-1,-1,'sp_password')
  return (1)
end

    -- RESOLVE LOGIN NAME (disallows nt names)
    if not exists (select * from master.dbo.syslogins where
                    loginname = @loginame and isntname = 0)
begin
  raiserror(15007,-1,-1,@loginame)
  return (1)
end

-- IF non-SYSADMIN ATTEMPTING CHANGE TO SYSADMIN, REQUIRE PASSWORD (218078) --
if (@self <> 1 AND is_srvrolemember('sysadmin') = 0 AND exists
   (SELECT * FROM master.dbo.syslogins WHERE loginname = @loginame and isntname = 0
    AND sysadmin = 1) )
  SELECT @self = 1

    -- CHECK OLD PASSWORD IF NEEDED --
    if (@self = 1 or @old is not null)
        if not exists (select * from master.dbo.sysxlogins
                        where srvid IS NULL and
            name = @loginame and
                     ( (@old is null and password is null) or
                              (pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END)) = 1) )   )
        begin
      raiserror(15211,-1,-1)
      return (1)
     end

    -- CHANGE THE PASSWORD --
    update master.dbo.sysxlogins
set password = convert(varbinary(256), pwdencrypt(@new)), xdate2 = getdate(), xstatus = xstatus & (~2048)
where name = @loginame and srvid IS NULL

-- UPDATE PROTECTION TIMESTAMP FOR MASTER DB, TO INDICATE SYSLOGINS CHANGE --
exec('use master grant all to null')

    -- FINALIZATION: RETURN SUCCESS/FAILURE --
if @@error <> 0
        return (1)
    raiserror(15478,-1,-1)
return  (0) -- sp_password

GO



  • 上一篇:爱商商业管理软件-收银员培训手册
  • 下一篇:"请备份该数据库的事务日志以释放一些日志空间"解决方法