我有一个有 33 GB 事务日志的数据库。这是因为数据库处于完全恢复模式,在第一次备份之前已经使用了 5 年以上。
我想使用以下命令截断和缩小日志文件
Backup log dbname with truncate_only
go
DBCC shrinkfile('logicalfilename',100)
Run Code Online (Sandbox Code Playgroud)
我想知道在我运行了上面的命令之后,将来我是否能够恢复到 Future full backup 1 和 2 之间的时间点?
时间线
谢谢,
我们有一个在 SQL 服务器后端运行的机床应用程序。这些工具每天都在运行,我正在寻找一种方法来增量备份数据库而不会造成任何机器停机。
我见过有两台服务器的镜像解决方案,但这些解决方案对我们来说不起作用,因为成本和大小限制。是否可以以编程方式或通过某些服务将此数据库镜像到主 PC 上的备份硬盘驱动器?
一些数据丢失是可以接受的。
这对我来说不是一个大问题,但是,我仍然想了解这里发生了什么。我的 SQL Server 2008 (10.00.1600) 上有两个数据库 - 它们是从同一个备份中恢复的(之后我们的 C# 程序完成了一些优化工作 - 两个数据库的过程相同,+ 一些少量插入/deletes 之后被执行)。
但是当我备份这些数据库时,输出文件大小不同:
Database1: 706 MB
Database2: 1690 MB
Run Code Online (Sandbox Code Playgroud)
用于进行两个备份的查询(由 SSMS 生成的脚本):
BACKUP DATABASE [DatabaseX] TO DISK = N'D:\databaseX.bak'
WITH NOFORMAT, NOINIT, NAME = N'DatabaseX-Full', SKIP, NOREWIND,
NOUNLOAD, NO_COMPRESSION, STATS = 10
Run Code Online (Sandbox Code Playgroud)
以下是数据库的文件统计信息:
Database1:
Data allocated: 1950 MB
Logs allocated: 5121 MB
Output backup size: 706 MB
Database2:
Data allocated: 1704 MB
Logs allocated: 50 MB (this was truncated in the process of my investigation :))
Output backup …Run Code Online (Sandbox Code Playgroud) ## connect to mysql and source backup file ##
USER="root"
PASS=""
mysql -u$USER -p$PASS database_name < backup.sql
Run Code Online (Sandbox Code Playgroud)
以上是我用来获取数据库的shell脚本,但它仍然要求输入密码。我只想知道在密码为空的情况下如何获取数据库。如果 root 密码不为空,则它可以正常工作。
SQL Server 备份包含有关原始日志 (LDF) 文件大小的元数据。
所以如果你备份一个有 5GB LDF 文件的数据库,当你恢复它时,你会得到一个(空的)5GB LDF 文件。这通常是不需要的(因为恢复数据库的日志文件几乎不包含任何内容)
通常这会导致在繁忙的开发服务器上恢复数据库时出现问题,如果人们*咳嗽*在进行备份之前不太小心缩小日志文件,那么剩下的空间就很少了。
有没有办法恢复 SQL Server 备份,但告诉它“不要打扰制作那个空的 5GB LDF 文件,谢谢”?
我是 MySQL 的新手,想知道从源进行冷备份并将其复制到具有相同版本的新服务器是否需要更改任何其他配置设置的信息。
由于我已经阅读了一些教程,因此不需要更改任何配置。
我正在遵循的步骤
/var/lib/mysql)。/var/lib/mysql)。提前致谢
服务器“servername”的还原失败。(Microsoft.SqlServer.SmoExtended)
System.Data.SqlClient.SqlError: RESTORE 无法启动数据库“ECP”。(Microsoft.SqlServer.Smo)
数据库已创建,但无法使用对象资源管理器访问:
数据库 ECP 不可访问。(对象浏览器)
感谢您提供有关如何使数据库正常工作的任何建议。
编辑:此查询
select state_desc from sys.databases where name = 'ECP';
Run Code Online (Sandbox Code Playgroud)
返回RECOVERY_PENDING。
我再次删除了数据库并进行了新的尝试
restore verifyonly from disk = 'path\file';
Run Code Online (Sandbox Code Playgroud)
这返回
尝试恢复此备份可能会遇到存储空间问题。后续消息将提供详细信息。
“F:\ECPDATA1\ECPDATA1.mdf”指定的路径不在有效目录中。
文件“F:\ECPDATA2\ECPDATA2.ndf”的目录查找失败,出现操作系统错误 3(无法检索此错误的文本。原因:15100)。
文件“F:\ECPDATA3\ECPDATA3.ndf”的目录查找失败,出现操作系统错误 3(无法检索此错误的文本。原因:15105)。 文件“E:\ECPLOG1\ECPLOG1.ldf”的目录查找失败,出现操作系统错误 21(无法检索此错误的文本。原因:15105)。 文件 1 上的备份集有效。
文件“F:\ECPDATA4\ECPDATA4.ndf”的目录查找失败,出现操作系统错误 3(无法检索此错误的文本。原因:15105)。
既然它说备份集是有效的,我只需要获取指定的文件,使其工作,对吗?但是在这台服务器上我没有驱动器E:或F:. 如何在备份文件中调整它?或者是否有可能(我对 windows-server-2008-r2 不太熟悉)在 linux 上有某种符号链接?
非常简单的问题:备份数据库的开发和 QA 实例是标准/最佳实践吗?
假设模式信息保存在某种形式的源代码控制中。
我们一直在 SQL Server 2012 上进行每晚备份作业,但它附加到.bak文件而不是覆盖,所以在谷歌搜索时我发现master.dbo.xp_delete_file
我注意到我可以在date参数之前一次删除多个备份
我想保留 3 天,因此删除如下:
declare @dt datetime
select @dt=getdate()-3
EXECUTE master.dbo.xp_delete_file 0,N'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\',N'bak',@dt,1
Run Code Online (Sandbox Code Playgroud)
看起来一切正常,但是对于备份,我可以创建这样的文件名吗?(注意 CONCAT() 中的 @today )
declare today varchar(10);
SELECT @today=CONVERT(char(10), GetDate(),126);
BACKUP DATABASE perfMaster TO DISK = CONCAT('D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\perfMaster_',@today,'.bak'
WITH NOFORMAT, NOINIT,
NAME = N'Full Database perfMaster Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 20
Run Code Online (Sandbox Code Playgroud)
或者您使用什么方法来完成具有几天历史的备份?
作为夜间维护计划的一部分,我的 MS SQL Server 2012 数据库使用简单恢复和完整备份选项进行备份。事务日志未备份。此外,在晚上重新启动 MSSQLSERVER 服务或 SQL Server
检查操作系统(Windows Server 2008)中相应文件的属性,我观察到.mdf文件的“修改”时间与维护计划(制作备份)运行的时间相对应,但.log文件修改时间为一两周早些时候。
为什么会有这样的差异,为什么操作系统无法更新修改时间?
那么,.mdf文件修改时间的时间和原因是什么?
是重启SQL Server还是备份时间?
我如何估计数据库上次写入物理磁盘的时间,即相应数据库的 .mdf 文件的最近时间?
如何强制 SQL Server 将数据库刷新到硬盘,以便在看到 SQL Server 运行出现问题的情况下获得最实际的 .mdf 文件?