Rau*_*han 0 sql-server backup restore
我得到了一个42 MB 的.bak 文件,恢复后,数据库大小约为 2048.00 MB。当我对此数据库进行备份时,.bak 文件大小变为277 MB。
为什么 .bak 文件大小会增加?我在恢复测试后立即执行此操作。
请找到恢复脚本:
IF OBJECT_ID(N'tempdb..#tmp') IS NOT NULL
BEGIN
DROP TABLE #tmp
END
go
declare @path varchar(50)
create table #tmp
(
LogicalName nvarchar(128)
,PhysicalName nvarchar(260)
,Type char(1)
,FileGroupName nvarchar(128)
,Size numeric(20,0)
,MaxSize numeric(20,0),
Fileid tinyint,
CreateLSN numeric(25,0),
DropLSN numeric(25, 0),
UniqueID uniqueidentifier,
ReadOnlyLSN numeric(25,0),
ReadWriteLSN numeric(25,0),
BackupSizeInBytes bigint,
SourceBlocSize int,
FileGroupId int,
LogGroupGUID uniqueidentifier,
DifferentialBaseLSN numeric(25,0),
DifferentialBaseGUID uniqueidentifier,
IsReadOnly bit,
IsPresent bit,
TDEThumbPrint varchar(50),
SnapshotUrl varchar(50)
)
set @path = '/opt/mssql/backup/IDIT_MSSQL.bak'
insert #tmp
EXEC ('restore filelistonly from disk = ''' + @path + '''')
--select * from #tmp
Declare @RestoreString as Varchar(max)
Declare @NRestoreString as NVarchar(max)
DECLARE @LogicalName as varchar(75)
Declare @counter as int
Declare @rows as int
set @counter = 1
select @rows = COUNT(*) from #tmp
--select @Rows as [These are the number of rows]
DECLARE MY_CURSOR Cursor
FOR
Select LogicalName
From #tmp
Open My_Cursor
set @RestoreString =
'RESTORE DATABASE [TEST_CONTAINER] FROM DISK = N''/opt/mssql/backup/TEST_MSSQL.bak'''
+ ' with '
Fetch NEXT FROM MY_Cursor INTO @LogicalName
While (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
select @RestoreString =
case
when @counter = 1 then
@RestoreString + 'move N''' + @LogicalName + '''' + ' TO N''/var/opt/mssql/data/'+
@LogicalName + '.mdf' + '''' + ', '
when @counter > 1 and @counter < @rows then
@RestoreString + 'move N''' + @LogicalName + '''' + ' TO N''/var/opt/mssql/data/'+
@LogicalName + '.ndf' + '''' + ', '
WHen @LogicalName like '%log%' then
@RestoreString + 'move N''' + @LogicalName + '''' + ' TO N''/var/opt/mssql/data/'+
@LogicalName + '.ldf' +''''
end
--select @RestoreString
set @counter = @counter + 1
FETCH NEXT FROM MY_CURSOR INTO @LogicalName
END
--select @RestoreString
set @NRestoreString = @RestoreString
EXEC sp_executesql @NRestoreString
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
Run Code Online (Sandbox Code Playgroud)
备份脚本
BACKUP DATABASE TEST_CONTAINER TO DISK = N'/opt/mssql/backupNew/TEST_MSSQL.bak' WITH NOFORMAT, NOINIT, NAME = 'TEST_CONTAINER', SKIP, NOREWIND, NOUNLOAD, STATS = 10
Run Code Online (Sandbox Code Playgroud)
默认情况下,备份是未压缩的。因此,如果您还原压缩备份,然后对还原的数据库进行未压缩备份,则预计新备份会更大。
与 SQL Server 中的其他一些默认值一样,它是默认值并不是因为它是最佳的,而是为了匹配旧版本的行为。但对于绝大多数现代系统,您应该压缩备份。
您可以通过更改备份压缩的服务器级默认值或通过在 BACKUP DATABASE 中指定COMPRESSION选项来获取压缩备份。
BACKUP DATABASE TEST_CONTAINER
TO DISK = N'/opt/mssql/backupNew/TEST_MSSQL.bak'
WITH FORMAT,
INIT,
NAME = 'TEST_CONTAINER',
COMPRESSION,
STATS = 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
763 次 |
| 最近记录: |