我在我的组织中看到的关于 DBA 执行的“实践”之一是将使用exp/ 等工具的完整数据库导出expdp视为备份。
这是一个很好的做法吗?与这种方法相比,使用 RMAN 有什么优势?
据我所知,有三种可能的方式来备份您的 SQL Server 数据库
每种策略的优缺点是什么,应该在什么情况下使用?
我使用的是在 SQLServer 2008 上运行的产品。可以理解,提供它的公司不提供 SQLServer 支持。当我安装产品时,我指定了一个密码来加密数据库。我想在另一台服务器上运行该产品的另一个副本以进行测试。我已将数据库恢复到另一台服务器并在另一台服务器上安装了该产品。当我安装它时,我提供了相同的密码,然后从主服务器恢复了一个备份。但是我收到错误消息:
System.Data.SqlClient.SqlException: An error occurred during decryption.
Run Code Online (Sandbox Code Playgroud)
从产品。我可以使用 SQLServer Management Studio 访问这些表。
我试过这个:
在第一台服务器上:
CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff'
BACKUP CERTIFICATE cert1 TO FILE = 'd:\backup\cert1.dat'
WITH PRIVATE KEY
(
ENCRYPTION BY PASSWORD = 'mypassword',
FILE = 'd:\backup\cert1_privatekey.dat'
)
Run Code Online (Sandbox Code Playgroud)
在第二台服务器上:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mypassword'
CREATE CERTIFICATE cert1 FROM FILE = 'd:\cert1.dat'
WITH PRIVATE KEY
(
FILE = 'd:\cert1_privatekey.dat',
DECRYPTION BY PASSWORD = 'mypassword'
)
Run Code Online (Sandbox Code Playgroud)
我也在第二台服务器上试过这个:
alter …Run Code Online (Sandbox Code Playgroud) 在使用 try catch 和动态 sql 的存储过程中发出备份命令时,与直接运行备份命令相比,错误消息非常普遍。
在 SP 中尝试/捕获:
begin try
execute sp_executesql @sql; -- a backup command
end try
begin catch
print ERROR_MESSAGE(); -- save to log, etc.
end catch
Run Code Online (Sandbox Code Playgroud)
结果是
50000:usp_Backup:117: BACKUP DATABASE 异常终止。
whearea 发出原始命令:
backup DATABASE someDb to disk...
Run Code Online (Sandbox Code Playgroud)
结果更好的细节:
查找错误 - SQL Server 数据库错误:文件“H:\FolderName\Filename.bak:”112(磁盘空间不足。)发生不可恢复的 I/O 错误。
有没有办法将这些细节捕获到存储过程中的变量中(记录,传回调用者,重试逻辑)?似乎细节正在通过消息通道传递,但我希望它们在 SP 中可用。
我知道没有必要备份information_schema数据库,但是以下数据库(除了用户定义的数据库)呢?
performance_schemamysqlphpmyadmin(所以,如果出现问题,我们必须从头开始(新的 MySQL 安装),我必须放回哪些数据库?)
我想从我的数据库服务器上的远程主机运行 pg_dump 命令,该服务器只允许完全验证的基于证书的连接。我该怎么做呢?9.1 的手册页说明了我所看到的通过密码连接的说明。
对于生产备份,MongoDB 建议使用mongodump而不是mongoexport以确保数据的准确性。但是,在备份之前,我需要从 MongoDB 数据库中“清除”数据。我不知道除mongoexport之外的任何服务器端数据清理选项。两个问题:
我们的 IT 部门每晚都会备份整个服务器(此服务器上安装了一个 SQL Server 实例),这应该备份该服务器以及整个网络,以防出现问题......
所以我的经理问我的完整、差异和日志 SQL 备份与 IT 部门备份的任何备份相比有何重要意义?为了在我们的服务器上节省更多空间,而不是将这些文件保留几个星期并删除它们,她认为 IT 只会提供它们!
我知道这是不对的,因为我可以用我的日志备份恢复到最后 30 分钟,IT 会在第二天恢复它,但这是唯一的区别吗?
由于我将数据库备份文件保存/发送到同一台服务器,IT 将恢复它们,但如果我的维护计划中没有这些备份作业,那么 IT 可以只恢复 SQL 实例,而无需我们的任何表、事务......等我做对了吗?
任何建议将不胜感激。
我不是 DBA,但事情就是这样,我必须戴上 DBA 的帽子,并在我的 SQL Server 实例上设置维护计划。
因此,有一段时间我一直让我的 SSIS 通宵进程运行执行 SQL 任务来执行备份 - 基本上运行master.dbo.xp_create_subdir以确保目标文件夹存在,然后BACKUP DATABASE [DbName] TO DISK = 'G:\Backups\DbName\DbName.bak' WITH INIT.
每当该任务失败时,其余的过程将中止,我会收到通知,第二天早上来时注意到事务日志的驱动器已满,因此我会手动截断它们并继续。 .. 直到故事重演并且事务日志再次超过可用磁盘空间。
“手动截断”脚本如下所示:
Run Code Online (Sandbox Code Playgroud)use Staging; alter database Staging set recovery simple alter database Staging set recovery full dbcc shrinkfile ('Staging_log', 0, truncateonly); go
所以我越来越厌倦了,我决定尝试正确地做事情,并按照这里的步骤创建一个实际的维护计划:
问题是,我以前从未这样做过,所以我有几个问题:
G:\Backups。那有意义吗?sql-server backup transaction-log maintenance-plans sql-server-2014
我无法理解Ola Hallengren 服务器维护解决方案中的CleanupTime选项的确切期望。我正在寻找一些相关的问题和详尽的答案,但这些解释仍然让我有些困惑。
具体来说:
我正在做每周完整备份、每日 DIFF 备份和每小时日志备份。完整备份使用默认值CleanupTime24 小时。DIFF 和 LOG 备份的 NULL 为CleanupTime。
从CleanupTime 参数的文档中,我无法理解是否设置FULLCleanupTime备份的设置BackupType也会删除旧的 DIFF 和 LOG 备份文件,或仅删除FULL 备份文件。
指定删除备份文件之前的时间(以小时为单位)。如果未指定时间,则不会删除任何备份文件。
后一段让我认为设置FULLCleanupTime备份BackupType也会删除旧的事务日志。然而,不清楚这一段是只适用于BackupTypeLOG的备份,还是也适用于BackupTypeFULL的备份。
DatabaseBackup 有一个检查来验证比最近的完整或差异备份更新的事务日志备份没有被删除。
我想要实现的是,我可以进行长达 1 周的时间点恢复。(我们有一个非常缓慢变化的数据库,所以这是可行的)按照我现在的理解,这需要一周的完整备份,以及一周的事务日志备份。由于完整备份和差异备份只能用于恢复到一个特定的时间点。
那么,我应该将CleanupTime完整备份作业的选项设置为24*7吗?我现在猜测的是,将其设置为 24 小时,将导致下一次完整备份删除所有较旧的完整、差异和事务日志备份文件,从而使我的时间点恢复窗口为 ... 0 小时。对?
backup ×10
sql-server ×5
mongodb ×1
mysql ×1
mysqldump ×1
oracle ×1
pg-dump ×1
postgresql ×1
restore ×1