我们的两个数据中心之一正在进行至少 72 小时的维护,但可能长达 5 天,而且我有一个非常古老的遗留 SQL Server 运行生产服务作为跨两个数据中心的镜像。
我想在中断期间,我可以暂停镜像,但我想知道对主体的事务日志会有什么影响?我们已经安排了每小时运行一次的 t-log 备份,所以这应该可以防止它们变得太大,对吧?
重新启动镜像时,这对复制有何影响?完全破坏镜像,将数据库置于简单恢复模式,然后再重建镜像会更容易吗?
我们的两个数据中心之一正在进行至少 72 小时的维护,但可能长达 5 天,而且我有一个非常古老的遗留 SQL Server 运行生产服务作为跨两个数据中心的镜像。
我想在中断期间,我可以暂停镜像,但我想知道对主体的事务日志会有什么影响?我们已经安排了每小时运行一次的 t-log 备份,所以这应该可以防止它们变得太大,对吧?
重新启动镜像时,这对复制有何影响?完全破坏镜像,将数据库置于简单恢复模式,然后再重建镜像会更容易吗?
我有一个包含许多模式的 Oracle 12c 数据库,每个模式都属于一个特定的应用程序。
我想生成一个查询,显示哪些模式在读/写活动/IO 等方面最繁忙。
我知道我可以使用 DBA_TAB_MODIFICATIONS 表来获取每个表自上次统计更新以来的修改。
有人告诉我,DBA_HIST 对象将能够为我提供更多信息,但那里有很多数据,我真的不知道如何为此目的充分利用它。
任何帮助,将不胜感激。
因此,使用 Mongo Atlas,我可以通过调用 API 轻松列出项目中的集群,如下所示:
curl -i -u "<[email protected]>:<my-api-key>" --digest "https://cloud.mongodb.com/api/atlas/v1.0/groups/<groupid>/clusters"
我想列出特定集群的所有数据库(如果可能,还包括所有嵌套集合)。
这是否可以通过 API 实现 - 我确定一定可以,但我没有在文档中看到它。
我想避免必须连接到每个集群并通过查询收集此信息——这是我为清点目的而构建的服务发现工具。
谢谢
我一直在用 MySQL 和 MariaDB 做一些测试,我注意到二进制日志的增长有很大的不同——我在网上找不到太多关于这个的信息。
我有一个测试数据库,并且编写了一个模拟事务活动(选择、更新、插入、删除等)的脚本,目的是进行一些简单的负载测试,然后用于测试时间点恢复过程。
我注意到,在 MySQL 上运行我的自动化脚本半小时会产生大约 400MB 的二进制日志。
当我在 MariaDB 上做同样的事情时,我只得到大约 2MB 的二进制日志。
所有设置都是相同的,即。
最大 Binlog 大小:100MB 缓冲池:最大 2GB
MySQL 运行的是 v 5.7,Mariadb 运行的是 10.3——两者都在我本地笔记本电脑上的 Docker 中运行。
我还注意到 MariaDB 在性能方面更灵活一些,与使用 MySQL 相比,我在半小时内获得了更多的查询吞吐量。
显然,这里最大的不同在于二进制日志的大小。MariaDB 的较小尺寸意味着我可以比在 MySQL 上更快地前滚二进制日志以进行时间点恢复。
是否有任何书面证据支持这种行为?在查看二进制日志和恢复时,MariaDB 是否比 MySQL 更高效?
是否有一些我应该检查的隐藏/不明显的变量可能会对此测试产生重大影响?
任何有助于理解这一点的帮助都会很棒。
我正在寻找一种方法来扩展 SHOW BINARY LOGS 命令以显示创建日期,或者至少显示每个日志适用的时间范围。
有没有办法在 MySQL 中做到这一点,还是我必须单独阅读每个日志以检查它涵盖的时间段?
希望您能帮助我理解将 Oracle 12c 数据库转换为 MySQL 5.7 时遇到的特定问题。
对于上下文,假设我们有一个看起来有点像这样的表:
id firstname lastname
---------------------------
1 John Jones
2 tom smith
3 ALEX JonEs
数据可以以任何大小写或混合大小写的形式输入到表中,在应用程序级别没有控制,在数据库级别没有任何约束或触发器。
所以为了有效的查询,在Oracle中创建了一个函数式索引如下,因为我们查询lastname字段时总是会使用小写函数:
CREATE INDEX idx_table1_lastname ON schema1.table1 (LOWERCASE(lastname))
我们不能在 MySQL 中这样做,因为函数索引不是一个东西。MySQL 中的同一列已创建为排序规则utf8-general-ci
,所以我的问题是这个。
如果我们在 MySQL 数据库上创建相同的索引,我们只能这样做:
CREATE INDEX idx_table1_lastname ON table1 (lastname)
考虑到我们列的排序规则不区分大小写,索引是否有效?或者我们应该采取一些措施来确保我们对该字段的所有数据库写入都以一致的方式写入?
谢谢
与在本地(在 Visual Studio 中)或在本机安装的 Reporting Services (SQL Server 2012 SP3) 中运行报表相比,我们在 SharePoint 2010 web 部件中呈现报表时遇到了非常令人沮丧的性能问题。
在 SharePoint 中,我们使用的是 SQL Server 2012 SP3 Reporting Services 加载项。我们在网络场中有两台负载平衡的 Web 服务器和两台负载平衡的应用程序服务器,以及一台同时包含 SharePoint 数据库和我们的“报告”数据库的数据库服务器。
从执行日志中,我可以看到当报告在本地和本地报告服务中执行时,数据检索和数据处理时间是匹配的,但是呈现时间可能大不相同。本地或本机 1 秒,在 SharePoint 中为 30-40 秒。
我知道在过去,当结合使用 SharePoint 2010 和 SQL Server 2008R2 时,报告呈现存在记录问题 - 但是,没有任何迹象表明这仍然是一个广为人知的问题。
我们的服务器有很多资源,绰绰有余,每台 32GB - 所以我认为这不是资源问题。我也不认为我们可以接受额外的开销,就添加的 HTTP 调用而言,这就是问题所在。它肯定不会让问题变得那么糟糕吗?
运行此配置时是否需要注意任何陷阱?为什么以集成模式运行 Report Services 对性能如此不利?
我被要求注册一个现有的 dll 文件,以便可以在 SSIS 脚本组件中引用它。
我对使用 gacutil.exe 执行此操作的记忆模糊而遥远,所以这是我最初的尝试。
但是,gacutil.exe 不存在于集成服务器上,可能是因为那里没有安装完整版的 Visual Studio,只安装了 Data Tools shell。我还尝试将文件复制到 C:/windows/assembly 中,因为我读到这会起作用,但是当我将文件放入其中时什么都没有发生,只是取消了。
如果没有 gacutil.exe,我怎么能做到这一点?有没有办法或者必须安装完整的 VS SDK 才能做到这一点。
我熟悉 SQL Server 的数据库加密选项,例如 TDE,并确保备份/备份位置得到正确加密和保护。
我正在为一个新客户做一些工作,他要求我详细说明端到端加密的选项,换句话说,以确保从数据库服务器发送到应用程序服务器的数据在途中保持加密并且不能被拦截(或者更确切地说,解释) 通过任何类型的数据包监控。
我知道使用 SSL 证书来加密与数据库的连接,尽管这是我很少配置的。I really don't know if that is an adequate option for end to end encryption as surely this cannot be configured using SQL Server alone?
在我看来,应用程序端或网络路由上必须有一些东西可以实现这样的端到端加密?
我对网络安全的了解基本上仅限于防火墙规则和一般路由,因此我正在寻找可供我进一步研究或付诸实践的选项。
我担心这个问题将被关闭,因为它是基于意见的,所以我真的要求在 SQL Server 本身(或在 DBA 的职权范围内)提供可靠的选项来配置数据的端到端加密。
我有一个带有指向 Oracle 11 数据库的链接服务器的 SQL Server (2014 SP2)。
我对 Oracle 视图有一个非常简单的选择语句,我知道它应该返回大约 140k 行。但事情是这样的,当我在 SQL Server 中运行它时,我会立即在结果窗口中看到记录,但是突然之间,查询挂起,因为它到目前为止只返回了大约 2000 行并且它只是永远坐在那里什么都不做。有时,在它再次挂起之前会出现另外几千行。
查询的等待状态在预期的 OLEDB 上。我在想某种网络瓶颈...?
有时我确实会在一段时间后收到错误:无法从 OLE DB 提供程序“OraOLEDB.Oracle”获取一行
在任何人建议之前,在提供程序设置上勾选了“允许进行中”。
我正在寻找在 SQL Server 端或 Oracle 端解决此问题的想法,以检查它是否不是数据库配置问题。
我最近受邀为一位朋友查看一些 SQL Server,并进行一些配置和安全审计。
有几台服务器属于同一个应用程序组,这让我很感兴趣,因为它们存在许多不一致之处,而且通常设置的配置选项很奇怪。
有一件事引起了我的兴趣:在动态默认端口(即 tcp 端口 1433)上配置的命名实例。SQL 浏览器正在运行,但客户端使用 , 连接。
我对此的想法是,这是完全错误的。我的意思是,为什么要创建一个命名实例只是为了将它放在默认端口上,为什么要使该端口动态化?
我联系了供应商,他们非常自信地告诉我他们的文档和安装指南指出实例应该在动态端口 1433 上命名和配置(“如你所知,这是连接期望 SQL Server 监听和更改此端口的默认端口将使您的客户与我们的支持合同无效……”)
我现在无法给自己一个回复。我的一部分觉得这不值得争论,因为我这样做真的是为了帮个忙。
为了达到这一点,我的问题有两个方面:
什么时候在默认端口上操作命名实例有用,为什么它们是动态的才有意义?
我有几台备份到 Data Domain 的服务器。这可以通过 UNC 路径访问,即\\datadomain\SqlBackups\
似乎所做的就是我们通过防火墙规则授予 SQL Server 对数据服务器的访问权限,并且我们授予 SQL DB 服务帐户对 SqlBackups 文件夹的完全访问权限。
服务器配置为将Y:\
驱动器映射到此位置,以便备份转到Y:\<InstanceName>\<DatabaseName>
。
这一直有效,直到驱动器映射发生问题。例如,有时在重新启动时映射会丢失,因此备份会失败。
我只想备份到我测试过的 UNC 路径,它可以正常工作。然而,有人告诉我这有安全隐患,一些关于使 UNC 路径对潜在黑客可见的东西......这对我来说没有意义,因为你可以很容易地找到映射驱动器指向的位置。
任何人都可以从 SQL Server/Windows Server 安全的角度阐明这一点吗?备份 UNC 路径有什么不好?
我知道如何获取当前节点的名称,但是是否有一个简单的 T-SQL 查询可用于获取集群实例所属的 Windows Server 故障转移集群名称?
SQL Server 版本为 2014,操作系统为 Windows Server 2012
我的两节点 SQL 集群上的 SQL Server 角色的故障转移属性如下:
Maximum Failures in the Specified Period: 2
Time period: 6 (hrs)
我希望强制故障转移(通过手动移动服务或重新启动所有者节点)两次以上会导致资源保持“离线”状态,但事实并非如此。我可以自由地故障转移看似无限的次数,而不会产生任何影响。
该属性的目的是什么?如何正确模拟事物以测试行为?
目前我有大约 125 个生产实例,每个都有一个基于脚本的维护计划作为代理作业运行。
运行的任务是 Index Reorg/Rebuild、Stats 更新和 Checkdb。备份由 Netbackup 负责,因此它们不构成计划的一部分,但有几个例外。
去年,我将所有实例从使用 SSMS 向导创建的计划转移到了基于脚本的维护计划(讨厌那些),它们高效且有效,所以总的来说我很高兴。
我想知道把事情做得更远一点是否可行。我最近一直在研究一个 powershell 脚本,当指向一个实例时,它会遍历该实例上的数据库并按需执行这三个任务。
我的问题是是否任何人都可以通过对所有实例执行此操作来看到任何缺点,即在我们的 DBA 服务器上有一个单一的 powershell 脚本,该脚本遍历 Windows 计划中的实例列表并执行维护任务。任何错误都将被处理/写入日志等。
在我看来,这样做的主要好处是我们不会将 mp 作业部署到新实例和配置计划。我们只会将任何新实例的名称添加到脚本必须遍历的实例中。
我欢迎你的想法。
有人向我提出要求。我们的一位开发人员希望能够将信息存储在数据库中,但是一旦存在就需要对其进行加密,这样如果任何人获得数据库的副本或访问其中的原始数据,他们将无法读取它。只有通过 SSO 通过应用程序进行身份验证后,您才应该能够读取数据。
他似乎认为为此有一个简单的功能,他可以从应用程序调用并解密加密...
我告诉他这里需要像 TDE 这样的东西,这需要一些时间来设置。我没有这方面的经验,所以这将是一个学习曲线....
简而言之,要求是在数据库遭到黑客攻击、被盗或丢失时保护敏感信息。
有任何想法吗?或者 TDE 是可行的方法吗?
我有一个包含 850GB MDF 文件的数据库。在 20 个月的时间里,应用程序中的日志记录机制创建了各种巨大的表。只应该在任何时候保留一周数据的维护脚本没有正确执行(现在是)所以我们不得不手动清理。
我们实际上清除了大约 600GB 的数据。我想释放一些空间,因为它所在的驱动器已接近极限。数据文件永远不会再增长到这么大,所以它只是浪费空间。
我打算使用 SHRINK-FILE 来处理这个问题。我已经在数据库的克隆上进行了测试,大约需要 3 个小时。数据库似乎没有任何性能下降。是的,之后索引非常零散,但我可以对它们进行排序。
我的问题是:
应用程序需要在整个过程中保持“运行”状态,因为它很关键。我知道 SHRINKFILE 操作是完全在线的,还是我错了?
数据库几乎每秒都会发生大量写入活动。
SHRINKFILE 操作导致的 I/O 增加会影响这些写入吗?
反过来看,连续写入是否会影响 SHRINKFILE 操作,即使其完成速度变慢?
最后,有没有更好的方法来做到这一点?
更新
仅供阅读本文的任何人使用 - 我运行了 SHRINKFILE 并监控了 I/O 和 CPU。两者都有轻微上升,但我的每秒高写入数数据库根本没有延迟问题。在整个 1.5 小时的 SHRINK 操作过程中,它一直保持运行、稳定且无故障。
之后索引非常零散,这给应用程序的报告端带来了一点麻烦(图表在客户端应用程序上呈现很慢)但是稍后重建了在线索引,一切都恢复了正常。
首先,请原谅我糟糕的问题标题。我想不出总结这一点的最佳方式。
本质上,我正在整理一些基于场景的 DR 文档,这个特定场景是一个 SAN 问题,我们丢失了保存日志或数据文件的磁盘。
我假设 MASTER 已受到影响(即无法访问其文件所在的驱动器),因此 SQL 服务不会启动。
我的具体问题如下:
如果我使用安装介质通过命令提示符运行 sys 数据库的重建,我是否能够为文件指定一个替代驱动器?我的理解是重建,使用预先存在的默认实例位置,在这种情况下将无法访问。
假设我可以获得 mdf 和 ldf 文件的副本(例如,通过将备份恢复到另一个实例)是否可以通过将 SQL Server 指向 MASTER 数据库的不同位置来启动 SQL Server?比如服务参数?
现在我知道可以安装具有相同驱动器号的新磁盘,但我正在寻找一种方法,在这种情况下,数据中心,我可以安全地更快地启动实例可能有一个与他们的手臂一样长的优先级列表,并且可能需要几个小时或更长时间才能准备好新卷。
谢谢大家...
这主要是理论上的,但如果将来发生这种情况,我希望有一个记录在案的选项列表。
今天,我们在 SAN 上遇到了一个严重的磁盘错误,这意味着保存我们生产实例之一的事务日志文件的磁盘崩溃了,最初看起来它已经死了。显然,实例、数据库以及在其上运行的应用程序都会下降。
我们的数据中心人员正忙于研究磁盘故障的原因、原因和方式,与此同时,我很快就想出了一个数据库恢复选项列表。
好的,所以数据中心人员恢复了磁盘。这是 VPLEX 错误,而不是物理硬件故障。
但同时我发现我没有太多选择。实例不会启动,因为系统和用户数据库的所有日志文件都无法访问。如果 Sys 数据库日志文件位于“已启动”的单独磁盘上,实例是否会重新启动
我可以访问 .mdf 文件,所以我可以选择将它们复制到另一个服务器,然后将它们与另一个卷上的新日志文件附加在一起。要么使用我们相当有弹性的备份将数据库恢复到另一个服务器\实例。这两种选择都对应用程序人员有用,因为所有应用程序和相关服务都需要重新指向。
我还有另一种选择,即删除服务器上的实例并使用相同的实例名称重新安装它,然后从完整的广告日志备份中恢复所有数据库。从理论上讲,这对 App 团队来说没有任何工作,但对我(唯一的 DBA)来说却有严重的时间开销。
我在这里错过任何选择吗?我最近才开始这份工作,公平地说这里的文档是有限的。在过去的几个月里,我一直忙于整理我们 SQL Estate 的清单,查看补丁/升级差距等,并参与了几个项目。我认为可以公平地说,针对这种情况的记录在案的灾难恢复计划现在是我们层级议程的首要任务。
任何帮助表示赞赏。
我们的一个应用程序导致了一个问题,因为有一个存储过程在 SSMS 中返回正常,不到 1 秒,但在应用程序中它最多需要 10 分钟,具体取决于所使用的参数。任何参数组合在 SSMS 中都可以正常工作,执行计划对我来说看起来不错。
但是,在分析应用程序时,显然使用了不同的、效率较低的计划。用于连接的 SqlClient 具有 ARITHABORT 设置,设置为 OFF,当在 SSMS 中复制时,我遇到了相同的性能问题。
我猜 ARITHABORT OFF 将不允许优化器使用缓存的计划?还是它运行一个单独的计划?
根据 Apps 人员的说法,无法更改 SQLClient 连接以使用 ARITHABORT ON
我猜这里的 ARITHABORT 设置有点用词不当,它实际上是优化器没有使用好计划引起的参数嗅探?
无论如何我都需要强制它使用一个好的计划,那么如何最好地解决这个问题呢?我是否以某种方式创建计划指南或优化存储过程?
这是 SQL Server 2008R2 SP2。