小编mar*_*c_s的帖子

SQL Server 数据库备份文件是最终大小的两倍,直到备份完成

我刚刚为一个相当大的数据库(1.3 TB)编写了一个备份语句,我一直在使用一个更小的数据库(10 GB + 10 GB 日志文件)对其进行测试。备份写入三个目的地。在测试期间,我注意到当备份运行时,每个备份文件的大小约为 1.2 GB,但是一旦备份过程完成,文件就会缩小到 600 MB 以下。

我有兴趣了解:

  • 为什么文件在备份过程中变大然后缩小?
  • 是否有办法防止这种情况,
  • 当我备份 1.3 TB 的数据库时,文件可能有多大 - 如果文件再次是其最终大小的两倍,那么我可能需要请求更多的磁盘空间!

这是我正在使用的备份语句:

BACKUP DATABASE @DatabaseName
TO  DISK = @backupMedia1,
    DISK = @backupMedia2,
    DISK = @backupMedia3
WITH COMPRESSION, RETAINDAYS = 0, NOFORMAT, INIT, NOSKIP, NAME = @DatabaseName
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 backup

7
推荐指数
1
解决办法
3194
查看次数

sql_slovak_cp1250_ci_as 与 Slovak_CI_AS

有人可以向我解释 collat​​ionsql_slovak_cp1250_ci_as与collat​​ion 之间的区别Slovak_CI_AS吗?

我有一个 db 设置为sql_slovak_cp1250_ci_as并且共享主机仅支持Slovak_CI_AS. 应该不会有问题吧?

非常感谢。

sql-server collation sql-server-2012

7
推荐指数
1
解决办法
4284
查看次数

从不再存在的用户那里窃取数据库的所有权

我们有几个 SQL Server 2008 R2 数据库,其中的成员域发生了更改(即它已连接到DOMAINA并且现在位于DOMAINB)。我们有三个数据库,其中数据库的所有者是DOMAINA\User,该数据库不再存在。

我试图登录到SQL Server作为DOMAINB\Administratorsa和运行以下命令:

ALTER AUTHORIZATION ON DestDB TO sa
Run Code Online (Sandbox Code Playgroud)

错误:

消息 15151,级别 16,状态 1,第 1 行
找不到对象“DestDB”,因为它不存在或您没有权限。

我在(显然不正确的)假设下sa可以在服务器上做几乎任何事情。

我怎样才能取回这些数据库的所有权?

permissions sql-server-2008-r2

7
推荐指数
1
解决办法
656
查看次数

为什么 PostgreSQL 选择大象作为它的标志?

为什么 PostgreSQL 选择大象作为它的标志?从logo wiki 中不清楚

更新:现在维基更新:) 谢谢!

postgresql

7
推荐指数
2
解决办法
2778
查看次数

如何更改 SQL Server 2012 可用性组 DNS 子域?

问题:如何让我的可用性组注册为ag-ewgtest.sql.company.com我的服务器认为自己的给定server.company.com

设置:我的 SQL Server 2012 可用性组位于多个子网上,类似于这篇 MSDN 博客文章 中的描述。当我进入故障转移群集管理器时,它显示名称解析尚不可用:

在此处输入图片说明

然后我右键单击“名称:ag-ewgtest”并选择属性。我勾选了“发布 PTR 记录”,它显示全名是ag-ewgtest.company.com.

在此处输入图片说明

我的问题是我只被允许更新 DNS 区域sql.company.com。如果我将 DNS 名称更改为 ,ag-ewgtest.sql.company.com则全名变为ag-ewgtest.sql.company.com.company.com.

我尝试将我的 NIC 更新为:

在此处输入图片说明

但并没有什么不同。如何更改我的可用性组尝试注册的子域?

sql-server sql-server-2012 dns availability-groups

7
推荐指数
1
解决办法
8212
查看次数

将外部应用与 SQL Server 中的相关子查询转换为 SQLite

我需要将 SQL Server 中的查询转换为 SQlite,并且我已将外部应用替换为左外部连接,但是如何限制子查询在这种情况下仅返回 1?以及如何将外部表中的引用值传递到子查询中?

我强调了我无法将其转换为 Sqlite 的事情,有人可以给一些建议吗?

SQL 服务器:

SELECT  a.id,
        a.CodeValue ,
        a.TotalAmount ,
        InvoiceRevised.RevisedInvoiceId,
        InvoiceRevised.BillNumber AS RevisedInvoice,
        patientlookup.RegistrationNumber AS RegistrationNumber,
        patientlookup.PatientName AS PatientName,
