AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[restore](dba)

Martin Hope
Buttered_Toast
Asked: 2022-09-02 06:31:04 +0800 CST

仅使用 .frm、.ibd 文件恢复数据库

  • 0

今天,我很高兴丢失了所有数据库。
幸运的是,我的data文件夹仍然完好无损,并且包含所有.frm 文件.ibd。
谷歌搜索了几个小时,我想出了一个解决方案,帮助我重新创建.sql文件和表结构,然后导入.ibd文件。

所有这一切的最大帮手是mysqlfrm,我发现它已停产。不确定没有它我是否能够做到这一点。

这是我的过程:

将表导出到.sql文件

mysqlfrm --server=root:[email protected] ./*.frm  --port 3301 > ./dbtables.sql

获取所有创建表命令,以便更轻松地丢弃/导入表。这与dbtables.sql文件一起用于获取所有实例,create table因此更容易查找和替换ALTER TABLE mytable DISCARD TABLESPACE/ IMPORT TABLESPACE。

^[CREATETABLE].*+$

丢弃.ibd文件命令:

ALTER TABLE mytable DISCARD TABLESPACE;

丢弃后,将.ibd数据库文件夹中的文件复制到“实时”版本中。

导入.ibd文件命令:

ALTER TABLE wp_actionscheduler_actions IMPORT TABLESPACE;

您知道仅使用.frm,.ibd文件来恢复数据库的现代方法吗?

Google 和 Stack Overflow 主要指向不再起作用的旧方法/工具。

任何操作系统的解决方案都会很棒,因为我可以访问所有操作系统,因此希望可以毫无问题地测试它们。

mysql restore
  • 1 个回答
  • 32 Views
Martin Hope
Ryan Mortier
Asked: 2022-08-23 05:34:12 +0800 CST

恢复特定数据库时,SSMS 不会自动重命名文件。为什么?

  • 0

我有几个数据库,当我使用 SSMS 还原并选择不同的目标名称时,文件名也会自动重命名。

例子:

在此处输入图像描述

在此处输入图像描述


我遇到的问题是一个特定的数据库,当我选择不同的目标名称时,文件不会自动重命名,我每次都必须手动重命名它们。是否有某个地方正在改变这种行为?

例子:

在此处输入图像描述

在此处输入图像描述

sql-server restore
  • 2 个回答
  • 54 Views
Martin Hope
AmirAli Samiei
Asked: 2022-07-24 02:11:30 +0800 CST

SQL Server 修复删除的 mdf

  • 0

我有一个数据库,我的索引位于单独的文件组和空间 (SSD) 中。包含索引的 SSD 发生故障,我在表上的实际数据是安全的,但由于 SSD 发生故障,我的数据库处于恢复挂起模式。

我想摆脱 SSD 上的那些文件组并在另一个空间上创建一个新文件组,然后在其上创建我的索引,但由于恢复挂起模式,我无法做任何事情。

我已经完成了这些解决方案:

  • 紧急模式,使文件组脱机,使数据库联机
  • 从完全备份(我的备份是一个月前)进行部分恢复,这不起作用,数据库保持在恢复模式
  • 将已删除的 mdf 从备份粘贴到其位置,但数据库仍处于恢复挂起模式
  • 分离数据库并附加其当前文件组以及从备份中删除的文件组,这不起作用,因为删除的文件组来自另一个数据库并且 SQL Server 不接受

我不知道该怎么办了,我有两个选择:

  1. 使已删除的文件组脱机,创建新的文件组并使用新名称创建我的索引。这确实不是一种永久的方式,因为我的数据库中有一些不干净的已删除文件组,但它帮助我恢复在线。
  2. 创建一个脚本来创建新数据库、新文件组、新表并向其中插入当前数据、创建存储过程、触发器和索引以及......这很难编写。

如果您有任何建议,我将不胜感激。

sql-server restore
  • 1 个回答
  • 75 Views
Martin Hope
SEarle1986
Asked: 2022-04-20 14:25:36 +0800 CST

SET SINGLE_USER WITH ROLLBACK IMMEDIATE 仅在帐户是数据库用户时断开会话

  • 4

以下代码创建一个能够恢复数据库的用户:

CREATE LOGIN RestoreUser WITH PASSWORD = 'MyPassword'
ALTER SERVER ROLE dbcreator ADD MEMBER RestoreUser

这工作正常,用户可以恢复数据库,但是如果我想将数据库设置为SINGLE_USER并回滚任何现有连接,恢复命令将被阻止并失败:

第 1 节

/* SELECT from a table and leave the SSMS window open, leaving a sleeping SPID */
USE AdventureWorks2014
SELECT * FROM Person.Person

