日期:2014-05-18  浏览次数:20570 次

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