zoukankan      html  css  js  c++  java
  • 还原数据库相关,孤立用户无法删除,又无法与新建的同名登陆挂钩的解决办法(转)

    如何将数据库还原至任意位置

    1、执行

    restore filelistonly FROM disk='E:\ChinaValue_db_200612250200.BAK'

    获得当前备份文件的逻辑名

    2、使用windows账户或者sa登陆执行以下SQL语句:

    restore DATABASE [ChinaValue]
    FROM disk='E:\ChinaValue_db_200612250200.BAK'
    WITH
    file=1,
    move
    'ChinaValueTemp' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Data.MDF',
    move
    'ChinaValueTemp_Log' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Log.LDF'
    restore DATABASE [还原目的数据库]
    FROM disk='E:\ChinaValue_db_200612250200.BAK' --备份文件的路径
    WITH
    file=1, --文件的编号
    move 'ChinaValueTemp' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Data.MDF', --数据库逻辑名 to 还原到的物理文件名
    move 'ChinaValueTemp_Log' TO 'F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Log.LDF' --日志逻辑名 to 还原到的物理文件名

    还原数据库后,孤立用户无法删除,又无法与新建的同名登陆挂钩的解决办法

    --首先创建存储过程
    CREATE proc p_validatelogin
    @dbname sysname,--孤立用户所在的数据库名
    @loginame sysname--孤立用户名
    AS
    IF db_id(@dbname) IS NULL
    begin
    print '无此数据库'
    RETURN
    end
    declare @s nvarchar(4000),@sid BINARY(16)
    IF EXISTS(SELECT * FROM master..sysxlogins WHERE name=@loginame)
    begin--如果已经有该登录,则直接修改系统表
    exec sp_configure 'allow updates',1 reconfigure WITH override
    SELECT @sid=sid FROM master..syslogins WHERE name=@loginame
    SET @s='update ['+REPLACE(@dbname,']',']]')
    +']..sysusers set sid=@sid where name=@loginame and islogin=1'
    exec sp_executesql @s
    ,N
    '@sid binary(16),@loginame sysname'
    ,
    @sid,@loginame
    exec sp_configure 'allow updates',0 reconfigure WITH override
    end
    else
    begin--如果没有该登录,则创建登录
    SET @s='SELECT @sid=sid FROM ['+REPLACE(@dbname,']',']]')
    +']..sysusers WHERE islogin=1 and name=@loginame'
    exec sp_executesql @s
    ,N
    '@sid binary(16) out,@loginame sysname'
    ,
    @sid out,@loginame
    exec sp_addlogin @loginame=@loginame,@sid=@sid
    end
    go

    --执行存储过程
    exec p_validatelogin 'ChinaValueBbs','chinavaluebbs'

    go

    --执行重新配置
    RECONFIGURE
  • 相关阅读:
    C 应用
    C 基本语法
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/sdytzz/p/2451299.html
Copyright © 2011-2022 走看看