第 2 节

EXECUTE AS LOGIN = 'RestoreUser'

ALTER DATABASE AdventureWorks2014 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

RESTORE DATABASE AdventureWorks2014 FROM DISK = 'C:\Test\AW14.bak' WITH REPLACE

REVERT

最终,会话 2 超时

Msg 5061, Level 16, State 1, Line 3
ALTER DATABASE failed because a lock could not be placed on database 'AdventureWorks2014'. Try again later.
Msg 5069, Level 16, State 1, Line 3
ALTER DATABASE statement failed.
Msg 3101, Level 16, State 1, Line 5
Exclusive access could not be obtained because the database is in use.
Msg 3013, Level 16, State 1, Line 5
RESTORE DATABASE is terminating abnormally.

以下sp_whoisactive屏幕截图显示该命令被阻止:

在此处输入图像描述

会话 59的sp_whoisactive锁定报告显示

<Database name="AdventureWorks2014">
  <Locks>
    <Lock request_mode="X" request_status="CONVERT" request_count="1" />
    <Lock request_mode="S" request_status="GRANT" request_count="1" />
    <Lock request_mode="U" request_status="GRANT" request_count="1" />
  </Locks>
  <Objects>
    <Object name="(null)">
      <Locks>
        <Lock resource_type="DATABASE.BULKOP_BACKUP_DB" request_mode="U" request_status="GRANT" request_count="1" />
        <Lock resource_type="DATABASE.BULKOP_BACKUP_LOG" request_mode="S" request_status="GRANT" request_count="1" />
      </Locks>
    </Object>
  </Objects>
</Database>

SET SINGLE_USER的Microsoft 文章指出

为了快速获得独占访问,代码示例使用了 WITH ROLLBACK IMMEDIATE 终止选项。这将导致所有未完成的事务被回滚,并且与 AdventureWorks2012 数据库的任何其他连接立即断开。

和

需要对数据库的 ALTER 权限。

我的RestoreUser帐户具有正确的权限(dbcreator服务器角色授予ALTER ANY DATABASE权限)但我不知道为什么命令被阻止,第一个引号表明所有其他连接都将被断开。

我也同意ALTER ANY CONNECTION了,RestoreUser但这并没有帮助。

我发现确实解决了问题,是否RestoreUser正在恢复数据库中的用户(不需要数据库中的任何权限)

CREATE LOGIN RestoreUser WITH PASSWORD = 'ABC@123'
ALTER SERVER ROLE dbcreator ADD MEMBER RestoreUser

USE AdventureWorks2014
CREATE USER RestoreUser

编码

EXECUTE AS LOGIN = 'RestoreUser'

ALTER DATABASE AdventureWorks2014 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

RESTORE DATABASE AdventureWorks2014 FROM DISK = 'C:\Test\AW14.bak' WITH REPLACE

REVERT

然后运行而不会被睡眠会话阻塞。

我的问题是

  • 为什么SET SINGLE_USER WITH ROLLBACK IMMEDIATE代码应该杀死并回滚所有打开的 SPID 时会被阻止
  • 为什么在数据库中创建用户可以解决这个问题?
restore sql-server-2016
  • 1 个回答
  • 144 Views
Martin Hope
Mar71ns
Asked: 2022-02-22 06:06:42 +0800 CST

无法恢复启用 TDE 的数据库备份

  • 4

