小编Sol*_*zky的帖子

SQL Server - 我应该使用什么备份/恢复策略来完成以下任务?

问题陈述: 我们的支持工程师需要从客户那里获取数据库备份。目前,我们的数据库包含在一个 Primary/.mdf 文件组/文件中。这些数据库多年来一直在收集历史数据,并且越来越大。我们的工程师需要几天时间才能将备份复制到我们的办公室。

似乎没有任何规定/想法来管理数据库的增长。

最“有价值”的数据是我们系统的“配置”。它包含在大约 50 个表中,我们正在考虑将这些表移至与历史数据(将放置在数据文件组中)分开的新配置文件组,以尝试为部分或文件备份设置阶段。

但我不确定我需要哪种备份/恢复策略来完成这个 - 部分备份文件备份

出于研发目的,我有一个名为FilegroupDemo使用SIMPLE恢复模型的数据库。FilegroupDemo包含 3 个文件组:

  • 主要(映射到 FilegroupDemo.mdf)
  • 配置(映射到 FilegroupDemo_Configuration.ndf)
  • 数据(映射到 FilegroupDemo_Data.ndf)

配置文件组中的数据不会经常更改,并且可能会被标记为只读(如果有帮助),而数据文件组中的数据每分钟更改一次。

我希望能够灵活地仅备份/恢复主文件组和配置文件组/文件。

SQL Server Partial Backups的 BOL 文章中,它指出:

部分备份类似于完整数据库备份,但部分备份不包含所有文件组。相反,对于读写数据库,部分备份包含主文件组、每个读写文件组以及一个或多个只读文件(可选)中的数据。

这种读取方式让我认为部分备份旨在省略只读文件组,最有可能用于不会更改并标记为只读的大量数据。这些不需要每次都备份。

1. 我说存在部分备份是为了备份所有文件组(除了标记为只读的文件组)是否正确?换句话说,如果我不使用只读文件组,那么使用部分备份就没有意义了——对吗?而且我认为我不能使用部分备份来备份只读文件组?

因此,我不认为部分备份是我所需要的。我相当天真地尝试了文件备份/恢复。我将数据库切换到FULL恢复模式并运行:

BACKUP DATABASE FilegroupDemo FILEGROUP = N'PRIMARY'
TO DISK = N'C:\Backups\FilegroupDemo_FG_Primary.bak'
WITH INIT
GO

BACKUP DATABASE FilegroupDemo FILEGROUP = N'Configuration'
TO DISK = N'C:\Backups\FilegroupDemo_FG_Configuration.bak'
WITH INIT
GO

BACKUP DATABASE FilegroupDemo FILEGROUP …
Run Code Online (Sandbox Code Playgroud)

sql-server etl backup restore sql-server-2014

5
推荐指数
1
解决办法
668
查看次数

将数据集合插入 SQL Server 数据库的最佳做法是什么

我正在使用 C#,实体框架。用于开发 SQL Server。我有一个方法,它有两个参数 ( int ID, List<String> _listobj)。对于每个 ID,都有一个 obj 列表。所有这些 ID 和列表都将插入到数据库中的不同表中。所以问题是:最好的做法是什么?我有几个选择:

  1. 在 C# 中,拆分list<obj>为单个值,然后创建一个带有两个参数 ( ID, str)的存储过程,然后 C# 将根据列表的大小多次调用存储过程

  2. IDlist<obj>作为两个参数传递给存储过程,并让存储过程拆分list<obj>. 这样C#只会调用一次存储过程

第二种策略可行吗?如果是,哪个在性能方面更好?

sql-server-2008 sql-server stored-procedures entity-framework c#

5
推荐指数
1
解决办法
2817
查看次数

PostgreSQL 9.x 中的排序规则和代码集

在 Windows 7 中,"English_United States.1252"当我在安装程序中选择“英语,美国”区域设置时,排序规则设置为。在 Linux 中,排序规则"en_US.UTF-8"默认设置为。

