小编mar*_*c_s的帖子

简单恢复数据库以节省空间

这个旧的 SQL Server 2000 实例有一个 14 Gb 的数据磁盘和一个 30 Gb 的备份磁盘。

即使它很旧,它仍然有大量用户进行交易,因此该服务器上唯一数据库的日志文件每天都会填满数据驱动器。

我想我会把它放在简单的恢复中并刷新事务日志,但我想知道它会产生什么影响。

如果没有 T-log,您就不能使用备份恢复到完整备份时间以外的任何其他时间点,对吗?在对数据库进行此类更改时,除此之外我应该注意哪些最重要的影响?当我不生成 t-log 时,除了丢失一天的数据(每天备份到磁带)之外,还有什么可能发生?

提前致谢

sql-server sql-server-2000 recovery-model

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

尝试重新启动移动的数据库后:无法打开物理文件“D:\Data\MYDBNAME.MDF”

所以我们服务器上数据库的默认位置是

c:\program files\microsoft sql server\mssql11.mssqlserver\mssql\DATA
Run Code Online (Sandbox Code Playgroud)

但由于空间限制,我们改为使用

d:\data
Run Code Online (Sandbox Code Playgroud)

我现在已将默认位置更正为d:\data

但是,我无法将在错误位置创建的数据库移动c:\...\datad:\data

ALTER DATABASE MYDATABASE set offline

ALTER DATABASE MYDATABASE 
MODIFY FILE ( NAME = 'MYDATABASE', FILENAME = 'D:\Data\MYDATABASE.MDF')

ALTER DATABASE MYDATABASE 
MODIFY FILE ( NAME = 'MYDATABASE_LOG', FILENAME =  'D:\Data\MYDATABASE_LOG.LDF')

ALTER DATABASE MYDATABASE SET ONLINE
Run Code Online (Sandbox Code Playgroud)

失败并显示以下错误消息

消息 5120,级别 16,状态 101,第 1 行
无法打开物理文件“D:\Data\MYDATABASE.MDF”。操作系统错误2:“2(系统找不到指定的文件。)”。文件激活失败。物理文件名“D:\Data\MYDATABASE_log.lDF”可能不正确。

消息 5181,级别 16,状态 5,第 1 行
无法重新启动数据库“MYDATABASE”。恢复到之前的状态。

消息 5069,级别 16,状态 1,第 1 行
ALTER DATABASE 语句失败。

服务器肯定可以访问新位置,因为所有其他数据库都d:\data工作正常

sql-server-2012

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

SQL Server 2016 插件不起作用

最近我在我的 PC 上安装了 SQL Server 2016。

这是我的服务器的详细信息:

Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64)
2016 年 3 月 10 日 16:49:45
版权所有 (c)
Windows 10 Pro 6.3(内部版本10586:)上的Microsoft Corporation企业评估版(64 位)

在我的 PC 上安装服务器后,尝试安装以下插件

  1. 适用于 SSMS V3.6.1 的 SQL 漂亮打印机插件
  2. SQLSentry 计划浏览器

问题:

  1. SQL Pretty Printer甚至没有安装它会抛出错误,例如

    在此处输入图片说明

    但是SQL Pretty Printer站点说它适用于 SQL Server 2016,您可以查看链接。

    在此处输入图片说明

  2. 下一个SQLSentry 计划资源管理器已成功安装,但插件未显示在SSMS.

版本: v2.8(内部版本 9.0.9252.0)

在此处输入图片说明

谁能帮我解决这个问题。请注意,两者都在 SQL Server 2014 中完美运行。

sql-server ssms plugins sql-server-2016 windows-10

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

T-SQL中的动态长度混淆方法

我想从 SQL Server 数据库中混淆(打乱)敏感数据,但方式将提供:

  • 不可逆性(明文无法从混淆数据中导出),
  • 混淆后的数据长度需要与混淆前的数据长度相同。
  • 对于相同输入值的重复混淆,混淆值不需要是唯一的。老实说,我更喜欢为可以使用的相同输入获得相同的值(例如,不同表中的一些匹配数据,可能在测试用例中有用)。

例子:

Abc -> zyx (lenght: 3)
StackOverflow -> a65vr4doqjd (lenght: 11)
Run Code Online (Sandbox Code Playgroud)

通常我会避免“自制”算法,所以你知道一些可以提供这种混淆的 MS 内置解决方案吗?

我希望我清楚地表达了我的问题,否则让我知道,我会尝试根据需要添加尽可能多的信息。

security sql-server t-sql data-masking

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

有不是系统数据库的数据库的术语?

SQL Server 中所有系统数据库的数据库(如mastermodeltempdb)是否都有一个术语?

sql-server

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

关键字“Exec”附近的语法不正确

你能告诉我这个查询有什么问题吗?我正在尝试编写 SQL 查询来动态创建表

DECLARE @SQLString NVARCHAR(MAX)

SET @SQLString =+ 'Create Table' + GETDATE() + '_' + 'Table' + '' + '(' + 'Column1' + ' ' + 'Nvarchar(50)' + 'Null' + ')' +