FROM dbo.Invoices a
OUTER APPLY (
SELECT TOP 1 dbo.Invoices.Id AS RevisedInvoiceId,CodeValue AS InvoiceNumber,
    dbo.SCSInvoiceRels.CreatedOn AS InvoiceTime,
    dbo.Invoices.CreatedBy AS InvoiceCreatedBy,
    dbo.Invoices.TotalAmount,dbo.Invoices.Discount,
    dbo.Invoices.RoundAmount 
    FROM Invoices 
    INNER JOIN dbo.SCSInvoiceRels ON dbo.Invoices.Id = dbo.SCSInvoiceRels.InvoiceId 
        AND dbo.SCSInvoiceRels.RecordStatus = 1 AND dbo.Invoices.RecordStatus = 1 AND  dbo.SCSInvoiceRels.SCDetailId IN (
            SELECT SCDetailId FROM dbo.SCSInvoiceRels WHERE InvoiceId = a.id)
) InvoiceRevised …
Run Code Online (Sandbox Code Playgroud)

sqlite sql-server

7
推荐指数
1
解决办法
5032
查看次数

为什么 SQL Server 2014 在没有存储活动数据的情况下消耗如此多的 RAM?

我在我的笔记本电脑上运行 SQL Server 2014 以及大量其他已安装的应用程序,从 Visual Studio 到视频游戏。

这显然不是生产服务器,而是仅用于开发和调试。

我已经编写了一个相当小而简单的数据库,其中包含几十个表和视图 - 我插入了不到 100 行的虚拟数据用于测试。

有一次我不小心创建了一个 100GB+ 的索引,使用了一些格式错误的交叉连接 - 创建这个索引的查询消耗了我的笔记本电脑 (16GB) 中 100% 的内存,这使一切变得缓慢,所以我中止了查询而不是等待它完成,然后立即删除并重新创建整个数据库,并从创建脚本中删除此索引。

但是,从那时起,SQL Server 2014 一直在消耗我所有 16GB 的 RAM,即使查询中止和数据库删除也是如此。

所以我接下来重新启动了我的笔记本电脑,SQL Server 的 RAM 使用量下降到 7GB - 从那时起它一直保持不变,无论我是否删除了所有 5MB 的现有数据库等。

我想让 SQL Server 恢复到合理的内存消耗水平,但我不知道从哪里开始寻找可能的原因。

我知道这是一个非常开放的问题,但我愿意在一些指导下进行跑腿工作。

我只是不知道从哪里开始进行故障排除,因为我自己不是 DBA - 显然 Google 也不知道。:)

sql-server memory sql-server-2014

7
推荐指数
1
解决办法
9119
查看次数

在 SQL Server 2012 中重建/重组索引时要考虑的因素

我对根据sys.dm_db_index_physical_statsdm 函数返回的 avg_fragmentation_in_percent 选择索引重组/重建索引感到困惑。

Msdn 说:

在此处输入图片说明

而且,avg_fragmentation_in_percentvalue 表示索引中存在的逻辑碎片百分比(这是索引的叶页中乱序页的百分比)。

Reorganize of index将始终修复页面的物理顺序。所以即使 avg_fragmentation_in_percent 大于 30% 我也可以考虑重新组织索引。它将减少索引中的碎片百分比。

请看下面的例子

SELECT 
    database_id, object_id,
    avg_fragmentation_in_percent,
    avg_page_space_used_in_percent,
    page_count,
    avg_fragment_size_in_pages
FROM
    SYS.Dm_db_index_physical_stats (Db_id('BPIGTN_GAL_APP_TST'), Object_id('NM_PPA_PROJECTION_MASTER'), NULL, NULL, 'SAMPLED') 
Run Code Online (Sandbox Code Playgroud)

结果

 Database_id Object_id  avg_fragmentation_in_percent  avg_page_space_used_in_percent    page_count  avg_fragment_size_in_pages
    37       913490383        99.36                           60.15                      314           1.003
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我们可以看到 99% 的平均值,fragmentation这意味着索引有更多的逻辑碎片(页面无序更多)。

所以我要重新组织我们在上图中看到的索引。

请查看下面的示例以进一步了解。

ALTER INDEX PK_NM_PPA_PROJECTION_MASTER_PROJECTION_DETAILS_SID_RS_CONTRACT_SID ON NM_PPA_PROJECTION_MASTER REORGANIZE
GO

