SQL Server日志文件总结及充满处理方式

 更新时间:2016年11月25日 16:41  点击:1414
      交易日志(Transaction logs)是数据库结构中非常重要但又经常被忽略的部分。由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志。
 
      交易日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。对于任何每一个交易过程,交易日志都有非常全面的记录,根据这些记录可以将数据文件恢复成交易前的状态。从交易动作开始,交易日志就处于记录状态,交易过程中对数据库的任何操作都在记录范围,直到用户点击提交或后退后才结束记录。每个数据库都拥有至少一个交易日志以及一个数据文件。
 
      出于性能上的考虑,SQL Server将用户的改动存入缓存中,这些改变会立即写入交易日志,但不会立即写入数据文件。交易日志会通过一个标记点来确定某个交易是否已将缓存中的数据写入数据文件。当SQL Server重启后,它会查看日志中最新的标记点,并将这个标记点后面的交易记录抹去,因为这些交易记录并没有真正的将缓存中的数据写入数据文件。这可以防止那些中断的交易修改数据文件。
 
维护交易日志
      因为很多人经常遗忘交易日志,因此它也会给系统带来一些问题。随着系统的不断运行,日志记录的内容会越来越多,日志文件的体积也会越来越大,最终导致可用磁盘空间不足。除非日常工作中经常对日志进行清理,否则日志文件最终会侵占分区内的全部可用空间。日志的默认配置为不限容量,如果以这种配置工作,它就会不断膨胀,最终也会占据全部可用空间。这两种情况都会导致数据库停止工作。
 
      对交易日志的日常备份工作可以有效的防止日志文件过分消耗磁盘空间。备份过程会将日志中不再需要的部分截除。截除的方法是首先把旧记录标记为非活动状态,然后将新日志覆盖到旧日志的位置上,这样就可以防止交易日志的体积不断膨胀。如果无法对日志进行经常性的备份工作,最好将数据库设置为"简单恢复模式"。在这种模式下,系统会强制交易日志在每次记录标记点时,自动进行截除操作,以新日志覆盖旧日志。
 
      截除过程发生在备份或将旧标记点标为非活动状态时,它使得旧的交易记录可以被覆盖,但这并不会减少交易日志实际占用的磁盘空间。就算不再使用日志,它依然会占据一定的空间。因此在维护时,还需要对交易日志进行压缩。压缩交易日志的方法是删除非活动记录,从而减少日志文件所占用的物理硬盘空间。
