如何对SQL server express进行实时更改

时间:2011-05-14 21:49:00

标签: sql sql-server database live-update

我一直在使用VS studio开发一个asp.net网络应用程序。我正在使用SQL Server Express。 在开发过程中,我一直在我的服务器上测试我的Web应用程序

每次我需要更新我的数据库时,我只需删除旧数据库(位于我的服务器上)并上传我的新数据库。由于我只是在测试,而我的应用没有用户,所以它不是问题。

问题:

我的网站上线后,我不知道如何更改我的网站。显然我不能简单地删除它,因为它将包含用户数据。那么人们通常如何更新实时数据库。也就是说,假设我的网站是实时的,现在我需要向我的数据库添加更多表和存储过程。我如何在现场网站上这样做?

4 个答案:

答案 0 :(得分:4)

要更改生产数据库,您需要:

  1. 尝试在最少数量的用户受到影响时安排中断,发布信息以便用户在
  2. 之前了解
  3. 使用data definition language (DDL) scripts to make the changes to the database tables, and potentially data manipulation language (DML) scripts按摩现有数据,了解更改所需的内容。
  4. 步骤2所需的脚本应该已经在开发和测试/ QA环境中进行了测试,以确保在生产系统中遇到尽可能少的问题。开发和测试/ QA环境都需要允许您将数据库还原到以前版本的应用程序的备份。

答案 1 :(得分:2)

您需要:

  • 在没有人使用该网站时更新您的数据库。 OR
  • 确保您的更新不会影响网站的运营。

第二个选项涉及为任何新的非NULLable列提供合理的默认值,确保所有INSERT语句都使用列列表(例如INSERT INTO dbo.MyTable (col1, col2, col3) VALUES (...))并确保新的存储过程参数具有默认值。这不是一个详尽的清单,而是一个良好的开端。

答案 2 :(得分:1)

我们主要创建发布脚本,以便更改脚本并可重复。所以你会看到像

这样的东西
IF NOT EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_NAME = 'myTableName' 
           AND  COLUMN_NAME = 'myColumnName')
BEGIN
     ALTER TABLE myTableName
     ADD myColumnName varchar(50)
END

您可以通过以下内容判断哪些对象已更改:

SELECT
[name],
create_date,
modify_date
FROM sys.tables
ORDER BY
modify_date DESC

有些人使用RedGate软件来比较2个不同的数据库,但这需要付出代价。

答案 3 :(得分:0)

这取决于您要对实时数据库进行的那种更改。

在您的问题中,您只谈论添加新表和存储过程 只要你只添加新东西(表,sprocs,甚至新列到现有表),你就不必做任何特别的事情,因为SQL Server可以在数据库使用时执行此操作并且更改不会影响您的用户,因为他们的应用版本甚至不知道您新添加的内容。

另一方面,如果你改变甚至删除现有的东西,它会变得更加复杂 很有可能这对您的应用程序来说是一个重大变化,因为当表格看起来与预期不同或者它试图访问不再存在的表格/ sprocs时,它可能会停止工作。
(即使你只是添加我刚才所说的新东西 - 你可能还是想要更新你的应用程序,所以它实际上可以在数据库中使用新的东西)

因此,您可能需要同时更改数据库并部署新版本的应用程序。

我不是ASP.NET专家,但据我所知,如果没有所有活动用户被淘汰,就无法更新ASP.NET应用程序。
因此,在这种情况下,您必须执行what OMG Ponies already said:选择受影响最少的用户数量的时间,和/或尽早通知您的用户有关计划中断的信息。