Exec @SQLString ;
Run Code Online (Sandbox Code Playgroud)

sql-server

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

SQL Server:需要我的白皮书的主键建议

我已经厌倦了向我们研发团队中的每个初级开发人员解释为什么他应该使用主键以及如何使用。所以我决定写一个小白皮书,每个新开发人员都应该阅读。这是它的草稿。

免责声明:

  1. 我知道并理解聚集索引和主键之间的区别
  2. 在以下问题中,PRIMARY KEY 表示 PRIMARY KEY CLUSTERED,而 WITHOUT PRIMARY KEY 表示没有 PK 和 Clustered INDEX
  3. 请注意,这是面向初级而非 SQL 程序员的白皮书
  4. 他们所做的所有事情 - 在进入主要开发分支之前进行审查
  5. 我不会向他们解释——什么时候使用聚集索引和非聚集主键会有好处——否则我会陷入过早的优化地狱

问题是- 我还应该在文档中添加什么?可能是——我应该改些什么呢?更详细的解释是什么?

草稿来了:

  • 主键必须约束数据库中的任何表。
  • 如果没有 PK,一个表被认为是一个堆,而 SQL Server 对这种类型的数据的使用非常有限——我唯一应该说它是合适的——一个用于从 SQL Server 引擎外部快速批量加载数据的缓冲区。
  • 避免使用自然主键。主要是因为它们的自然(高斯)分布。例如,在具有基于 Family 和 Name 的主键的 PhoneBook 表中,Smiths 和 Wilsons 将很多,而 Zimmerbergs 少得多,这表明,包含 Smiths 和 Wilsons 的页面将比其他页面更频繁地拆分,并且也更频繁地查询 - 这成倍增加性能影响。这会导致性能下降,因为主键的页面很满,并且大多数搜索都会命中 PK 的稀疏页面。

此外,即使使用具有(我希望)扁平分布的 SSN 或 ID Number,因为 PK 也不能解决 PK 的页面拆分问题,因为这些数字没有任何组织顺序。

  • 次要 - 自然 PK 通常是复合的。这会创建复合外键和宽索引,从而损害性能。所以, ...
  • 避免使用复合 PK。使用简单代理 PK 和复合 UNIQUE 索引比使用多合一复合 PK …

database-design sql-server database-tuning database-theory

0
推荐指数
2
解决办法
1025
查看次数

存储过程从具有变量约束的变量创建表

我设法使用存储过程创建了一个带有变量名的表的副本。但是我很难理解如何将约束合并到存储过程中。

问题:约束必须是一个变量,因为当它复制一个表时,它不能命名我拥有的与以前使用的相同的 PK。我在这些领域遇到语法错误。

我对 SQL Server 非常陌生......今天才刚刚开始学习!!所以请用虚拟术语解释。

到目前为止的代码如下:

    CREATE PROCEDURE procFinancialPeriodTable
        (@TABLENAME as varchar (50))
    AS
        DECLARE @SQL varchar(2000)
        --SET @SQL = "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[@TABLENAME]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
        --drop table [dbo].[@TABLENAME]
    BEGIN
        SELECT @SQL = 'CREATE TABLE ' + @TABLENAME + '('

        SELECT @SQL = @SQL + '[ID] [int] IDENTITY(1,1) NOT NULL,[FinPeriodNr] [int] NOT NULL,[FinCurrentPeriod] [bit] NULL,[FinStart] [date] NULL,[FinEnd] [date] NULL,[FinStatusOpen] [bit] NOT NULL,[PeriodClosedTS] [smalldatetime] NULL,[PeriodClosedUID] [varchar](3) NULL,)'
    CONSTRAINT [PK_FinancialPeriod' + …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 constraint stored-procedures

0
推荐指数
1
解决办法
1万
查看次数

如何将 SQL Server 2008 R2 备份还原到 SQL Server 2008

我无法将备份从 64 位实例恢复到 32 位实例。

源服务器:

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
Run Code Online (Sandbox Code Playgroud)

目标服务器:

Microsoft SQL Server 2008 (SP2) - 10.0.4064.0 (Intel X86)   
Run Code Online (Sandbox Code Playgroud)

恢复时出错:

服务器“servername”
的还原失败数据库已备份在运行版本 10.50.2500 的服务器上。该版本与运行版本 10.00.4064 的服务器不兼容。在支持备份的服务器上还原数据库,或者使用与此服务器兼容的备份。

sql-server-2008 sql-server sql-server-2008-r2

0
推荐指数
1
解决办法
1万
查看次数

SQL Server 事务日志增长不受控制

我们有一个数据库不受控制地增长并每 2 天填充一次硬盘。数据库最大日志大小设置为 6 gb,但 id 似乎不起作用,因为它继续增长超过 6 gb。

以某种方式“解决”它的唯一方法是在那之后进行备份和截断。

首先,如果最大日志大小设置为特定大小,那么可能的数据库会继续增长吗?

其次,如果事务正确打开和关闭,我们知道它运行良好,为什么我的日志文件不受控制地增长?

sql-server

0
推荐指数
1
解决办法
903
查看次数