数据库满了怎么办

数据库满了怎么办,第1张

问题一:数据库空间满了怎么处理 1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库

2:删除LOG文件

3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库

此法生成新的LOG,大小只有500多K

再将此数据库设置自动收缩

或用代码分离 pubs,然后将 pubs 中的一个文件附加到当前服务器:

EXEC sp_detach_db @dbname = 'pubs'

EXEC sp_attach_single_file_db @dbname = 'pubs',

@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubsmdf'

问题二:数据库满了怎么办? 数据库是只读的(Readonly),也即不可以修改(增加\删除\修改都不行)

问题三:SQL server数据库日志满了怎么处理? 解决方法

日志文件满而造成SQL数据库无法写入文件时,可用两种方法:

一种方法:清空日志。

1.打开查询分析器,输入命令

DUMP TRANSACTION 数据库名 WITH NO_LOG

2再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。

另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。

1: 删除LOG

分离数据库 企业管理器->服务器->数据库->右键->分离数据库

2:删除LOG文件

附加数据库 企业管理器->服务器->数据库->右键->附加数据库

此法生成新的LOG,大小只有500多K。

注意:建议使用第一种方法。

如果以后,不想要它变大。

SQL2000下使用:

在数据库丁点右键->属性->选项->故障恢复-模型-选择-简单模型。

或用SQL语句:

alter database 数据库名 set recovery simple

另外,如上图中数据库属性有两个选项,与事务日志的增长有关:

Truncate log on checkpoint

(此选项用于SQL70,SQL 2000中即故障恢复模型选择为简单模型)

当执行CHECKPOINT 命令时如果事务日志文件超过其大小的70% 则将其内容清除在开发数据库时时常将此选项设置为True

Auto shrink

定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25% 当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将Truncate log on checkpoint 选项设为True 时才能进行。

注意:一般立成建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满。

问题四:数据库空间满了怎么处理 各数据库空间满处理方法

wenkubaidu/YexzIW

问题五:网站的虚拟空间,数据库满了怎么办? 肯定有影响啦,你自己说的,每天发很多文章,最终数据库满了,就是说文章保存在数据库中,一般来说数据库保存钉东西都是内存不是很大的东西,除了网站cms所必要的数据和系统日志之外,就是你文章的文字啦,至于和视频等等占用空间很多的东西就保存在网页空间里面了,和数据没有关系。

就如楼上的所说,问题不大,增加数据库的容量就行了,现在一般的IDC都会提供这样的服务,对你现在的网站不会有影响的。此外联系客服也很重要的。祝你早日解决问题!

问题六:SQL数据磁盘满了怎么解决? -- 清空日志

--压缩日志及数据库文件大小

/--特别注意

请按步骤进行,未进行前面的步骤,请不要做后面的步骤

否则可能损坏你的数据库

--/

selectfromsysfiles

--1清空日志

DUMPTRANSACTIONusernameWITHNO_LOG

--2截断事务日志:

BACKUPLOGusernameWITHNO_LOG