我还没有找到任何方法在 Windows 中将排序规则的代码集设置为 UTF-8,所以我只是想知道在这些示例情况下数据库的行为是否会有所不同?或者一般来说,排序规则的代码集部分的影响是什么?

我在两个数据库中都将编码设置为 UTF-8,问题是排序规则代码集的差异是否会导致行为差异。

postgresql collation character-set

5
推荐指数
1
解决办法
5127
查看次数

具有执行方式、跨数据库查询和模块签名的存储过程安全性

我有一种情况,虽然我能够解决它(如重现所示),但我不明白。以下是重点

  • 两个数据库,ChainingSource 和 ChainDestination,两者都将跨数据库链接设置为 true
  • ChainingSource 中的存储过程通过EXEC(@sql)访问 ChainingDestination 中的表
  • 存储过程是用execute as子句定义的
  • 如果我尝试按原样执行该过程,它会说执行上下文的服务器主体无法访问 ChainingDestination
  • 所以我添加了一个证书和代码签名。也就是说,我将证书映射登录添加到服务器,将用户映射到每个数据库,并相应地向证书映射用户授予权限
  • 如果我保留该execute as条款,我会得到同样的错误。
  • 如果我删除该execute as条款,一切都很好。

这是我感到困惑的倒数第二点。或者,具体地,为什么一个不工作,最后一个


/******************************

            Setup

******************************/
USE [master];
go
IF EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = 'ChainingSource')
BEGIN
    ALTER DATABASE [ChainingSource] SET OFFLINE WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE [ChainingSource] SET ONLINE;
    DROP DATABASE [ChainingSource];
END
IF EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = 'ChainingDestination')
BEGIN
    ALTER DATABASE [ChainingDestination] SET OFFLINE WITH …
Run Code Online (Sandbox Code Playgroud)

security sql-server signature certificate impersonation

5
推荐指数
1
解决办法
4287
查看次数

用于备份的 SQL Server 证书:到期日期重要吗?

如果我在 SQL Server 中有一个证书,用于备份:

  1. 证书过期后还可以创建备份吗?
  2. 证书过期后还可以恢复吗?

让这些证书过期有什么意义?(除了让我暴露于由于过期的证书而导致备份失败......)

sql-server backup certificate

5
推荐指数
1
解决办法
3752
查看次数

可以在不重建索引的情况下更改特定表的填充因子吗?

我一直在四处挖掘,但没有任何运气。

SQL Server 2008:是否可以在不重建整个表的情况下调整特定聚集索引/表的填充因子?

例如,如果它有 4 亿条记录,我们是否可以调整填充因子并让 SQL Server 在所有尚未超过该限制的页面(以及新拆分)上使用新的填充因子,然后调整已超出该限制的页面?索引维护期间超限?

是否可以预先定义在下一次索引维护期间应该构建索引的填充因子?

sql-server-2008 sql-server clustered-index fill-factor index-maintenance

5
推荐指数
1
解决办法
2422
查看次数

旧的归类类型会影响数据库性能吗?

在我的项目中,我们SQL_1xCompat_CP850_CI_AS用作 SQL Server 实例和应用程序数据库的排序规则设置。据我所知,这是出于向后兼容性目的仍然支持的非常旧的排序规则之一。我想知道使用这种“旧”归类类型是否会影响 SQL Server 的整体性能?

另外,SQL_1xCompat_CP850_CI_ASSQL_Latin1_General_Pref_Cp850_CI_AS整理有什么区别吗?MSDN 上的描述看起来非常相似:在此处输入图片说明 两者都CI_AS_KI_WI使用代码页 850,并且具有相同的排序顺序名称nocase34.850。如果我们将整理设置更改为 ,我们会有什么好处SQL_Latin1_General_Pref_Cp850_CI_AS吗?

performance sql-server collation

5
推荐指数
1
解决办法
670
查看次数