如果您正在运行使用MySQL的Web应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或者破坏应用程序,同时还要保证您的竞争优势。幸运的是,MySQL带有很多设计用来提供这种类型安全的加密函数。本文概述了其中的一些函数,并说明了如何使用它们,以及它们能够提供的不同级别的安全。
双向加密
就让我们从最简单的加密开始:双向加密。在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密。MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE()。下面是一个简单的实例:
mysql> INSERT INTO users (username, password) VALUES ('joe', ENCODE('guessme', 'abracadabra'));
Query OK, 1 row affected (0.14 sec)
其中,Joe的密码是guessme,它通过密钥abracadabra被加密。要注意的是,加密完的结果是一个二进制字符串,如下所示:
mysql> SELECT * FROM users WHERE username='joe';
+----------+----------+
| username | password |
+----------+----------+
| joe      | ¡?i??!?  |
+----------+----------+
1 row in set (0.02 sec)
abracadabra这个密钥对于恢复到原始的字符串至关重要。这个密钥必须被传递给DECODE()函数,以获得原始的、未加密的密码。下面就是它的使用方法:
mysql> SELECT DECODE(password, 'abracadabra') FROM users WHERE username='joe';
+---------------------------------+
| DECODE(password, 'abracadabra') |
+---------------------------------+
| guessme               |
+---------------------------------+
1 row in set (0.00 sec)
应该很容易就看到它在Web应用程序里是如何运行的——在验证用户登录的时候,DECODE()会用网站专用的密钥解开保存在数据库里的密码,并和用户输入的内容进行对比。假设您把PHP用作自己的脚本语言,那么可以像下面这样进行查询:
<?php
$query = "SELECT COUNT(*) FROM users WHERE username='$inputUser' AND DECODE(password, 'abracadabra') = '$inputPass'";?>
blog 和 wiki 技术概述
从 20 世纪 90 年代末起(那时 Web 的繁荣正达到某个饱和点),一些用户开始编辑他们最喜欢的网站清单,这些网站符合一定的兴趣或主题。许多包含在用户清单上的条目都被加了评论,并标注了日期。这样的清单很快被称为 weblog 或 blog(博客),维护这样的 blog 的人被称为 blogger。后来,blog 开始变成文章的集合,通常以时间倒序的形式呈现,并与一个特定的主题相关。Wikipedia 对 blog 的定义如下:
早期的 weblog 仅仅是普通网站的手动更新组件。然而用于简化网络文章(以所谓时序性风格发表)生成及维护的工具的发展使得发表的过程在规模上更为庞大、技术含量更低并更加流行。最终导致了这种在线发布的类型,由此产生了今天的 blog。例如,使用一些基于浏览器的软件是当今 “blog” 的一种典型表现。可以通过专门的 blog 主机服务来托管 blog,blog 也能通过使用 blog 软件在一般的网络主机服务上运行。像其他媒体一样,blog 通常关注某一特定的主题,诸如食品、政治或本地新闻。一些 blog 以在线日记的形式存在。
在 blog 开始出现的同一段时间里,Ward Cunningham 发明了一项技术,这项技术允许任何人通过简单的编辑为 Web 页面做贡献。他将这项技术命名为 Wiki Wiki Web(来源于夏威夷语单词 wiki ,意为迅速 或快),后来这个名字被缩略到只有 wiki 。使用 wiki 的一项显著优势是用户可以当场向 Web 页面贡献内容。另外,因为编辑起来很简单,因而贡献内容时不需要任何特殊的软件。可以在 Wikipedia Web 的百科全书上找到更多关于 wiki 技术的信息,该网站本身就是使用 wiki 技术实现的。(参见 参考资料 上的链接)。
协作性应用程序
这就是 Web 2.0 的全部,尽管该术语出现才几乎一年的时间,但现在好像只有烹饪杂志还没有加入到讨论 Web 2.0 未来出路的行列中。自从出现了里程碑式的文章 “What Is Web 2.0: Design Patterns and Business Models for the Next Generation of Software”(此文由 Tim O'Reilly 在 2005 年 9 月所写,参见 参考资料 中的链接),对 Web 2.0 这一由该文创造的术语的赞同或反对之声一直没有间断。尽管如此,大多数人都认同了 Web 业已改变并进入了一个新的发展阶段,这是带其步入下一个逻辑高度的阶段。在 O'Reilly 的文章中,他阐释了任何 Web 2.0 公司必须具备的核心元素:
     一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大。
      1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存
      2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
      3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 。

      原文地址:http://www.111cn.net/?13542/action_viewspace_itemid_2928.html

  MySQL从开发人员手中的“玩具”变为如今的“世界上最流行的开源数据库”,其中的过程伴随着产品版本升级,以及一些新功能(特别是企业数据库功能)的增加。现在,随着MySQL 5.0被完美地开发出来,已经很少有人将MySQL称为“玩具数据库”了。MySQL的丰富功能满足了许多用户的需求,Oracle最近的动作表明了他们对待MySQL非常重视——Oracle曾几次三番的表示有意收购MySQL。
 
  MySQL的产品路线图
  让我们先从MySQL的较有影响的版本产品开始,看一下MySQL的更新换代。
 
  MySQL 4.0
  MySQL 4.0是在2003年3月发布的,该版本使新的基于MySQL的应用程序获得了更广泛的应用。但是在4.0版中,MySQL不支持存储过程、触发程序、服务器端指针或视图。MySQL 4.0是从3.23发展而来,较之3.23版本有了很大的提高,主要适用于Web站点,这时候的MySQL还不是一个企业级数据库。
 
  以下是MySQL 4.0的主要新特性:
  FULLTEXT索引:最值得用户期待的可能就是FULLTEXT索引。
 
  FULLTEXT在文本字段创建索引,为对该索引执行布尔搜索提供了一个强大而灵活的机制。依照一般的开发经验,开发人员通常必须创建索引并访问文本数据,而FULLTEXT索引比想象中的还要好得多。
 
  许多解决方案仅限于全字索引,FULLTEXT索引没有这种限制,允许开发人员添加或拆分词组。
 
  ANSI SQL UNION:支持ANSI SQL UNION语句,该语句将询问结果汇集到一个结果集。
 
  多表操作:可以执行多表UPDATE和DELETE。
 
  新语句:增加了其他DBMS用户所熟悉的一些非标准的新语句(如IDENTITY和TRUNCATE TABLE),以及FOUND_ROWS()等新功能,这些功能可以返回无需LIMIT子句就能返回的纪录的编号。
 
  InnoDB存储引擎:InnoDB存储引擎在当时作为服务器的标准特性,在4.0版本中成为一个附加选项。InnoDb是允许ACID兼容事务的表类型,而非默认的MyISAM表类型,它可以加快一般性使用的速度,但对于关键操作不是十分有用。
 
  InnoDB表使用行级别锁定特性,这意味着对一个记录的更新只锁定该记录,而不是整个表。当选择访问大量的数据库时(对于大多数Web站点而言),锁定整个表相当快,但是当插入和更新的数量接近于选项的数量时,则速度较慢。长期以来,对MySQL的批评一直集中在MyISAM表的安全性和一致性问题,兼容ACID的InnoDB表在解决这些问题上走过了很长一段路。
[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • php中网页添加到桌面快捷方式方法

    我们经常会在网站中看到可以直接把网站以快捷方式保存到自己的电脑中,然后只要点击就可以实现进入网了,那么php中怎么把网页添加到桌面快捷方式呢。 功能简单,直接上...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • Windows批量搜索并复制/剪切文件的批处理程序实例

    这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • PHP用DOM方式处理HTML之《Simple HTML DOM》

    近经常需要采集一些网上的数据,发现一个PHP处理HTML的利器 simple html dom,看了一下文档,使用非常方便,关键是能够用CSS选择器来访问DOM树,和jquery相似,实在是难得的利器...2016-11-25
  • BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)

    批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25