--3收缩数据库文件(如果不压缩,数据库的文件不会减小

-- 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件

--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

-- 也可以用SQL语句来完成

--收缩数据库

DBCCSHRINKDATABASE(username)

--收缩指定数据文件,1是文件号,可以通过这个语句查询到:selectfromsysfiles

DBCCSHRINKFILE(2)

--4为了最大化的缩小日志文件(如果是sql70,这步只能在查询分析器中进行)

-- a分离数据库:

-- 企业管理器--服务器--数据库--右键--分离数据库

-- b在我的电脑中删除LOG文件

-- c附加数据库:

-- 企业管理器--服务器--数据库--右键--附加数据库

-- 此法将生成新的LOG,大小只有500多K

-- 或用代码:

-- 下面的示例分离username,然后将username中的一个文件附加到当前服务器。

execsp_dboptionusername,'singleuser',true

a分离

[email protected] ='username'

b删除日志文件

execmasterxp_cmdshell'delD:\ProgramFiles\SQL\database\username_LOGldf'

c再附加

[email protected] ='username',

@physname='D:\ProgramFiles\SQL\database\username_DataMDF'

--5为了以后能自动收缩,做如下设置:

-- 企业管理器--服务器--右键数据库--属性--选项--选择自动收缩

--SQL语句设置方式:

EXECsp_dboption'数据库名','autoshrink','TRUE'

--6如果想以后不让它日志增长得太大

-- 企业管理器--服务器--右键数据>>

问题七:数据库日志已满,如何处理? 先提供一种复杂的方法压缩日志及数据库文件如下:1清空日志 dump transaction 库名 with no_log2截断事务日志: backup log 数据库名 with no_log3收缩数据库文件(如果不压缩,数据库的文件不会减小 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了 --选择数据文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了 也可以用sql语句来完成 --收缩数据库 dbcc shrinkdatabase(客户资料) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select from sysfiles dbcc shrinkfile(1)4为了最大化的缩小日志文件(如果是sql 70,这步只能在查询分析器中进行) a分离数据库: 企业管理器--服务器--数据库--右键--分离数据库 b在我的电脑中删除log文件 c附加数据库: 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的log,大小只有500多k 或用代码: 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 a分离 e x e c sp_detach_db @dbname = 'pubs' b删除日志文件 c再附加 e x e c sp_attach_single_file_db @dbname = 'pubs', @physname = 'c:\program files\microsoft sql server\mssql\data\pubsmdf'5为了以后能自动收缩,做如下设置: 企业管理器--服务器--右键数据库--属性--选项--选择自动收缩 --sql语句设置方式: e x e c sp_dboption '数据库名', 'autoshrink', 'true'6如果想以后不让它日志增长得太大 企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xm(x是你允许的最大数据文件大小) --sql语句的设置方式: alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 我来完善答案完善答案通过审核后,可获得3点财富值最新回答:2012-06-20 05:01 版本:1个历史版本

问题八:如何从根本上解决SQL数据库日志已满的问题 1、你设置了日志文件的最大数,数据库的恢复模式是完整恢复模式,所有的针对数据库的改动都会记录到日志,不仅仅是你的改动数据库,数据库本身的 *** 作也有记录到日志,所以,日志文件才会不断增长。

2、那是因为大部分的电脑上的数据库,基本没怎么变过,但生产用的数据库经常变动,所以日志记录也变得巨大,我见过数据库200MB,但是日志文件50GB,因为本来数据库有10GB,因为测试需要删除了大部分的数据,结果导致日志文件增长到了50GB。

3、定时备份日志并收缩日志文件。

4、通过备份日志,并收缩日志文件,这个语句你自己百度。

5、日志是一个以事务编号连续的记录,比如,我第一次备份的日志事务编号为1-1000,那么日志就会被截断,并从1001开始,之后的日志备份就从1001开始了,所以,初始备份一直到最后一次备份都不能删除,否则使用日志恢复时会出现问题。

问题九:oracle数据库空间占满了,怎么办 1、删除无用文件或数据,腾空间。

2、将空间紧张的数据移到其他空闲空间。

3、增加新存储空间。

问题十:如何清理sql server 已满的数据库日志 SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件

方法一:

1、打开查询分析器,输入命令

backup log database_name WITH NO_log

2、再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了。

方法二:

设置检查点,自动截断日志

一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此 *** 作以免数据库日志过大

1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如用户数据库cwbase1)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存

2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定

3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式, *** 作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据

方法三:通过SQL收缩日志

把代码复制到查询分析器里,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可

SET NOCOUNT on

DECLARE @logicalFileName sysname,

@MaxMinutes int,

@NewSize int

USE tablename -- 要 *** 作的数据库名

select @logicalFileName = 'tablename_log', -- 日志文件名

@MaxMinutes = 10, -- Limit on time allowed to wrap log

@NewSize = 1 -- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

select @OriginalSize = size

from sysfiles

WHERE name = @logicalFileName

select 'Original Size of ' + db_name() + ' log is ' +

ConVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

ConVERT(VARCHAR(30),(@OriginalSize8/1024)) + 'mb'

from sysfiles

WHERE name = @logicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter int,

@StartTime DATETIME,

@Trunclog VARCHAR(255)

select @StartTime = getdate(),

@Trunclog = 'backup log >>

数据和日志文件分开存放在不同磁盘上

数据文件和日志文件的 *** 作会产生大量的I/O 在可能的条件下 日志文件应该存放在一个与数据和索引所在的数据文件不同的硬盘上以分散I/O 同时还有利于数据库的灾难恢复

tempdb数据库单独存放在不同磁盘上

tempdb数据库是其他所有数据库都有可能使用的临时数据库 当使用select into 在没建立索引的列上执行Orderby时就会在tempdb数据库中产生临时表来存储中间数据 由于建立和填充临时表会严重降低系统性能 所以在尽可能的情况下应该为要排序的列建立索引 同时 tempdb数据库是为所有的用户和应用程序共享 所以如果一个用户占据了tempdb数据库的所有空间 则其他数据库将不能再使用 在可能的情况下 tempdb数据库应该单独放置在一个速度更快的硬盘或者RAID阵列上 分离tempdb数据库的I/O *** 作以加快性能 tempdb数据库应该有适当的容量 以满足用户的需要 应该允许tempdb数据库的空间自动增长 如果设置为不允许自动增长 当查询 *** 作建立了超过tempdb数据库容量的临时表时 *** 作将无法完成

适当设置tempdb数据库的增长幅度 过小的增长幅度会产生更多的外部碎片 会占用更多的资源

避免热点数据的发生

在SQLServer 之前 对于没有聚集索引的表(堆集表) 新插入的数据行总是放置在磁盘中表的物理结尾处 如果并发的用户很多 同时在对表执行插入或者更新数据的 *** 作 这将使得十分繁忙的表的末尾有可能产生数据热点 并发的I/O *** 作集中对少数页面进行 *** 作 将导致数据库性能的下降

在SQLServer中 新的数据行的物理存储空间的分配是通过PFS页面来进行的 PFS页面的管理算法将插入 *** 作进行分散来尽量避免产生数据热点

在设计应用系统和数据库时 要避免在自然增长的列上建立主键 这样有可能导致热点数据的发生

数据类型要少

在设计表时 尽可能少用数据类型 这样一个数据页面上可以保存最多的信息 数据页面就少 检索数据页面的I/O *** 作就少 所以效率会高

监控和整理空间碎片

文件空间的自动增长提高了自动管理性 但可能导致空间碎片 物理空间与数据的逻辑空间不再连续 定期的监控和空间碎片整理有利于提高I/O性能

使用主数据文件和次要数据文件

每个数据库的一个主数据文件属于主文件组 对于 GB左右规模的数据库 一个数据文件就够了 如果有次要数据文件 主数据文件中有管理次要数据文件的指针

采用多个数据文件时 主数据文件用于存储系统对象和表 次要数据文件用于存储用户数据和索引 在可能的情况下 主数据文件和次要数据文件可以单独存放在不同的磁盘上以分散I/O

如果采用多个数据文件 推荐主数据文件存储系统数据 次要数据文件存放用户数据和索引 这样会有助于提高I/O性能

利用文件组改善性能

在大型数据库系统中 可以考虑建立文件组来管理数据文件 将表和索引通过存放在不同的物理磁盘上进行性能监控比较 最后得出优化的存储方案

重视自动增长和自动收缩可能导致的性能问题

数据库文件的自动增长和自动收缩功能对于小型数据库的管理十分有用 但可能导致大型数据库的性能问题 因为文件的自然增长的同时会导致存储碎片的发生 当文件空间变大时 新分配的空间不一定和原来的空间连续 当文件空间收缩时 释放了部分空间 然而当文件又需要增长存储空间却不能利用原先释放的空间 也会导致碎片的发生

分离系统数据和用户数据

将系统数据库和用户数据库分开存放在不同的物理磁盘上有助于改善I/O性能 有助于数据库备份和恢复

优化索引设计

索引的设计对数据库的性能十分重要 具体不再阐述 可参见本博相关文章

定期更新统计信息

SQLServer默认使用基于代价的优化 所以统计信息的及时更新对于查询优化十分重要

定期的一致性检查

lishixinzhi/Article/program/SQLServer/201311/22434

收缩数据库

数据库中的每个文件都可以通过删除未使用的页的方法来减小。尽管数据库引擎会有效地重新使用空间,但某个文件多次出现无需原来大小的情况后,收缩文件就变得很有必要了。数据和事务日志文件都可以减小(收缩)。可以成组或单独地手动收缩数据库文件,也可以设置数据库,使其按照指定的间隔自动收缩。

文件始终从末尾开始收缩。例如,如果有个 5 GB 的文件,并且在 DBCC SHRINKFILE 语句中将 target_size 指定为 4 GB,则数据库引擎将从文件的最后一个 1 GB 开始释放尽可能多的空间。如果文件中被释放的部分包含使用过的页,则数据库引擎先将这些页重新放置到文件的保留部分。只能将数据库收缩到没有剩余的可用空间为止。例如,如果某个 5 GB 的数据库有 4 GB 的数据,并且在 DBCC SHRINKFILE 语句中将 target_size 指定为 3 GB,则只能释放 1 GB。

自动数据库收缩

将 AUTO_SHRINK 数据库选项设置为 ON 后,数据库引擎将自动收缩具有可用空间的数据库。此选项可以使用 ALTER DATABASE 语句来进行设置。默认情况下,此选项设置为 OFF。数据库引擎会定期检查每个数据库的空间使用情况。如果某个数据库的 AUTO_SHRINK 选项设置为 ON,则数据库引擎将减少数据库中文件的大小。该活动在后台进行,并且不影响数据库内的用户活动。

将数据库设置为自动收缩

ALTER DATABASE (Transact-SQL)

手动数据库收缩

您可以使用 DBCC SHRINKDATABASE 语句或 DBCC SHRINKFILE 语句来手动收缩数据库或数据库中的文件。如果 DBCC SHRINKDATABASE 或 DBCC SHRINKFILE 语句无法回收日志文件中的所有指定空间,则该语句将发出信息性消息,指明必须执行什么 *** 作以便释放更多空间。有关收缩日志文件的详细信息,请参阅收缩事务日志。

在该过程中任意时间都可停止 DBCC SHRINKDATABASE 和 DBCC SHRINKFILE *** 作,所有已完成工作都将保留。

在使用 DBCC SHRINKDATABASE 语句时,您无法将整个数据库收缩得比其初始大小更小。因此,如果数据库创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。

但是,使用 DBCC SHRINKFILE 语句时,可以将各个数据库文件收缩得比其初始大小更小。必须对每个文件分别进行收缩,而不能尝试收缩整个数据库。

日志有用吗?没用的话把日志删除会节省很多空间。

可以使用查询分析器执行SQL语句,请根据你的要求使用。

1清空日志

DUMP TRANSACTION [yourdbname] WITH NO_LOG;

2截断数据库日志

BACKUP LOG [yourdbname]WITH NO_LOG;

3收缩数据库

DBCC SHRINKDATABASE([yourdbname]);

在SQL Server 70和SQL Server2000中,可以用下面的命令查看:

DBCC log ( {dbid|dbname}, [, type={0|1|2|3|4}] )

参数:

Dbid or dbname - 任一数据库的ID或名字

type - 输出结果的类型:

0 - 最少信息(operation, context, transaction id)

1 - 更多信息(plus flags, tags, row length)

2 - 非常详细的信息(plus object name, index name,page id, slot id)

3 - 每种 *** 作的全部信息

4 - 每种 *** 作的全部信息加上该事务的16进制信息

默认 type = 0

要查看MSATER数据库的事务日志可以用以下命令:

DBCC log (master)

释放日志空间

1清空日志

  DUMP TRANSACTION 库名 WITH NO_LOG

2截断事务日志:

  BACKUP LOG 数据库名 WITH NO_LOG

3收缩数据库文件(如果不压缩,数据库的文件不会减小

  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件

  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

  也可以用SQL语句来完成

  --收缩数据库

  DBCC SHRINKDATABASE(客户资料)

  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select from sysfiles

  DBCC SHRINKFILE(1)

4为了最大化的缩小日志文件(如果是sql 70,这步只能在查询分析器中进行)

  a分离数据库:

  企业管理器--服务器--数据库--右键--分离数据库

  b在我的电脑中删除LOG文件

  c附加数据库:

  企业管理器--服务器--数据库--右键--附加数据库

  此法将生成新的LOG,大小只有500多K

  或用代码:

  下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

  a分离

  E X E C sp_detach_db @dbname = 'pubs'

  b删除日志文件

  c再附加

  E X E C sp_attach_single_file_db @dbname = 'pubs',

  @physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubsmdf'

5为了以后能自动收缩,做如下设置:

  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

  --SQL语句设置方式:

  E X E C sp_dboption '数据库名', 'autoshrink', 'TRUE'

6如果想以后不让它日志增长得太大

  企业管理器--服务器--右键数据库--属性--事务日志

  --将文件增长限制为xM(x是你允许的最大数据文件大小)

  --SQL语句的设置方式:

  alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

特别注意:

  请按步骤进行,未进行前面的步骤,请不要做后面的步骤

  否则可能损坏你的数据库

  一般不建议做第4,6两步

  第4步不安全,有可能损坏数据库或丢失数据

  第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复

另外提供一种更简单的方法,建议大家使用。

更简单的方法:

1。右建数据库属性窗口--故障还原模型--设为简单

2。右建数据库所有任务--收缩数据库

3。右建数据库属性窗口--故障还原模型--设为大容量日志记录

以上就是关于数据库满了怎么办全部的内容,包括:数据库满了怎么办、浅谈如何优化SQL Server服务器、收缩数据库有什么作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10633011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存