SELECT database_id,
       object_id,
       avg_fragmentation_in_percent,
       avg_page_space_used_in_percent,
       page_count,
       avg_fragment_size_in_pages
FROM   SYS.Dm_db_index_physical_stats (Db_id('BPIGTN_GAL_APP_TST'), Object_id('NM_PPA_PROJECTION_MASTER'), NULL, NULL, 'SAMPLED') 
Run Code Online (Sandbox Code Playgroud)

结果

Database_id Object_id   avg_fragmentation_in_percent …
Run Code Online (Sandbox Code Playgroud)

index sql-server sql-server-2012

7
推荐指数
1
解决办法
2072
查看次数

尝试使用 SQL Server 等待和队列调整 Sharepoint 站点

我对使用 Waits 和 Queues 进行性能调整还很陌生 - 很吸引人,但也不总是那么直观......

现在,我的一个客户有一个 SQL Server 2008 64 位企业版,目前分配给它 16 GB 的 RAM,在具有 64 GB RAM 的物理服务器上运行(在同一台上还有其他和更改的 SQL Server 实例)机)。

他正在运行的这个应用程序是一个 Sharepoint 2010 解决方案,在大多数情况下,它的性能 - 很好 - 对于 Sharepoint 站点来说还可以。除了搜索,这是非常缓慢的。

现在从 SQL Server 的角度来看,我已经观察了几天的等待统计数据,前三种等待类型是:

1) CXPACKET 约为 49%
2) SOS_SCHEDULER_YIELD 约为 10.5%
3) OLEDB 约为 9.5%

这似乎非常一致——随着时间的推移没有大的变化。

  • PAGEIOLATCH_SH 排在第七位 - 占总等待时间的 2.5%,平均资源等待时间为 14 毫秒。
  • ASYNC_IO_COMPLETION 有八个——不到总等待时间的 2%,但平均资源等待时间高达 38 秒(是的,秒——不是毫秒!)

信号等待时间极短,所以这似乎并不表示 CPU 压力。那么是什么导致了这种模式——我们可以做些什么来 (a) 找到更多相关信息,或 (b) 找到加快速度的解决方案?

有什么想法吗?见解?想法?我对任何事情都持开放态度——我们不能改变的是基本架构(单独的 SQL Server 实例,在物理服务器之间移动——以及基于 Unix 的 SAN,它不能保证数据和登录到单独的物理磁盘上的分离)

再说一遍:这是一个SharePoint网站 …

sql-server-2008 sharepoint wait-types

6
推荐指数
1
解决办法
968
查看次数

如何避免跨数据库 proc 调用的竞争条件?和其他问题

我什至不确定这个问题是否有必要,但我很想知道每个人的想法。我在同一台服务器上有两个数据库,dbFoo、dbBar。dbFoo 有下表,请注意这是一个简单的例子,语法可能不正确,因为我很匆忙,对潜在问题的答案更感兴趣,然后是代码......

CREATE TABLE dbo.CodeNumbers(
CodeNumbersID INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
CodeValue VARCHAR(30) NOT NULL
IsUsed BIT NOT NULL DEFAULT(0)
);
Run Code Online (Sandbox Code Playgroud)

dbo.CodeNumbers使用每月提供的 CSV 填充,您选择的导入方法已经写入以将它们放入那里。我们从来没有得到重复的代码。

为了论证,让我们假设表中有 10,000,000 行。导入时都遵循以下格式:

1, 'ajdirjfisofklrlfo039402', 0 all the way till
10000000, 'fkeiir9489', 0
Run Code Online (Sandbox Code Playgroud)

现在在 dbBar 我有 2 个存储过程,第一个应该访问 dbFoo 中第一个未使用的代码,将它返回到一个 out 变量中并将其标记为已使用。所以我有类似的东西:

CREATE PROCEDURE GetNextUseableCode
   @CodeOut VARCHAR(30) OUTPUT,
   @CID INT OUTPUT
AS
   SELECT @CID = CodeNumbersID, @CodeOut = CodeValue
   FROM dbFoo.dbo.CodeNumbers
   WHERE IsUsed = 0

   UPDATE dbFoo.dbo.CodeNumbers
   SET IsUsed = 1
   WHERE CodeNumbersID …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures t-sql sql-server-2012

6
推荐指数
1
解决办法
2285
查看次数