我正在尝试恢复启用了透明数据加密的数据库备份。我已验证备份文件中的证书指纹与 [master] 数据库中的 TDE 证书相同。

TDET指纹

TDE证书:

在此处输入图像描述

但是,恢复失败并出现以下错误:

在此处输入图像描述

它正在请求旧证书。请注意,我们前段时间更改了 TDE 证书,并且使用 alter database 命令使用新证书对数据库主密钥进行了加密:

USE [db];
GO
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER CERTIFICATE [New_Certificate];
GO

进行备份时,旧证书仍在 [master] 数据库中,并在一段时间后被删除。

这看起来像一个错误。

任何解释,建议?

版本:Microsoft SQL Server 2016 (SP3-OD) (KB5006943) - 13.0.6404.1 (X64)

[编辑1]:

我从备份中恢复了“旧”证书,并且数据库恢复成功。检查加密状态 - 数据库按预期受到“新”证书的保护,我删除了“旧”证书: 在此处输入图像描述

但随后数据库备份出现相同的错误- 再次要求“旧”证书:

在此处输入图像描述

[编辑2]:

我解密了数据库并重新加密。仅在第二次尝试时解密成功:

在此处输入图像描述

sql-server restore
  • 1 个回答
  • 208 Views
Martin Hope
dlopezgonzalez
Asked: 2022-01-26 04:08:53 +0800 CST

使用 SQL Server 2008 从 MDF 和 LDF 还原数据库后表中缺少行

  • 0

我有两个文件,test.mdf 和 test.ldf,大小分别为 200 MB 和 200 MB。

我使用“附加数据库”选项恢复数据库,一切正常,但我发现某些表中有很多缺失的行。

我能做些什么?

我有以前 Windows 安装的所有文件,我读到 mdf 有未提交的更改,文件中的这些更改在哪里?

sql-server-2008-r2 restore
  • 1 个回答
  • 79 Views
Martin Hope
Erik Midtskogen
Asked: 2022-01-23 06:26:14 +0800 CST

SQL Server 上的备份和还原(迁移)中缺少表

  • 3

我正在尝试将工作中的 SQL Server 实例上的小型数据库的结构和内容复制到我家用计算机上的实例中。看起来这应该是一个简单的两分钟操作,但是当我按照手册上说的去做时,实际上九个表中只有四个在我的家用计算机上得到了恢复。至于为什么其他五张桌子被排除在外,没有明显的韵律或理由。这是一个入门数据库项目,暂时没有什么花哨的东西——只有九个简单的表,甚至还没有应用任何约束或触发器。

我不是经验丰富的 DBA。我想我以前做过这件事没有发生任何事故,但我不记得了。这种事情不是我的正常工作。是否有我可能犯的任何新手错误——我需要覆盖任何荒谬的默认 SSMS 设置以使所有 DBA 任务中最基本的任务真正工作?

sql-server restore
  • 1 个回答
  • 251 Views
Martin Hope
pygri
Asked: 2021-11-27 02:52:48 +0800 CST

SQL Server 从 Azure 存储 Blob 容器上的备份文件还原(使用 SAS 令牌)

  • 1

我已经在 azure blob 存储容器中设置了一个 SAS 令牌。它目前是有效的,正如 windows cmd.exe 中的此命令有效的事实所证明的那样:

azcopy list "https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/path/to/file.BAK?<SAS token>"

并作为输出返回:

INFO: ;  Content Length: 7.58 GiB

现在,如果我通过 SSMS 在 SQL 服务器中发出以下命令(服务器在发出 azcopy 命令的同一台机器上本地运行,并且 <>-brackets 中的值与上面相同。请注意,我最后没有“/”容器名称和令牌中没有“?”,遵循 Microsoft 文档的建议):

CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] 
  -- this name must match the container path, start with https and must not contain a forward slash at the end
WITH IDENTITY='SHARED ACCESS SIGNATURE' 
  -- this is a mandatory string and should not be changed   
 , SECRET = '<SAS token>';
GO

