<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[电脑老窝 - 数据库]]></title>
<link>http://www.sokox.com/blog/</link>
<description><![CDATA[编程，数据库，sql，学习，杂谈，小说]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[sevengo@163.com(小骇)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>电脑老窝</title>
	<url>http://www.sokox.com/blog/images/logos.gif</url>
	<link>http://www.sokox.com/blog/</link>
	<description>电脑老窝</description>
</image>

			<item>
			<link>http://www.sokox.com/blog/article/database/157.htm</link>
			<title><![CDATA[MSSQLServer求相邻两行时间差的问题]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Sun,10 May 2009 23:03:56 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=157</guid>
		<description><![CDATA[表概况： <br/>&nbsp;&nbsp;.....交易时间...........当前余额..... <br/>.....(1)xxxx-xx-xx ........40000.0..... <br/>.....(2)xxxx-xx-xx.........30000.0..... <br/>.....(3)xxxx-xx-xx.........20000.0..... <br/>.....(4)xxxx-xx-xx.........10000.0..... <br/><br/>大概是这种情况，我想求相邻两行的 交易时间 的差，注意是相邻两行，然后用40000.0×时间(2)与时间(1)的差×日利率=利息。 <br/><br/>解决方法：<br/>--id为(1),(2)列行字段<br/><br/>sel&#101;ct datadiff(dd,a.交易时间,b.交易时间)<br/>from tableName a <br/>left join tableName b on a.id = b.id+1<br/><br/>存储过程：<br/>declare @t table(id int,d datetime,v float)<br/>ins&#101;rt into @t sel&#101;ct 1,&#39;2008-01-05&#39;,4000<br/>ins&#101;rt into @t sel&#101;ct 2,&#39;2008-01-03&#39;,2000<br/>ins&#101;rt into @t sel&#101;ct 3,&#39;2008-01-02&#39;,1000<br/><br/>declare @利率 float<br/>set @利率=0.03<br/>sel&#101;ct a.*,a.v*datediff(d,b.d,a.d)*@利率 from @t a left join @t b on a.id=b.id-1<br/>/*<br/>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>----------- ----------------------- ---------------------- ----------------------<br/>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008-01-05 00:00:00.000 4000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 240<br/>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008-01-03 00:00:00.000 2000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 60<br/>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008-01-02 00:00:00.000 1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL<br/>*/<br/>或<br/>cr&#101;ate table tbf(id int,tim varchar(10),acc decimal(22,4))<br/>ins&#101;rt into tbf values(1,&#39;2009/01/01&#39;,40000)<br/>ins&#101;rt into tbf values(2,&#39;2009/02/01&#39;,30000)<br/>ins&#101;rt into tbf values(3,&#39;2009/03/01&#39;,20000)<br/>ins&#101;rt into tbf values(4,&#39;2009/04/01&#39;,10000)<br/>ins&#101;rt into tbf values(5,&#39;2009/04/07&#39;,60000)<br/><br/><br/>sel&#101;ct datediff(dd,a.tim,b.tim),a.*<br/>from tbf a <br/>left join tbf b on a.id = b.id+1<br/><br/>dro&#112; table tbf<br/>/*<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tim&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acc<br/>----------- ----------- ---------- ---------------------------------------<br/>NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009/01/01 40000.0000<br/>-31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009/02/01 30000.0000<br/>-28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009/03/01 20000.0000<br/>-31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009/04/01 10000.0000<br/>-6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009/04/07 60000.0000<br/><br/>(5 行受影响)<br/><br/>*/<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/147.htm</link>
			<title><![CDATA[SQL 日期函数总结]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,09 Feb 2009 13:35:19 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=147</guid>
		<description><![CDATA[日期用到的，即全拼和缩写都可以放到参数里面表达<br/>Year Yy yyyy 年 1753 ~ 9999 <br/>Quarter Qq q&nbsp;&nbsp; 季 1 ~ 4 <br/>Month Mm m&nbsp;&nbsp; 月1 ~ 12 <br/>Day of year Dy y 一年的日数,一年中的第几日 1-366 <br/>Day Dd d&nbsp;&nbsp; 日，1-31 <br/>Weekday Dw w 一周的日数，一周中的第几日 1-7 <br/>Week Wk ww 周，一年中的第几周 0 ~ 51 <br/>Hour Hh h&nbsp;&nbsp; 时0 ~ 23 <br/>Minute Mi n 分钟0 ~ 59 <br/>Second Ss s 秒 0 ~ 59 <br/>Millisecond Ms - 毫秒 0 ~ 999 <br/>========================================================<br/>1: getdate()函数<br/>返回当前时间<br/>sel&#101;ct getdate()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>------------------------------------------------------ <br/>2009-02-05 11:18:39.770<br/><br/>（所影响的行数为 1 行）<br/><br/>==========================================================<br/>2：dateadd函数<br/>第一个参数是要添加的类型，比如MM，第二个参数你要添加多少，第三个是你要往哪里添加<br/>Sel&#101;ct DATEADD(m,2,&#39;2004-1-1&#39;)[DATELIHAN]<br/>DATELIHAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>------------------------------------------------------ <br/>2004-03-01 00:00:00.000<br/><br/>（所影响的行数为 1 行）<br/><br/>Sel&#101;ct DATEADD(YY,1,&#39;2004-1-1&#39;)[DATELIHAN]<br/>DATELIHAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>------------------------------------------------------ <br/>2005-01-01 00:00:00.000<br/><br/>（所影响的行数为 1 行）<br/>===================================================================================<br/>3:datediff函数<br/>返回参数二与参数三两个日期之间的差值 参数三-参数二 返回类型为参数一<br/>sel&#101;ct datediff(dd,&#39;2009-12-27&#39;,&#39;2009-12-25&#39;)[DATELIHAN]<br/>DATELIHAN&nbsp;&nbsp; <br/>----------- <br/>-2<br/><br/>（所影响的行数为 1 行）<br/>sel&#101;ct datediff(yy,&#39;2007-12-27&#39;,&#39;2009-12-25&#39;)[DATELIHAN]<br/>DATELIHAN&nbsp;&nbsp; <br/>----------- <br/>2<br/><br/>（所影响的行数为 1 行）<br/>=================================================================================<br/>4：datepart函数<br/>返回参数二中对应的参数一的值<br/>sel&#101;ct datepart(mm,&#39;2008-08-07&#39;)[月份]<br/>sel&#101;ct datepart(yy,&#39;2008-08-07&#39;)[年份]<br/>月份&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>----------- <br/>8<br/><br/>（所影响的行数为 1 行）<br/><br/>年份&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>----------- <br/>2008<br/><br/>（所影响的行数为 1 行）<br/><br/>========================================================================================<br/>5：datename函数<br/>返回代表指定日期的指定日期部分的字符串<br/>Sel&#101;ct datename(weekday, &#39;2009-10-15&#39;) [星期]<br/>星期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>------------------------------ <br/>星期四<br/><br/>（所影响的行数为 1 行）<br/><br/>=======================================================================================<br/><br/>6:day函数<br/>返回一个整数，表示参数指定的 date 是该月份的哪一天<br/>sel&#101;ct day(&#39;2009-2-5&#39;)[第几天]<br/>第几天&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>----------- <br/>5<br/><br/>（所影响的行数为 1 行）<br/>=========================================================================================<br/><br/>7：month函数<br/>返回一个整数，表示指定参数的 date 是该年的哪一月<br/>Sel&#101;ct month(&#39;2007-04-30&#39;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>----------- <br/>4<br/><br/>（所影响的行数为 1 行）<br/>=================================================================================<br/><br/>8：year函数<br/>返回一个整数，表示参数指定的 date 是哪一年<br/>Sel&#101;ct year(&#39;2007-04-30&#39;);<br/>----------- <br/>2007<br/><br/>（所影响的行数为 1 行）<br/>============================================================================<br/>例如想要查询距离现在10天以内的记录<br/>sel&#101;ct * from tablename wh&#101;re datediff(day,你的日期字段，getdate())&lt;10<br/>例如想查询一段时间内的记录<br/>sel&#101;ct * from talbename wh&#101;re 你的日期字段 between 日期一 and 日期二<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/130.htm</link>
			<title><![CDATA[通过日志恢复MS SQL数据案例]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Sun,01 Feb 2009 14:52:23 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=130</guid>
		<description><![CDATA[【导读】本文介绍通过日志恢复MS SQL数据案例，以数据库的故障恢复改为非简单模式，去掉自动关闭和自动收缩两个选项为前提。<br/><br/>前提条件是数据库的故障恢复改为非简单模式，去掉自动关闭和自动收缩两个选项。<br/><br/>1、创建一个数据库test 创建时间为2006-11-18 09：40 <br/><br/>2、对数据库进行备份，备份时间为2006-11-18 09：42<br/><br/>语句如下：<br/><br/>backup database test to disk=&#39;d:&#34;database&#34;test.bak&#39; with init<br/><br/>提示：<br/><br/>已处理 216 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test&#39;（位于文件 1 上）。<br/><br/>已处理 1 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>BACKUP DATABASE 操作成功地处理了 217 页，花费了 0.191 秒（9.269 MB/秒）。<br/><br/>3、2006-11-18 09：44 对数据库进行操作删除和新增，我这边对客户资料进行删除和新增操作<br/><br/>原始的记录为<br/><br/><br/><br/>修改完后的记录为<br/><br/>下面开始还原操作<br/><br/>4、备分日志：现在时间是2006-11-18 09：47<br/><br/>语句如下：<br/><br/>BACKUP LOG test TO DISK=&#39;d:&#34;database&#34;0611180947.logs&#39; WITH INIT<br/><br/>提示：<br/><br/>已处理 4 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>BACKUP LOG 操作成功地处理了 4 页，花费了 0.104 秒（0.275 MB/秒）。<br/><br/>5、恢复之前数据库备份文件test.bak,使用WITH NORECOVERY参数：<br/><br/>RESTORE DATABASE test from disk=&#39;d:&#34;database&#34;test.bak&#39; WITH NORECOVERY<br/><br/>提示：<br/><br/>已处理 216 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test&#39;（位于文件 1 上）。<br/><br/>已处理 1 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>RESTORE DATABASE 操作成功地处理了 217 页，花费了 0.352 秒（5.029 MB/秒）。<br/><br/>6、使用日志恢复数据库到时间为2006-11-18 09:43，即恢复09：44分的删除和新增操作<br/><br/>RESTORE LOG test FROM disk=&#39;d:&#34;database&#34;0611180947.logs&#39; WITH RECOVERY,STOPAT=&#39;11/18/2006 09:43&#39;<br/><br/>提示：<br/><br/>已处理 4 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>RESTORE LOG 操作成功地处理了 4 页，花费了 0.016 秒（1.792 MB/秒）。<br/><br/>至此，再进入到软件中，可以看到，数据已经还原到原来的状态了<br/><br/>Re<br/><br/> 利用事务日志来恢复Up&#100;ate、Del&#101;te误操作引起的数据丢失方法一（只有 sysadmin 固定服务器角色的成员才能执行以下操作）： <br/>1如果误操作之前存在一个完全备份（或已有多个差异备份或增量备份），首先要做的事就是进行一次日志备份（如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那就没有办法了） <br/>backup log dbname to disk=&#39;filename&#39; <br/>执行后在你mssql目录的backup文件夹里就有一个文件，名叫：filename <br/>2恢复一个完全备份，注意需要使用with norecovery，如果还有其他差异或增量备份，则逐个恢复。 <br/>restore database dbname from disk=&#39;filename&#39; with norecovery（,move…） <br/>当然如果在恢复之前你mssql里的data文件夹里有同名的.mdf或.ldf文件，你要先执行sp_detach_db &#39;dbname&#39;，然后将同名的.mdf或.ldf文件剪切出data文件夹，不然会报错；或者你在restore database时用move参数(restore filelistonly from disk=’以前文件备份的路径和名称’，得到逻辑文件名，move ‘逻辑文件名’ to ‘一个新路径’)，将物理文件（.mdf或.ldf）存放到不同的文件夹。 <br/>3恢复最后一个日志备份即刚做的日志备份，指定恢复时间点到误操作之前的时刻 <br/>restore log dbname from disk=&#39;filename&#39; <br/>with recovery,stopat=&#39;date_time&#39; <br/>这里的date_time时间格式用datetime格式。 <br/>当然，如果误操作是一些不记日志的操作比如truncate table，sel&#101;ct into等操作，那么是无法利用上述方法来恢复数据的。 <br/>方法二： <br/>用SQL Server Log explorer这样一个软件来逆操作 <br/>确保企业资料的可用度、整合性与高安全，绝对是项艰钜的任务。要完成这项任务，您必须具备迅速解决 <br/>使用者端或应用程式问题的能力。一般企业最常见的问题不外乎资料方面发生错误，要迅速而轻松地解决这些问题，您得随时检视、分析哪些资料发生异动？异动作业又是由谁进行的。此外，您还必须清楚是谁对资料纲要(Schema)及权限(Permission)执行了异动。最後，您更可以跨越备份复原的繁琐程序，轻松完成资料复原。 <br/>要满足上述需求，惟有运用隐藏在交易记录档(Transaction Log)中的资讯，而Log Explorer的强大功能正能协助您达成这些任务。现在就让我们开始进入Log Explorer的神奇世界中。 <br/>Log Explorer 3.0 for Microsoft SQL Server强大功能包括有 : <br/>能够辨识任何资料纲要(Schema)及权限(Permission)的所有改变 <br/>能够依据交易记录档分析您的资料库 <br/>能够透过超强的过滤器迅速发掘并解决问题 <br/>不需运用trigger即可稽核资料 <br/>能够线上即时复原资料列甚或整个表 <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/106.htm</link>
			<title><![CDATA[使用以前的完全备份恢复数据库，并使其为日志恢复做好准备]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Fri,23 Jan 2009 17:54:48 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=106</guid>
		<description><![CDATA[RESTORE DATABASE db_a <br/>FILEGROUP=&#39;db_fg1&#39; <br/>FROM DISK=&#39;c:\db.bak&#39; <br/>WITH NORECOVERY,PARTIAL,<br/>MOVE &#39;db_data&#39; TO &#39;c:\db_data_a.mdf&#39;,<br/>MOVE &#39;db_log&#39; TO &#39;c:\db_log_a.ldf&#39;,<br/>MOVE &#39;db_fg1_data&#39; TO &#39;c:\db_fg1_data_a.ndf&#39;<br/><br/><br/><br/><br/>使用以前的完全备份恢复数据库，并使其为日志恢复做好准备。 <br/><br/>RESTORE DATABASE pubs FROM DISK = N&#39;C:\Backups\Fullbackup.bak&#39; WITH NORECOVERY <br/><br/>现在您可以将日志前滚到合适的时间点，并使数据库可供使用。请注意，STOPAT在数据库正在执行大容量日志时禁止执行。 <br/><br/>RESTORE LOG pubs FROM DISK=N&#39;C:\Backups\Logbackup.bak&#39; WITH RECOVERY,STOPAT=&#39;02/11/2002 17:35:00&#39; ]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/100.htm</link>
			<title><![CDATA[MySQL配置文件my.cnf设置]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Wed,21 Jan 2009 16:21:06 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=100</guid>
		<description><![CDATA[查看 MySQL Character Set Support ,你可能得到意外的收获.<br/><br/>　　正文:<br/><br/>　　设置建议:<br/><br/>　　对于单台运行的WEB服务器,建议加上:<br/><br/>　　skip-locking<br/><br/>　　skip-name-resolve<br/><br/>　　skip-networking<br/><br/>　　在PHP链接数据库时使用&#34;LOCALHOST&#34;.这样MySQL 客户端库将覆盖之并尝试连接到本地套接字.(<br/><br/>　　我们可以从PHP.INI中<br/><br/>　　代码:<br/><br/>　　; Default socket name for local MySQL connects. If empty, uses the built-in<br/><br/>　　; MySQL defaults.<br/><br/>　　mysql.default_socket = /tmp/mysql.sock看出 默认情况下 UNIX 将访问/tmp/mysql.sock)<br/><br/>　　以下是部分选项解释:<br/><br/>　　my.cnf默认是不存在的.你可以在/usr/local/share/mysql/下看到:<br/><br/>　　my-huge.cnf<br/><br/>　　my-innodb-heavy-4G.cnf<br/><br/>　　my-large.cnf<br/><br/>　　my-medium.cnf<br/><br/>　　my-small.cnf<br/><br/>　　等文件.将其中合适你机器配置的文件拷贝到/etc/my.cnf或mysql data目录/my.cnf(/var/db/mysql)下或~/.my.cnf.文件内都有详细的说明<br/><br/>　　[mysqld]<br/><br/>　　port = 3306<br/><br/>　　serverid = 1<br/><br/>　　socket = /tmp/mysql.sock<br/><br/>　　skip-locking<br/><br/>　　# 避免MySQL的外部锁定，减少出错几率增强稳定性。<br/><br/>　　skip-name-resolve<br/><br/>　　禁止MySQL对外部连接进行DNS解析，使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意，如果开启该选项，则所有远程主机连接授权都要使用IP地址方式，否则MySQL将无法正常处理连接请求!<br/><br/>　　back_log = 384<br/><br/>　　指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求，该参数生效，主线程花费很短的时间检查连接并且启动一个新线程。<br/><br/>　　back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接，则需要增大该参数的值，该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。<br/><br/>　　试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。<br/><br/>　　key_buffer_size = 256M<br/><br/>　　# key_buffer_size指定用于索引的缓冲区大小，增加它可得到更好的索引处理性能。<br/><br/>　　对于内存在4GB左右的服务器该参数可设置为256M或384M。<br/><br/>　　注意：该参数值设置的过大反而会是服务器整体效率降低!<br/><br/>　　max_allowed_packet = 4M<br/><br/>　　thread_stack = 256K<br/><br/>　　table_cache = 128K<br/><br/>　　sort_buffer_size = 6M<br/><br/>　　查询排序时所能使用的缓冲区大小。注意：该参数对应的分配内存是每连接独占!如果有100个连接，那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以，对于内存在4GB左右的服务器推荐设置为6-8M。<br/><br/>　　read_buffer_size = 4M<br/><br/>　　读查询操作所能使用的缓冲区大小。和sort_buffer_size一样，该参数对应的分配内存也是每连接独享!<br/><br/>　　join_buffer_size = 8M<br/><br/>　　联合查询操作所能使用的缓冲区大小，和sort_buffer_size一样，该参数对应的分配内存也是每连接独享!<br/><br/>　　myisam_sort_buffer_size = 64M<br/><br/>　　table_cache = 512<br/><br/>　　thread_cache_size = 64<br/><br/>　　query_cache_size = 64M<br/><br/>　　指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察：<br/><br/>　　代码:<br/><br/>　　# &gt; SHOW VARIABLES LIKE &#39;%query_cache%&#39;;<br/><br/>　　# &gt; SHOW STATUS LIKE &#39;Qcache%&#39;;如果Qcache_lowmem_prunes的值非常大，则表明经常出现缓冲不够的情况;<br/><br/>　　如果Qcache_hits的值非常大，则表明查询缓冲使用非常频繁，如果该值较小反而会影响效率，那么可以考虑不用查询缓冲;Qcache_free_blocks，如果该值非常大，则表明缓冲区中碎片很多。<br/><br/>　　tmp_table_size = 256M<br/><br/>　　max_connections = 768<br/><br/>　　指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示，则需要增大该参数值。<br/><br/>　　max_connect_errors = 10000000<br/><br/>　　wait_timeout = 10<br/><br/>　　指定一个请求的最大连接时间，对于4GB左右内存的服务器可以设置为5-10。<br/><br/>　　thread_concurrency = 8<br/><br/>　　该参数取值为服务器逻辑CPU数量×2，在本例中，服务器有2颗物理CPU，而每颗物理CPU又支持H.T超线程，所以实际取值为4 × 2 = 8<br/><br/>　　skip-networking<br/><br/>　　开启该选项可以彻底关闭MySQL的TCP/IP连接方式，如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/41.htm</link>
			<title><![CDATA[INNER JOIN和LEFT JOIN的区别详解]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,19 Jan 2009 16:18:47 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=41</guid>
		<description><![CDATA[Sel&#101;ct *<br/>FROM TableA<br/>INNER JOIN TableB<br/>ON TableA.ID = TableB.ID<br/>AND TableB.ID = 123<br/>Sel&#101;ct *<br/>FROM TableA<br/>LEFT JOIN TableB<br/>ON TableA.ID = TableB.ID<br/>AND TableB.ID = 123 区别<br/><br/>inner join on&nbsp;&nbsp;将2表所有行进行笛卡儿积后,取得符合条件的行组成from从句的中间结果表;<br/>left join on 表明,左表的所有行都必须出现在from从句的中间结果表中,首先:两表进行笛卡儿积.取得符合on条件的行,写入from从句的中间结果表.第二,不不符合条件的行就不取得,第三(因为有null,所以出现一种特殊的情况,即null值不能通过运算符来判断):左表中具有的数据行,在右表中为空的,将右表的列填充为null,然后将数据行写入中间结果表.<br/>笛卡尔积就是<br/>1&nbsp;&nbsp;3<br/>2&nbsp;&nbsp;4<br/>3<br/>笛卡儿积后<br/>1 3<br/>1 4<br/><br/>2 3<br/>2 4<br/><br/>3 3 <br/>3 4 <br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/38.htm</link>
			<title><![CDATA[压缩日志及数据库文件大小]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,19 Jan 2009 15:49:23 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=38</guid>
		<description><![CDATA[/*--特别注意<br/> 请按步骤进行,未进行前面的步骤,请不要做后面的步骤<br/> 否则可能损坏你的数据库.<br/>--*/<br/><br/>1.清空日志<br/> DUMP&nbsp;&nbsp;TRANSACTION&nbsp;&nbsp;库名&nbsp;&nbsp;WITH&nbsp;&nbsp;NO_LOG&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>2.截断事务日志：<br/> BACKUP LOG 数据库名 WITH NO_LOG<br/><br/>3.收缩数据库文件(如果不压缩,数据库的文件不会减小<br/> 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件<br/>&nbsp;&nbsp;--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了<br/>&nbsp;&nbsp;--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了<br/><br/> 也可以用SQL语句来完成<br/> --收缩数据库<br/> DBCC SHRINKDATABASE(客户资料)<br/> <br/> --收缩指定数据文件,1是文件号,可以通过这个语句查询到:sel&#101;ct * from sysfiles<br/> DBCC SHRINKFILE(1)<br/><br/>4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)<br/> a.分离数据库:<br/>&nbsp;&nbsp;企业管理器--服务器--数据库--右键--分离数据库<br/><br/> b.在我的电脑中删除LOG文件<br/><br/> c.附加数据库:<br/>&nbsp;&nbsp;企业管理器--服务器--数据库--右键--附加数据库<br/><br/> 此法将生成新的LOG，大小只有500多K<br/><br/> 或用代码： <br/> 下面的示例分离 pubs，然后将 pubs 中的一个文件附加到当前服务器。<br/> <br/> a.分离<br/> EXEC sp_detach_db @dbname = &#39;pubs&#39;<br/><br/> b.删除日志文件<br/> <br/> c.再附加<br/> EXEC sp_attach_single_file_db @dbname = &#39;pubs&#39;, <br/>&nbsp;&nbsp;&nbsp;&nbsp;@physname = &#39;c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf&#39;<br/><br/>5.为了以后能自动收缩,做如下设置:<br/> 企业管理器--服务器--右键数据库--属性--选项--选择&#34;自动收缩&#34;<br/> <br/> --SQL语句设置方式:<br/> EXEC sp_dboption &#39;数据库名&#39;, &#39;autoshrink&#39;, &#39;TRUE&#39; <br/><br/>6.如果想以后不让它日志增长得太大<br/> 企业管理器--服务器--右键数据库--属性--事务日志<br/>&nbsp;&nbsp;--将文件增长限制为xM(x是你允许的最大数据文件大小)<br/><br/> --SQL语句的设置方式:<br/> alt&#101;r database 数据库名 modify file(name=逻辑文件名,maxsize=20)<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/37.htm</link>
			<title><![CDATA[差量，完整备份数据库方法]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,19 Jan 2009 15:37:12 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=37</guid>
		<description><![CDATA[完全<br/><br/>backup&nbsp;&nbsp; database abc to&nbsp;&nbsp; disk=&#39;E:\bak\abc_db.bak&#39;<br/><br/><br/><br/>差量<br/><br/>backup&nbsp;&nbsp; database abc to&nbsp;&nbsp; disk=&#39;E:\bak\abc_db.bak&#39; WITH&nbsp;&nbsp; DIFFERENTIAL<br/><br/><br/><br/><br/><br/>备份日志<br/>backup log abc to&nbsp;&nbsp; disk=&#39;E:\bak\abc_log.bak&#39; WITH NO_TRUNCATE<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/29.htm</link>
			<title><![CDATA[SQL Server2000数据库文件损坏时如何恢复]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,19 Jan 2009 11:55:01 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=29</guid>
		<description><![CDATA[SQL Server2000数据库文件损坏时如何恢复&nbsp;&nbsp;<br/> <br/> <br/><br/>SQL Server2000中，如果数据库文件（非系统数据库文件）遇到错误的时候，我们该怎么办。以下是笔者以前的笔记。仅适用于非master,msdb的数据库。<br/><br/><br/>说明如下：<br/><br/>1 建一个测试数据库test(数据库类型为完全)<br/><br/>2 建一个表，插入点记录<br/><br/>cr&#101;ate table a(c1 varchar(2))<br/><br/>go<br/><br/>ins&#101;rt into a values(&#39;aa&#39;)<br/><br/>go<br/><br/>ins&#101;rt into a values(&#39;bb&#39;)<br/><br/>go<br/><br/>3 作完全备份，到文件test_1.bak<br/><br/>4 在作一点修改<br/><br/>ins&#101;rt into a values(&#39;cc&#39;)<br/><br/>go<br/><br/>cr&#101;ate table b(c1 int)<br/><br/>go<br/><br/>ins&#101;rt into b values(1)<br/><br/>go<br/><br/>ins&#101;rt into b values(2)<br/><br/>go<br/><br/>5 shutdown 数据库服务器<br/><br/>6 用ultraedit编辑数据库文件test_data.mdf,随便修改点字节内容,相当于数据库遭到致命的损坏。<br/><br/>7 启动数据库，并且运行企业管理器，点开数据库，看到test变成灰色，而且显示置疑。<br/><br/>8 运行isql -SLocalhost -Usa -P<br/><br/>1&gt; backup log test TO DISK=&#39;D:Program FilesMicrosoft SQL ServerMSSQLBACKUP <br/><br/>est_2.bak&#39; WITH NO_TRUNCATE<br/><br/>2&gt;go<br/><br/>已处理 2 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;TEST_Log&#39;（位于文件 1 上）。<br/><br/>BACKUP LOG 操作成功地处理了 2 页，花费了 0.111 秒（0.087 MB/秒）。<br/><br/>9 进行恢复最老的完全备份<br/><br/>1&gt; RESTORE DATABASE test FROM DISK=&#39;D:Program FilesMicrosoft SQL ServerMSSQL<br/><br/>BACKUP est_1.bak&#39; WITH NORECOVERY<br/><br/>2&gt; go<br/><br/>已处理 96 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;TEST_Data&#39;（位于文件 1 上）。<br/><br/>已处理 1 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;TEST_Log&#39;（位于文件 1 上）。<br/><br/>RESTORE DATABASE 操作成功地处理了 97 页，花费了 0.107 秒（7.368 MB/秒）。<br/><br/>10 恢复最近的日志<br/><br/>1&gt; RESTORE LOG test FROM DISK=&#39;D:Program FilesMicrosoft SQL ServerMSSQLBACKU<br/><br/>P est_2.bak&#39; WITH RECOVERY<br/><br/>2&gt; go<br/><br/>已处理 2 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;TEST_Log&#39;（位于文件 1 上）。<br/><br/>RESTORE LOG 操作成功地处理了 2 页，花费了 0.056 秒（0.173 MB/秒）。<br/><br/>数据已经完全恢复了，可以使用了。<br/><br/>sel&#101;ct * from a<br/><br/>go<br/><br/>总结，DBA应该有一个完善的数据库备份计划。本例中，如果没有一个完全备份的话，数据库的恢复就不可能 <br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sokox.com/blog/article/database/24.htm</link>
			<title><![CDATA[通过日志恢复MS SQL数据案例 ]]></title>
			<author>sevengo@163.com(小骇)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,19 Jan 2009 11:19:40 +0800</pubDate>
			<guid>http://www.sokox.com/blog/default.asp?id=24</guid>
		<description><![CDATA[【导读】本文介绍通过日志恢复MS SQL数据案例，以数据库的故障恢复改为非简单模式，去掉自动关闭和自动收缩两个选项为前提。<br/><br/>前提条件是数据库的故障恢复改为非简单模式，去掉自动关闭和自动收缩两个选项。<br/><br/>1、创建一个数据库test 创建时间为2006-11-18 09：40 <br/><br/>2、对数据库进行备份，备份时间为2006-11-18 09：42<br/><br/>语句如下：<br/><br/>backup database test to disk=&#39;d:&#34;database&#34;test.bak&#39; with init<br/><br/>提示：<br/><br/>已处理 216 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test&#39;（位于文件 1 上）。<br/><br/>已处理 1 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>BACKUP DATABASE 操作成功地处理了 217 页，花费了 0.191 秒（9.269 MB/秒）。<br/><br/>3、2006-11-18 09：44 对数据库进行操作删除和新增，我这边对客户资料进行删除和新增操作<br/><br/>原始的记录为<br/><br/><img src="http://www.sokox.com/blog/attachments/month_0901/q2009119111742.jpg" border="0" alt=""/><br/><br/>修改完后的记录为<br/><img src="http://www.sokox.com/blog/attachments/month_0901/p200911911197.gif" border="0" alt=""/><br/><br/><br/>下面开始还原操作<br/><br/>4、备分日志：现在时间是2006-11-18 09：47<br/><br/>语句如下：<br/><br/>BACKUP LOG test TO DISK=&#39;d:&#34;database&#34;0611180947.logs&#39; WITH INIT<br/><br/>提示：<br/><br/>已处理 4 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>BACKUP LOG 操作成功地处理了 4 页，花费了 0.104 秒（0.275 MB/秒）。<br/><br/>5、恢复之前数据库备份文件test.bak,使用WITH NORECOVERY参数：<br/><br/>RESTORE DATABASE test from disk=&#39;d:&#34;database&#34;test.bak&#39; WITH NORECOVERY<br/><br/>提示：<br/><br/>已处理 216 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test&#39;（位于文件 1 上）。<br/><br/>已处理 1 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>RESTORE DATABASE 操作成功地处理了 217 页，花费了 0.352 秒（5.029 MB/秒）。<br/><br/>6、使用日志恢复数据库到时间为2006-11-18 09:43，即恢复09：44分的删除和新增操作<br/><br/>RESTORE LOG test FROM disk=&#39;d:&#34;database&#34;0611180947.logs&#39; WITH RECOVERY,STOPAT=&#39;11/18/2006 09:43&#39;<br/><br/>提示：<br/><br/>已处理 4 页，这些页属于数据库 &#39;test&#39; 的文件 &#39;test_log&#39;（位于文件 1 上）。<br/><br/>RESTORE LOG 操作成功地处理了 4 页，花费了 0.016 秒（1.792 MB/秒）。<br/><br/>至此，再进入到软件中，可以看到，数据已经还原到原来的状态了<br/><br/>Re<br/><br/> 利用事务日志来恢复Up&#100;ate、Del&#101;te误操作引起的数据丢失方法一（只有 sysadmin 固定服务器角色的成员才能执行以下操作）： <br/>1如果误操作之前存在一个完全备份（或已有多个差异备份或增量备份），首先要做的事就是进行一次日志备份（如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那就没有办法了） <br/>backup log dbname to disk=&#39;filename&#39; <br/>执行后在你mssql目录的backup文件夹里就有一个文件，名叫：filename <br/>2恢复一个完全备份，注意需要使用with norecovery，如果还有其他差异或增量备份，则逐个恢复。 <br/>restore database dbname from disk=&#39;filename&#39; with norecovery（,move…） <br/>当然如果在恢复之前你mssql里的data文件夹里有同名的.mdf或.ldf文件，你要先执行sp_detach_db &#39;dbname&#39;，然后将同名的.mdf或.ldf文件剪切出data文件夹，不然会报错；或者你在restore database时用move参数(restore filelistonly from disk=’以前文件备份的路径和名称’，得到逻辑文件名，move ‘逻辑文件名’ to ‘一个新路径’)，将物理文件（.mdf或.ldf）存放到不同的文件夹。 <br/>3恢复最后一个日志备份即刚做的日志备份，指定恢复时间点到误操作之前的时刻 <br/>restore log dbname from disk=&#39;filename&#39; <br/>with recovery,stopat=&#39;date_time&#39; <br/>这里的date_time时间格式用datetime格式。 <br/>当然，如果误操作是一些不记日志的操作比如truncate table，sel&#101;ct into等操作，那么是无法利用上述方法来恢复数据的。 <br/>方法二： <br/>用SQL Server Log explorer这样一个软件来逆操作 <br/>确保企业资料的可用度、整合性与高安全，绝对是项艰钜的任务。要完成这项任务，您必须具备迅速解决 <br/>使用者端或应用程式问题的能力。一般企业最常见的问题不外乎资料方面发生错误，要迅速而轻松地解决这些问题，您得随时检视、分析哪些资料发生异动？异动作业又是由谁进行的。此外，您还必须清楚是谁对资料纲要(Schema)及权限(Permission)执行了异动。最後，您更可以跨越备份复原的繁琐程序，轻松完成资料复原。 <br/>要满足上述需求，惟有运用隐藏在交易记录档(Transaction Log)中的资讯，而Log Explorer的强大功能正能协助您达成这些任务。现在就让我们开始进入Log Explorer的神奇世界中。 <br/>Log Explorer 3.0 for Microsoft SQL Server强大功能包括有 : <br/>能够辨识任何资料纲要(Schema)及权限(Permission)的所有改变 <br/>能够依据交易记录档分析您的资料库 <br/>能够透过超强的过滤器迅速发掘并解决问题 <br/>不需运用trigger即可稽核资料 <br/>能够线上即时复原资料列甚或整个表 <br/><br/><br/>]]></description>
		</item>
		
</channel>
</rss>
