500G數據庫怎麼備份?
500G數據庫怎麼備份?備份之前要做優化嗎?具體怎麼做?有這方面經驗的前輩請指點一下!
------解决方案--------------------如果没有备份文件,日志是用来还原数据的,
有备份文件的话,清空日志文件没有影响.
可以先清空再收缩数据库
backup log 数据库 with no_log
dbcc shrinkdatabase( '数据库 ',0,notruncate)
如果备份还嫌大就删掉一些大表的历史记录吧.
------解决方案--------------------這麼大 的數據備份成本很高,我認為應該把數據庫中的表的歷史數據、沒有用的數據清空
再進行備份
否則備份的時間太長,備份的成本也很高
------解决方案--------------------你是要备份还是要缩小数据库?
备份只需要找个大的存储介质,TB容量的也很多.
如果想缩小数据库可从几个方面:
1\缩小日志文件,上面都讲过了
2\减小数据表的UNUSED SIZE,可用SQL语句查询出数据库所有表的记录数量以及占用空间情况.
参考:
--==========================================================================
-- 说明: 本脚本用于查询当前数据库中任何表格的记录条数
-- 并将结果存入tableinfo表中,不会删除以备用户再做处理和分析
-- 但是,最后请用户删除此表。
--==========================================================================
if exists (select * from dbo.sysobjects where id = object_id([dbo].[tablespace]) and objectproperty(id, nisusertable) = 1)
drop table [dbo].[tablespace]
go
create table tablespace
(
tablename varchar(20),
rowscount char(11),
reserved varchar(18),
data varchar(18),
index_size varchar(18),
unused varchar(18)
)
go
declare @sql varchar(500)
declare @tablename varchar(20)
declare cursor1 cursor
for
select name from sysobjects where xtype='U'
open Cursor1
fetch next from Cursor1 into @TableName
while @@fetch_status = 0
begin
set @sql = 'insert into TableSpace '
set @sql = @sql + ' exec sp_spaceused '''+ @TableName + ''' '
exec (@sql)
fetch next from Cursor1 into @TableName
end
close Cursor1
deallocate Cursor1
go
--显示结果
select * from tablespace
--order by tablename
--order by tablename asc --按表名称,用于统计表
order by rowscount desc --按行数量,用于查看表行数
--order by reserved desc, data desc --按占用空间
--order by index_size desc, reserved desc --按索引空间查看
go
drop table TableSpace