RESTORE HEADERONLY FROM
URL = N'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/path/to/file.BAK';

RESTORE 命令后出现错误:

Msg 3201, Level 16, State 2, Line 28
Cannot open backup device 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/path/to/file.BAK'. Operating system error 3(The system cannot find the path specified.).
Msg 3013, Level 16, State 1, Line 28
RESTORE HEADERONLY is terminating abnormally.

我检查并仔细检查了路径中没有错字,并且标记是相同的。<SAS token>是格式

sv=<date>&st=<datetime>&se=<datetime>&sr=c&sp=rl&sig=<sig_token>

最后一点,如果我在 RESTORE 之前 DROP 凭证,我会收到不同的错误消息

Operating system error 86(The specified network password is not correct.).

所以看起来令牌有效......

我会很感激一些关于这里可能出现问题的建议,或者我如何解决它的行为与 azcopy 实用程序不同的原因。

编辑 1:已对存储文件路径的区分大小写进行了评论。

<mystorageaccountname>并且<mystorageaccountcontainername>在 Microsoft Azure 存储资源管理器以及 azcopy 和 SQL 命令中都是小写。

path/to/file.BAK是混合大小写,在 Microsoft Azure 存储资源管理器以及 azcopy 和 SQL 命令中也是相同的。

restore sql-server-2019
  • 1 个回答
  • 539 Views
Martin Hope
AAA
Asked: 2021-10-25 06:54:55 +0800 CST

Sql server 从文件组备份和恢复

  • 0

我使用 Sql Server 2019 并且需要备份和恢复文件组。

执行步骤:
1.创建数据库Two FilesGroup并[TestFileGroup]命名。
2.在两个表中插入数据,一个在 First FileGroup 中,另一个在第二个 FileGroup 中。
3.第一次完整备份[TestFileGroup]。
4.然后re-enter the data进行更改 5.BackUP FileGroup From [FG2] 。
6.Restore First FullBackup With [TestFileGroup_New]name。
7.对于恢复部分备份需要尾部备份。和来自 [TestFileGroup_New] 的尾日志备份。
8.恢复FILEGROUP备份。
9.restore Database [TestFileGroup_New] with RECOVERY
10.引发错误!

错误文本:

消息 4303,级别 16,状态 1,第 100 行 前滚起点现在位于日志序列号 (LSN) 37000000056800001。需要额外前滚超过 LSN 37000000058400001 才能完成恢复序列。消息 3013,级别 16,状态 1,第 100 行 RESTORE DATABASE 异常终止。

Sql 服务器查询:

USE master
GO
DROP DATABASE IF EXISTS TestFileGroup
GO 
DROP DATABASE IF EXISTS TestFileGroup_New
GO 
--================================================================= Create DataBase
CREATE DATABASE TestFileGroup
ON PRIMARY 
    ( NAME = N'PRIMARY',            FILENAME = N'D:\Temp\TestDB\TestFileGroup_PRIMARY.mdf'), 
 FILEGROUP FG2 
    ( NAME = N'secondary',          FILENAME = N'D:\Temp\TestDB\TestFileGroup_secondary.ndf')
 LOG ON 
    ( NAME = N'TestFileGroup_log',  FILENAME = N'D:\Temp\TestDB\FGRestoreTEST_log.ldf')
GO
--================================================================= Insert Data(Level 1)
USE TestFileGroup
GO 
CREATE TABLE T_primary
(
    ID INT PRIMARY KEY,
    Fname NVARCHAR(100),
    Lname NVARCHAR(100)
) ON [PRIMARY]
GO
CREATE TABLE T_fg2
(
    ID INT PRIMARY KEY,
    Fname NVARCHAR(100),
    Lname NVARCHAR(100)
) ON FG2
GO
--==================================================================
USE TestFileGroup
GO 
INSERT INTO T_primary (ID,Fname,Lname) VALUES 
    (1,N'Json',N'JJ'),
    (2,N'C#',N'CC'),
    (3,N'Python',N'PP'),
    (4,N'Test1',N'TT'),
    (5,N'C++',N'C')
