Sql server 创建通用数据库的多个实例

Sql server 创建通用数据库的多个实例,sql-server,sql-server-2005,Sql Server,Sql Server 2005,目前,我正在尝试建立一个向学生分发通用数据库的设置。他们将使用这个数据库开发一个应用程序(比如购物车应用程序),将他们的项目提交到我们的服务器上,然后它将自动评分 这些数据库正在Microsoft SQL Server 2005中运行 我们使用用户实例来实例化每个数据库,并且可以同时为多个请求提供服务。但是,问题是,当一个以上的学生提交了一个要评分的项目时,要实例化的第一个数据库将是唯一的数据库,并且将覆盖当前打开的所有其他副本 因此,如果stu1修改了他的数据库,stu2和stu3同时对他们的

目前,我正在尝试建立一个向学生分发通用数据库的设置。他们将使用这个数据库开发一个应用程序(比如购物车应用程序),将他们的项目提交到我们的服务器上,然后它将自动评分

这些数据库正在Microsoft SQL Server 2005中运行

我们使用用户实例来实例化每个数据库,并且可以同时为多个请求提供服务。但是,问题是,当一个以上的学生提交了一个要评分的项目时,要实例化的第一个数据库将是唯一的数据库,并且将覆盖当前打开的所有其他副本

因此,如果stu1修改了他的数据库,stu2和stu3同时对他们的项目进行评分,那么在评分结束时,stu1、stu2和stu3在最后会有相同的DB

是否有任何方法可以拥有通用数据库的多个独立副本,每个副本都可以并发加载和修改,而不会对任何一个数据库进行任何更改,从而影响其他数据库

我读了一点书,认为可以按照以下思路做一些事情:

  • 学生提交项目
  • 使用唯一的数据库连接数据库 姓名(由学生指定)
  • 做所有必要的操作
  • 分离数据库

  • 我不确定这是否会解决我们的问题或可能,所以任何帮助将不胜感激

    简单的解决方案是让他们唯一地命名数据库。实际上,从一开始就开发他们的代码来使用这个唯一的名称。难道你不能要求学生把他们的数据库命名为STU_1234,其中“1234”是他们唯一的学生编号吗。你可以更进一步:STU_111_222_333_444444,其中111是类,222是部分,333是作业,444444是他们唯一的学生id。这样就不需要做任何花哨的事情。

    简单的解决方案是让他们唯一地命名数据库。实际上,从一开始就开发他们的代码来使用这个唯一的名称。难道你不能要求学生把他们的数据库命名为STU_1234,其中“1234”是他们唯一的学生编号吗。你可以更进一步:STU_111_222_333_444444,其中111是班级,222是部门,333是作业,444444是他们唯一的学生id。这样就不需要做任何花哨的事情。

    我们做了类似的事情,客户登录网站并输入设置信息。然后,网站创建一个通用数据库的副本,并将设置信息加载到数据库中,创建备份并将备份文件发送给客户。听起来您的主要问题是所有数据库的名称都相同。我的建议是使用以下步骤进行评分:

  • 学生提交数据库的备份副本(标准.BAK文件)
  • 评分系统使用脚本首先在服务器上创建具有唯一名称的新空白数据库。首先创建一个新数据库,以便在服务器上的正确位置创建文件,这一点很重要。要创建唯一的名称,您应该使用项目id、学生id,如果学生将提交多个数据库,还可能使用时间戳
  • 脚本使用备份替换选项从备份中使用数据库替换空白数据库。
  • 然后,您可以运行所需的任何放坡步骤,或者保持数据库的连接以供将来参考,或者在空间有限时将其删除
  • 您可以在C#或Powershell中编写脚本,并使用以下SQL查询:

    USE Master
    CREATE DATABASE [PROJECTID_STUDENTID_TIMESTAMP]
    --Unique database is now created and stored in default SQL data/log file location
    RESTORE DATABASE [PROJECTID_STUDENTID_TIMESTAMP] FROM DISK = 'c:\pathtofile\filename.bak' WITH REPLACE
    --Student database is now available for grading
    USE [PROJECTID_STUDENTID_TIMESTAMP]
    --Add grading scripts here
    

    我们做了一些类似的事情,客户登录到一个网站并输入设置信息。然后,网站创建一个通用数据库的副本,并将设置信息加载到数据库中,创建备份并将备份文件发送给客户。听起来您的主要问题是所有数据库的名称都相同。我的建议是使用以下步骤进行评分:

  • 学生提交数据库的备份副本(标准.BAK文件)
  • 评分系统使用脚本首先在服务器上创建具有唯一名称的新空白数据库。首先创建一个新数据库,以便在服务器上的正确位置创建文件,这一点很重要。要创建唯一的名称,您应该使用项目id、学生id,如果学生将提交多个数据库,还可能使用时间戳
  • 脚本使用备份替换选项从备份中使用数据库替换空白数据库。
  • 然后,您可以运行所需的任何放坡步骤,或者保持数据库的连接以供将来参考,或者在空间有限时将其删除
  • 您可以在C#或Powershell中编写脚本,并使用以下SQL查询:

    USE Master
    CREATE DATABASE [PROJECTID_STUDENTID_TIMESTAMP]
    --Unique database is now created and stored in default SQL data/log file location
    RESTORE DATABASE [PROJECTID_STUDENTID_TIMESTAMP] FROM DISK = 'c:\pathtofile\filename.bak' WITH REPLACE
    --Student database is now available for grading
    USE [PROJECTID_STUDENTID_TIMESTAMP]
    --Add grading scripts here
    

    我假设学生分离数据库,然后您连接到服务器。此时,您可以选择唯一的数据库名称

    或者,您可以恢复备份并选择数据库的名称,以便它们始终是唯一的


    此外,假设学生的工作完全在数据库中进行,那么在测试他们的代码时,数据库的名称实际上与您和他们无关——除了用于从任何客户端代码进行外部访问的连接字符串。

    我假设学生分离数据库,然后您连接到服务器。此时,您可以选择唯一的数据库名称

    或者,您可以恢复备份并选择数据库的名称,以便它们始终是唯一的


    此外,假设学生的工作完全在数据库中进行,那么在测试他们的代码时,数据库的名称实际上与您和他们无关-除了用于从任何客户端代码进行外部访问的连接字符串。

    我们可以,但是我们需要它,这样学生们就可以在线下载包含规范的项目包