我们正在研究为 SQL Server 使用快照备份的方向,而不是更传统的备份方法。我们正在使用 CommVault(也将用于快照..)
我试图更好地了解它们与传统备份或使用 CommVault 的代理备份相比如何工作。由于我不是一个真正的存储专家,我不太了解恢复过程如何从 SQL 数据库的快照备份中工作。
我确实了解绝对的速度优势,但想了解更多关于使用 SQL Server 快照备份的利弊。
我们正在研究为 SQL Server 使用快照备份的方向,而不是更传统的备份方法。我们正在使用 CommVault(也将用于快照..)
我试图更好地了解它们与传统备份或使用 CommVault 的代理备份相比如何工作。由于我不是一个真正的存储专家,我不太了解恢复过程如何从 SQL 数据库的快照备份中工作。
我确实了解绝对的速度优势,但想了解更多关于使用 SQL Server 快照备份的利弊。
我看到类似的问题,但大多数都与日期时间或完全不同的要求有关。
我有一个 CSV 报告,其中有一个存储为 HH:MM[:SS] 的时间列(如果超过 1 天,它会添加 :00 秒......令人讨厌的是,我无法控制报告本身的运行方式。 ) 我认为,在派生列任务中,我们可以降秒。
例子:
我的问题是:
相关信息:SQL Server 2014 和 SSDT for VS 2013
谢谢你,韦斯
我们的数据仓库有一个 2 节点集群 SQL Server 2014 Enterprise 环境。存储、网络和服务器都是高性能的(1tb 内存,每个节点 32 核 CPU,所有 SSD)
我们正试图想出将 SSIS 本身放在哪里。根据 Microsoft 文档,不建议将其集群化,因此不应在 2 个节点上(尽管我确实将其与实例一起安装,但我们不必使用 if 从那里可以禁用服务。)另一方面,我们真的不想花钱购买 8 个 vCPU 的许可,以将其放在同一生态系统中的可用服务器上(用于供应商的专有 ETL。)
关于如何/在何处为群集 SQL Server 数据库环境安装 SSIS 的最佳做法和建议是什么?
谢谢你,韦斯
编辑:微软在这里讨论这个问题:https ://learn.microsoft.com/en-us/sql/integration-services/service/integration-services-ssis-in-a-cluster但没有将推荐的方法作为选择。
在测试数据库中,我希望:
我的工作流程也和上面一样,除了在删除聚集索引之前禁用所有非聚集索引。
由于删除聚集约束索引需要将表保存为 HEAP,因此此过程在我们的 45m 行表上花费的时间是巨大的。约束的下降一直持续到 1:17:00,似乎只有大约 31m(基于 Spotlight for the Session 中的逻辑读取)。
有没有更有效的方法来处理这个工作流程?也许是一种删除约束索引并重建为新的聚集索引而不是 HEAP 的方法?
谢谢,韦斯
DDL 语句:
表结构
CREATE TABLE [dbo].[hist](
[prrowid] [varchar](36) NOT NULL,
[part] [varchar](30) NULL,
[date] [datetime] NULL,
[per_date] [datetime] NULL,
[type] [varchar](80) NULL,
[loc] [varchar](80) NULL,
[loc_begin] [decimal](28, 10) NULL,
[begin_qoh] [decimal](28, 10) NULL,
[qty_req] [decimal](28, 10) NULL,
[qty_chg] [decimal](28, 10) NULL,
[qty_short] [decimal](28, 10) NULL,
[um] [varchar](30) NULL,
[last_date] [datetime] NULL,
[nbr] [varchar](30) NULL,
[so_job] [varchar](80) NULL,
[ship_type] [varchar](30) NULL,
[addr] [varchar](80) NULL,
[rmks] [varchar](80) NULL,
[xdr_acct] [varchar](80) NULL,
[xcr_acct] [varchar](80) NULL,
[mtl_std] [decimal](28, 10) NULL,
[lbr_std] [decimal](28, 10) NULL,
[bdn_std] [decimal](28, 10) NULL,
[price] [decimal](28, 10) NULL,
[trnbr] [int] NULL,
[gl_amt] [decimal](28, 10) NULL,
[xdr_cc] [varchar](30) NULL,
[xcr_cc] [varchar](30) NULL,
[lot] [varchar](80) NULL,
[sub_std] [decimal](28, 10) NULL,
[gl_date] [datetime] NULL,
[qty_loc] [decimal](28, 10) NULL,
[userid] [varchar](80) NULL,
[serial] [varchar](50) NULL,
[effdate] [datetime] NULL,
[prod_line] [varchar](30) NULL,
[xslspsn1] [varchar](80) NULL,
[xslspsn2] [varchar](80) NULL,
[xcr_proj] [varchar](80) NULL,
[xdr_proj] [varchar](80) NULL,
[line] [int] NULL,
[user1] [varchar](80) NULL,
[user2] [varchar](80) NULL,
[curr] [varchar](30) NULL,
[ex_rate] [decimal](28, 10) NULL,
[rev] [varchar](30) NULL,
[time] [int] NULL,
[ovh_std] [decimal](28, 10) NULL,
[site] [varchar](80) NULL,
[status] [varchar](80) NULL,
[grade] [varchar](30) NULL,
[expire] [datetime] NULL,
[assay] [decimal](28, 10) NULL,
[xgl_ref] [varchar](30) NULL,
[_chr01] [varchar](80) NULL,
[_chr02] [varchar](80) NULL,
[_chr03] [varchar](80) NULL,
[_chr04] [varchar](80) NULL,
[_chr05] [varchar](80) NULL,
[_chr06] [varchar](80) NULL,
[_chr07] [varchar](80) NULL,
[_chr08] [varchar](80) NULL,
[_chr09] [varchar](80) NULL,
[_chr10] [varchar](80) NULL,
[_chr11] [varchar](80) NULL,
[_chr12] [varchar](80) NULL,
[_chr13] [varchar](80) NULL,
[_chr14] [varchar](80) NULL,
[_chr15] [varchar](80) NULL,
[_dte01] [datetime] NULL,
[_dte02] [datetime] NULL,
[_dte03] [datetime] NULL,
[_dte04] [datetime] NULL,
[_dte05] [datetime] NULL,
[_dec01] [decimal](28, 10) NULL,
[_dec02] [decimal](28, 10) NULL,
[_dec03] [decimal](28, 10) NULL,
[_dec04] [decimal](28, 10) NULL,
[_dec05] [decimal](28, 10) NULL,
[_log01] [bit] NULL,
[_log02] [bit] NULL,
[ref] [varchar](80) NULL,
[msg] [int] NULL,
[program] [varchar](30) NULL,
[ord_rev] [int] NULL,
[ref_site] [varchar](80) NULL,
[rsn_code] [varchar](80) NULL,
[vend_lot] [varchar](30) NULL,
[vend_date] [datetime] NULL,
[daycode] [varchar](80) NULL,
[for] [varchar](30) NULL,
[slspsn##1] [varchar](82) NULL,
[slspsn##2] [varchar](82) NULL,
[slspsn##3] [varchar](82) NULL,
[slspsn##4] [varchar](82) NULL,
[fsm_type] [varchar](80) NULL,
[upd_isb] [bit] NULL,
[auto_install] [bit] NULL,
[ca_int_type] [varchar](80) NULL,
[covered_amt] [decimal](28, 10) NULL,
[fcg_code] [varchar](80) NULL,
[batch] [varchar](30) NULL,
[fsc_code] [varchar](80) NULL,
[sa_nbr] [varchar](80) NULL,
[sv_code] [varchar](80) NULL,
[eng_area] [varchar](30) NULL,
[sys_prod] [varchar](30) NULL,
[svc_type] [varchar](30) NULL,
[ca_opn_date] [datetime] NULL,
[cprice] [decimal](28, 10) NULL,
[eng_code] [varchar](80) NULL,
[wod_op] [int] NULL,
[enduser] [varchar](80) NULL,
[ship_inv_mov] [varchar](80) NULL,
[ship_date] [datetime] NULL,
[ship_id] [varchar](30) NULL,
[ex_rate2] [decimal](28, 10) NULL,
[ex_ratetype] [varchar](80) NULL,
[exru_seq] [int] NULL,
[promise_date] [datetime] NULL,
[fldchg_cmtindx] [int] NULL,
[SrcPDB] [varchar](12) NULL,
CONSTRAINT [hist_PK] PRIMARY KEY CLUSTERED
(
[prrowid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
当前指数
ALTER TABLE [dbo].[hist] ADD CONSTRAINT [hist_PK] PRIMARY KEY CLUSTERED ( [prrowid] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##addr_eff] ON [dbo].[hist] ( [addr], [effdate] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##batch] ON [dbo].[hist] ( [batch] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##date_trn] ON [dbo].[hist] ( [date], [trnbr] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##eff_trnbr] ON [dbo].[hist] ( [effdate], [trnbr] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##nbr_eff] ON [dbo].[hist] ( [nbr], [effdate] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##part_eff] ON [dbo].[hist] ( [part], [effdate] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##part_trn] ON [dbo].[hist] ( [part], [trnbr] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##ref_filter] ON [dbo].[hist] ( [ref] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##serial] ON [dbo].[hist] ( [serial] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##trnbr] ON [dbo].[hist] ( [trnbr] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##type] ON [dbo].[hist] ( [type], [effdate] ) WITH (FILLFACTOR=100);
所需的索引
CREATE UNIQUE CLUSTERED INDEX [hist##date_trn_CX] ON [dbo].[hist] ( [date], [trnbr] ) WITH (FILLFACTOR=100);
ALTER TABLE [dbo].[hist] ADD CONSTRAINT [hist_PK] PRIMARY KEY NONCLUSTERED ( [prrowid] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##addr_eff] ON [dbo].[hist] ( [addr], [effdate] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##batch] ON [dbo].[hist] ( [batch] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##eff_trnbr] ON [dbo].[hist] ( [effdate], [trnbr] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##part_eff] ON [dbo].[hist] ( [part], [effdate] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##part_trn] ON [dbo].[hist] ( [part], [trnbr] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##ref_filter] ON [dbo].[hist] ( [ref] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##serial] ON [dbo].[hist] ( [serial] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##trnbr] ON [dbo].[hist] ( [trnbr] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##nbr_eff] ON [dbo].[hist] ( [trnbr], [effdate] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##trnbr_char] ON [dbo].[hist] ( [trnbr_char] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##type] ON [dbo].[hist] ( [type], [effdate] ) WITH (FILLFACTOR=100);
CREATE INDEX [hist##vend_lot] ON [dbo].[hist] ( [vend_lot] ) WITH (FILLFACTOR=100);
-- 注意 -- 下面的答案对我来说非常有效。我确实必须添加一个音量。我在新驱动器上创建了第二个文件组和一个数据文件。此外,还有另一个日志文件。
我们有一个包含 6 个 tempdb 文件的 OLTP 数据库(运行 SQL Server 2008 R2)。
它们都有 10% 的自动增长,限制增长到 10000mb。有一次,有人将其中一个增长限制为 120000mb,这导致该 tempdb 文件比其他文件呈指数级增长。我们正试图追踪此更改可能发生的时间。
是否可以查看设置更改的时间或 tempdb 增长的历史记录?
一个问题是问题已得到解决,tempdb 文件已恢复到正常大小。
我们有一个包含 1000 多个表的数据库。我需要创建一个角色,允许对所有表进行只读,以及对两个特定表的写访问。
我在搞乱数据库角色,但是每当我去添加表时,我不得不手动选择所有 1000 个......有没有更好的方法来做到这一点?
我们有一个生产箱,上面有大约 60 种出版物。其中一些已使用,而有些似乎没有... 我需要做的是创建或查找一个脚本,该脚本将获取每个出版物的订阅者/订阅数,以便我可以轻松识别未使用的出版物。
我们使用的是 SQL Server 2005。:(
谢谢你,韦斯
我正在创建一个存储过程:
这是我的新砖墙......在这个数据库服务器上,我有一个“外壳”数据库,他们将从中运行 SP,它有一个历史表,所以我可以跟踪谁使用我的 SP 创建/删除了数据库。 .. sp_startpublication_snapshot 的唯一参数是@publication ... 我可以给它发布名称,但由于我不是从发布数据库运行它,我如何指定发布数据库?
即:出版物显示为:
[WC48_Database1]: upb_Inspection_PrimaryArticles
但我正在从数据库 [WC_QACatalog] 运行脚本
关于如何实现这一目标的任何想法?
谢谢你,韦斯
我正在为我们的 QA 部门创建一个存储过程,它将执行以下操作:接受特定输入以生成一致的名称,恢复数据库(为其提供生成的名称,)设置数据库以进行复制(三个合并发布),然后初始化这三个发布的快照。
不要担心这个的复制部分,到目前为止我已经处理过了。我想知道的是:
恢复数据库的最有效/效率最高的方法是什么?它将从备份中恢复(他们将从中恢复的 2 个数据库是 1.5gb 和 599mb)还是另一种方式?如果它不是来自 .bak 文件,您认为还有什么其他合适的恢复方式?
:: 这需要发生,严格来说,使用 TSQL ::
谢谢你,韦斯
我有一个测试环境设置如下:
我们正在测试升级到 SQL Server 2012 Developer Edition (sp1) 的过程...
我已经下载了 64 位 SQL Server 2012 Dev 的 iso。(sp1) 来自 MSDN(完整许可副本),并已开始沿着升级路径前进。在开始检查不同标准的最后阶段之一,我们遇到了一个奇怪的问题,如下所述:
Rule "Upgrade architecture mismatch" failed. The CPU architectures of upgrading feature(s) are different. To upgrade these features, Setup architecture must be the same as the features being installed.
此外,在升级日志文件中,我发现了以下(更详细的)输出:
(03) 2012-12-28 14:02:45 Slp: Init rule target object: Microsoft.SqlServer.Configuration.SetupExtension.BlockMixedArchitecture
(03) 2012-12-28 14:02:45 Slp: Rule 'BlockMixedArchitectureUpgrade' detection result: IsMixedArchitectureInstall= True
(03) 2012-12-28 14:02:45 Slp: Evaluating rule : BlockMixedArchitectureUpgrade
(03) 2012-12-28 14:02:45 Slp: Rule running on machine: REPLICATIONTEST
(03) 2012-12-28 14:02:45 Slp: Rule evaluation done : Failed
(03) 2012-12-28 14:02:45 Slp: Rule evaluation message: The CPU architectures of upgrading feature(s) and this installation program are different. To upgrade these features, Setup architecture must be the same as the features being installed.
我已经确定我们使用的是 x64 系统而不是 ia64,而且我看不出为什么会发生不匹配。需要注意的一点:我们不能简单地安装 SQL Server 2012,然后将数据库重新附加到它,因为我们有 20 多个实时数据库(在生产中)并设置了 40 多个出版物......如果我们不得不重新 - 这将是一场绝对的噩梦设置复制。
以下是 SQL Server 2005 设置的版本信息:
Microsoft SQL Server 2005 - 9.00.5000.00 (X64)
Dec 10 2010 10:38:40
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
9.00.5000.00 表示 SP4。
明天我将为此致电 Microsoft 支持。
我们有一位客户在尝试将客户端(订阅者)同步到服务器(发布者)时收到以下错误:
2012-11-30 21:03:33.334 Percent Complete: 18
2012-11-30 21:03:33.334 Data validation failed for one or more articles. When troubleshooting, check the output log files for any errors that may be preventing data from being synchronized properly. Note that when error compensation or delete tracking functionalities are disabled for an article, non-convergence can occur.
2012-11-30 21:03:33.334 OLE DB Distributor 'EnvisionSQL\SQL2005': {call sys.sp_MSadd_merge_history90 (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
2012-11-30 21:03:33.506 Percent Complete: 0
2012-11-30 21:03:33.506 Category:NULL
Source: Merge Process
Number: -2147200953
Message: Data validation failed for one or more articles. When troubleshooting, check the output log files for any errors that may be preventing data from being synchronized properly. Note that when error compensation or delete tracking functionalities are disabled for an article, non-convergence can occur.
2012-11-30 21:03:33.521 Percent Complete: 0
2012-11-30 21:03:33.521 Category:NULL
Source: Merge Process
Number: -2147200953
Message: Article 'TB_CORE_DAILY' failed data validation (rowcount only). Rowcount actual: 80367, expected: 0.
2012-11-30 21:03:33.537 Percent Complete: 0
2012-11-30 21:03:33.537 Category:NULL
Source: Merge Process
Number: -2147200953
Message: Article 'TB_CORE_INSPECTION_VIOL' failed data validation (rowcount only). Rowcount actual: 19451, expected: 0.
服务器是2005,本地数据库引擎是2005 express。
什么可能导致实际/预期行数不匹配?
我正在尝试对此进行更多研究,所以我想我会重新点燃这个讨论,看看是否有其他人有一些意见。
我了解rowcount
验证的工作原理,但为什么我会在具有已知数据的表上收到 0 的预期值?
我们正在开发一个用于部署我们的大型应用程序(即应用程序的服务器端)的 WiX 项目。客户可以选择将应用程序服务器、SQL Server 和报告服务器都放在同一个盒子上,在 2盒子或在 3 个单独的盒子(或虚拟机)上。
这是我们目前正在解决的问题之一。对于 SSRS 端,我们需要部署一个大约 7mb 的主模型。默认安装 SSRS,最大为 4mb。我知道我们需要手动操作两个 web.config 文件来添加“maxRequestLength”字符串,但我们真的不想在他们的服务器上这样做,并且假设这符合客户端安全策略以及那个他们还没有将其设置为另一个应用程序的其他值。(我们不能假设他们仅将 SSRS 实例用于我们的应用程序。)
我们的客户是当地市和县政府。
有没有办法绕过最大上传大小限制手动完成部署模型文件?
-厕所