GO
INSERT INTO T_fg2 (ID,Fname,Lname) VALUES 
    (10,N'MMMM',N'M'),
    (20,N'SSSS',N'S'),
    (30,N'PPPPP',N'P')
GO
SELECT * FROM T_primary
SELECT * FROM T_fg2
GO
--================================================================== First Full Backup IN First year 
BACKUP DATABASE TestFileGroup  TO  DISK = N'D:\Temp\TestDB\Backup\TestFileGroup_Full.bak' 
    WITH FORMAT,COMPRESSION
GO 
RESTORE FILELISTONLY FROM DISK = N'D:\Temp\TestDB\Backup\TestFileGroup_Full.bak' 

--================================================================== Change Data
USE TestFileGroup
GO 
INSERT T_primary 
SELECT 6 ID,'Java'Fname,'jv' Lname

INSERT T_fg2 
SELECT 40 ID,'HHHH'Fname,'H' Lname

SELECT * FROM T_primary
SELECT * FROM T_fg2
--================================================================== First FileGroup Backup
USE master
GO
BACKUP DATABASE TestFileGroup FILEGROUP = N'FG2' TO  DISK = N'D:\Temp\TestDB\Backup\TestFileGroup_FG2.bak' 
    WITH FORMAT,COMPRESSION
GO
RESTORE LABELONLY FROM DISK=N'D:\Temp\TestDB\Backup\TestFileGroup_FG2.bak' 
GO
RESTORE HEADERONLY FROM DISK=N'D:\Temp\TestDB\Backup\TestFileGroup_FG2.bak' 
GO
RESTORE FILELISTONLY FROM DISK=N'D:\Temp\TestDB\Backup\TestFileGroup_FG2.bak' 
GO


--================================================================== Restore Full Backup --->TestFileGroup_New
RESTORE DATABASE TestFileGroup_New FROM DISK=N'D:\Temp\TestDB\Backup\TestFileGroup_Full.bak' WITH
MOVE 'PRIMARY'              TO N'D:\Temp\TestDB\New\TestFileGroupNew_PRIMARY.mdf',
MOVE 'secondary'            TO N'D:\Temp\TestDB\New\TestFileGroupNew_secondary.ndf',
MOVE 'TestFileGroup_log'    TO N'D:\Temp\TestDB\New\TestFileGroupNew_log.ldf',
STATS=10 ,RECOVERY

--================================================================== For Restore Partial Backup Need Tail Backup
BACKUP LOG TestFileGroup_New 
    to  DISK = N'D:\Temp\TestDB\Backup\TestFileGroup_New_Tail.trn' ---- Not Real
WITH NORECOVERY,FORMAT,COMPRESSION
GO
--================================================================== Restore FileGroup Backup
RESTORE DATABASE TestFileGroup_New FILEGROUP = N'FG2' 
    FROM  DISK = N'D:\Temp\TestDB\BackUP\TestFileGroup_FG2.bak' WITH 
NORECOVERY,REPLACE
GO 
--================================================================== 
RESTORE DATABASE TestFileGroup_New  WITH RECOVERY
/*
Msg 4303, Level 16, State 1, Line 100
The roll forward start point is now at log sequence number (LSN) 37000000056800001. Additional roll forward past LSN 37000000058400001 is required to complete the restore sequence.
Msg 3013, Level 16, State 1, Line 100
RESTORE DATABASE is terminating abnormally.
*/


sql-server restore
  • 1 个回答
  • 142 Views
Martin Hope
Claudio Floreani
Asked: 2021-10-05 10:56:27 +0800 CST

做了纯文本备份(SQL 脚本文件格式),如何只恢复数据(假设架构有效)?

  • 0

我用来备份我的数据库pg_dump -cF p my_db > snapshot.sql。

如何仅从其中一个文件中恢复数据(假设架构有效)?我是否必须在其中发布所有 COPY 语句,还是有更直接的方法?

postgresql restore
  • 1 个回答
  • 169 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve