一位开发人员说我应该简单地将所有数据库升级脚本包装在一个事务中。如果失败,只需回滚所有更改。我的直觉告诉我这是错误的,尤其是在处理大量数据和/或过程和函数时。
我通常按如下方式对单实例数据库进行升级:
但是,当涉及对数百个实例进行更改时,我已将流程更改如下:
我使升级脚本更加健壮:它们可以在同一台服务器上多次运行而不会造成损害,数据库版本号是正确的,如果它们针对运行版本运行,脚本将终止等。
为每个服务器生成一个进程(使用 powershell、osql 等)
我在 Windows2008R2 上安装了一堆 SQL Server。目前,每个 Windows 服务器都有两个 NIC,每个都连接到不同的网络。换句话说,每个服务器都出现在每个网络上。一个网络允许应用程序访问数据库,另一个网络旨在用于在服务器之间迁移大量数据而不影响应用程序使用的网络。
我有一份工作将大量数据从一个 SQL 服务器拉入另一个。我也希望那份工作能够利用第二个网络,但我很难过。
有没有办法告诉 SQL 在与另一台服务器通信时使用特定的网络设备?
谢谢!
我目前正在做我最后一年的电信采矿项目。在开始项目时,我对选择数据库感到困惑。随着移动通信数据的不断增加,我认为大数据对于降低项目的时间复杂度很有用。但我坚持寻找更好的选择。除了大数据的一般概念外,我对大数据没有任何经验,但我对关系数据库(oracle)不熟悉。
所以我的问题是:- 哪些数据将是进行此类项目的最佳选择,为什么?因此,我感谢有关数据库选择和设计的任何建议。
项目背景:- 我们有数百个客户的电话详细信息以及他们的个人信息,我们必须执行各种挖掘技术进行模式分析。
我需要在数百个不属于域的服务器上运行一些临时查询。每个服务器都有一个低权限 SQL 用户帐户,该帐户对一些感兴趣的表具有只读访问权限。
我的想法是将这些服务器的名称存储在一个表中,并使用该表来驱动 OPENDATASOURCE 或 OPENROWSET 命令。
服务器要么在不同的域中,要么在不受信任的域中,要么在工作组中,等等。一团糟。
我一生都找不到如何配置这些命令以使用 SQL Server 帐户/密码组合的示例。
注意:这发生在沙箱中,并不适用于现实世界。这只是一个概念证明,因此安全性不是主要问题。这些服务器是通过一个模拟真实网络增长的过程产生的。
作为记录,我能够让 OPENROWSET 工作:
SELECT *
FROM OPENROWSET('SQLNCLI',
'DRIVER={SQL Server};SERVER=MyServer;UID=MyUserID;PWD=MyCleverPassword',
'select @@ServerName')
Run Code Online (Sandbox Code Playgroud) 我正在创建一系列将启用页面级压缩的新表。
这是否也会影响索引,还是在创建索引时我还必须指定压缩?
create table Message
(
pk_Message int identity NOT NULL constraint PK_Message primary key,
[Message] varchar(900) NOT NULL constraint UK_Message__Message unique,
DateCreated datetime NOT NULL default getdate()
) with (data_compression = page)
go
Run Code Online (Sandbox Code Playgroud)
正如您在我的示例中看到的那样,我计划对相当大的数据类型创建唯一约束,并希望利用压缩。
在 SQL Server 中,float 数据类型在小数点后不显示尾随零
declare @num as float
set @num=5.20
select @num
Run Code Online (Sandbox Code Playgroud)
只会显示5.2
但我希望它显示为5.20
经过一番研究,我发现它可以通过使用来解决
select CAST(@num AS numeric(10,2))
Run Code Online (Sandbox Code Playgroud)
但这不是我期望的解决方案。有没有像设置数据类型或更改数据类型这样的方法,以便我可以实现相同的目标?(如果 float 中有任何变体可以做同样的事情会更好)
如果可能,那么我不需要更改 SQL 语句并包含强制转换等。所以请帮我解决这个问题。
我使用 PowerShell 脚本将多个 SQL Server 作业部署到一组服务器。我可以创建作业步骤、成功失败操作,甚至是输出文件。这一切都适用于多台服务器。我无法确定的是如何指定将输出文件附加到而不是覆盖。
以下是我的主脚本部分。$Job在上一步中填充。
$JobStep = new-object ('Microsoft.SqlServer.Management.Smo.Agent.JobStep') ($Job, 'MyJobStepName')
$JobStep.ID = 1
$JobStep.SubSystem = 'PowerShell'
$Command = 'dir d:\'
$JobStep.Command = $Command
$JobStep.OnSuccessAction = 'GotoNextStep'
$JobStep.OnFailAction = 'GotoNextStep'
$JobStep.OutputFileName = 'D:\MyJobFile.txt'
$JobStep.Create()
Run Code Online (Sandbox Code Playgroud)
我一直在使用这个 MSDN页面作为参考。
我使用 SQL Server Management Studio 修改了其中一个步骤并跟踪了结果。这看起来很有希望。创建作业步骤后,我可以发出 SQL 命令。
EXEC msdb.dbo.sp_update_jobstep @job_id=N'12156dcb-c8cd-4267-901a-55175dd44960', @step_id=1 ,
@flags=2
Run Code Online (Sandbox Code Playgroud) 我发现我最近花了很多时间检查由索引调整顾问或其他一些自动化过程生成的建议索引列表。
回到那天(大约 2005 年),我发现这些建议相当糟糕,因为它们似乎针对一个特定的查询,而且通常只是一个覆盖索引,该索引包含表中的每一列,无论这些列是否已经是索引.
随着时间的推移,我觉得指数调优顾问有了很大的进步,但我仍然有一种内在的不信任感,仍然想花时间对每一个进行审查。
我尽量不悲观,但是当供应商(Microsoft)建议添加多个重叠覆盖索引以提高性能时,这很困难,尤其是当我们为存储空间付费时。我也不想不必要地浪费自己的时间。我宁愿修复写得不好的查询。
sql-server ×6
compression ×1
datatypes ×1
index-tuning ×1
network ×1
openrowset ×1
powershell ×1
rdbms ×1
smo ×1
upgrade ×1