代码之家  ›  专栏  ›  技术社区  ›  Justin C

奇怪的SQL Server 2005行为

  •  2
  • Justin C  · 技术社区  · 14 年前

    背景:
    我在asp.net中建立了一个站点,它的数据库是sql server 2005。该站点是位于“我的客户端”服务器机房中的Windows Server 2003框中的唯一站点。客户端是本地学区,因此由于数据安全原因,没有远程桌面访问和远程SQL Server连接,因此如果我必须服务数据库,我必须在终端。我有ftp权限来更新asp代码。

    问题:
    昨天有人就系统的问题联系我。当我看着它的时候,似乎一年前我解决的一个虫子又回来了。我有一个存储过程,它曾经以int作为参数,但是一年前我们改变了系统的结构,并更新了存储过程,使之成为nvarchar(10)。存储过程以某种方式变回使用int而不是nvarchar。

    有一个外部硬盘驱动器连接到服务器,定期复制数据,并有能力在发生故障时恢复服务器。我本以为数据库的一个旧版本已经被恢复了,但我知道的数据在错误发生前7天和1天被插入了数据库。

    问题:
    SQL Server 2005数据库的结构是否可以还原到以前的版本或还原到以前的版本而不接触实际数据?其他人不应该有权访问服务器,所以我有点疯狂,试图弄清楚这是怎么回事。

    有什么想法吗?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Thomas    14 年前

    使用SQL Server的内置备份和还原机制,无法只选择要还原的特定对象。使用事务日志备份,您可以还原到某个时间点,该时间点可能在执行某个事务或alter语句之前,但这是您得到的最接近的时间点。有一些工具可以让您选择要还原的某些对象,但是它们的工作方式是将数据库还原到副本并复制到所需的对象上,或者直接读取备份并复制出这些对象。换句话说,这不是偶然使用内置工具时可能发生的事情。我的猜测是,有人意外地运行了一个存储过程的旧脚本,该脚本将其还原。

        2
  •  2
  •   Philip Kelley    14 年前

    在不接触任何数据或任何其他存储过程的情况下更改存储过程是很简单的。为什么是什么时候,这就是问题所在。

    一个建议,跑

    select * from sys.procedures
    

    并检查create_date和modify_date列,查看问题过程和数据库中的所有其他过程。

        3
  •  1
  •   ChrisLively    14 年前

    我在一个客户机位置安装了一个应用程序,我亲眼目睹了类似的事情。每隔一段时间,s'procs就会恢复到旧版本。

    它只是一个客户端,这个应用程序安装在其他几个从未出现过这个问题的地方,而且它们碰巧也是一个学区。大约每3个月左右就会发生一次,任何人都不应该碰那台机器。我甚至不确定他们内部是否有人知道如何开设企业经理。

    出于好奇,您的客户机正在使用什么备份软件?并且,在检查过程中的创建/修改日期之后,服务器是否在这段时间内重新启动?

    我问的原因是我的客户机有备份软件,在服务器上做一些非常奇怪的事情。例如,在重新启动时,它必须“回放”自上次成功备份以来的更改,包括文件操作。另外,它是否安装在虚拟机中?

        4
  •  0
  •   Gabriele Petrioli    14 年前

    通过数据转换服务(DTS)?或者如果设置数据库的脚本在某个地方可用..