将 .Net 程序集添加到 SQL CLR,而不打开 TRUSTWORTHY

我正在尝试使用 Solomon Rutzky 在其后程序集部署中提供的指导来添加“System.Messaging.dll”,并使用非对称密钥使用 UNSAFE 或 EXTERNAL_ACCESS 权限,但我在第一个障碍上失败了。

脚本的第一部分是从程序集创建证书;

CREATE CERTIFICATE [MS.NETcer] FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll';
GO
Run Code Online (Sandbox Code Playgroud)

但是,当我执行此操作时,我收到错误;

Msg 15208, Level 16, State 1, Line 1
The certificate, asymmetric key, or private key file does not exist or has invalid format.
Run Code Online (Sandbox Code Playgroud)

我用来执行命令的帐户具有“sysadmin”服务器角色。这是在 SQL Server 2008 实例上。

请问有人对为什么失败有任何想法吗?

---------- 更新 1 -----------

我采纳了所罗门的建议并修改了我的脚本,使其看起来像这样;

CREATE ASYMMETRIC KEY [Key.System.Messaging] FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll';
GO

CREATE LOGIN [CLR.Login.System.Messaging] FROM ASYMMETRIC KEY [Key.System.Messaging];
GO

GRANT UNSAFE ASSEMBLY TO [CLR.Login.System.Messaging];
GO
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好。我现在运行 …

sql-server-2008 sql-server best-practices sql-clr signature

5
推荐指数
1
解决办法
4100
查看次数

varchar(max)、nvarchar(max) 和 varbinary(max) 列会影响选择查询吗?

考虑这个表:

create table Books
(
    Id bigint not null primary key identity(1, 1),
    UniqueToken varchar(100) not null,
    [Text] nvarchar(max) not null
)
Run Code Online (Sandbox Code Playgroud)

假设这张表中有超过 100,000 本书。

现在我们有 10,000 本书数据要插入到这个表中,其中一些是重复的。所以我们需要先过滤重复,然后再插入新书。

检查重复项的一种方法是这样的:

select UniqueToken
from Books 
where UniqueToken in 
(
    'first unique token',
    'second unique token'
    -- 10,000 items here
)
Run Code Online (Sandbox Code Playgroud)

Text列的存在是否会影响此查询的性能?如果是这样,我们如何优化它?

PS 我有相同的结构,对于其他一些数据。而且它的表现并不好。一个朋友告诉我,我应该把我的桌子分成两张桌子,如下所示:

create table BookUniqueTokens 
(
    Id bigint not null primary key identity(1, 1),
    UniqueToken varchar(100)
)

create table Books
(
    Id bigint not null primary key,
    [Text] nvarchar(max)
) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server datatypes t-sql

5
推荐指数
1
解决办法
2649
查看次数

SQL Server 中选择查询的区分大小写排序规则

我们的 SQL Server 的排序规则设置为SQL_Latin1_General_CP1_CI_AS

我有一个要求,即我们在不同的情况下具有相同的值,但 SQL Server 会以相同的方式对待它们,因为我们的排序规则在服务器级别设置为不区分大小写。我的要求是,我需要根据一个特定查询的大小写敏感性将每个值视为不同的。我COLLATE SQL_Latin1_General_CP1_CS_ASWHERE子句中使用来强制区分大小写。我的问题是:此排序规则是否仅应用于此查询,还是最终会在列或表级别为使用此列的所有查询更改此设置?

Create Table #tmpTest 
(
id int primary key identity(1,1),
name varchar(100)
)

Insert Into  #tmpTest  values ('TestQuery'),('TESTQUERY'),('TEstquerY')

Select * from #tmpTest
 Where name = 'TestQuery'

Select * from #tmpTest
 Where name = 'TestQuery'
 Collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

sql-server query collation t-sql sql-server-2012

5
推荐指数
1
解决办法
1131
查看次数