http://www.downcc.com/数据库类zh-cnhttp://www.downcc.comCopyright 2023 http://www.downcc.com, All Rights Reserved2020/04/17 18:51:32http://www.downcc.com/tech/4113.htmlSQL Server2020/04/17 18:51:32<p>  听闻2012比以前的2008R2那些版本做了很大的升级,而且在于性能上更是采用了前沿技术&amp;mdash;&amp;mdash;列存储,是的SQL Server的读取速度上有了几十至上百倍的提升。对于这个全新的产品,已经装了有一段日子啦,使用了一下,感觉真的是比较的强,这次微软看来真的是做了很大的动作和花了很多的构思。</p><p>  最近老是有朋友问我SQL Server安装总是出错,安装不上啊等等信息,今天把我安装和测试得到的一些经验分享给需要的朋友。</p><p>  提醒:</p><p>  1、如果你的OS是win7或者win2008+等,这些需要打上SP1的补丁才可以安装(安装前SQL也会检查一下,他会提示你的),否则将无法安装<br/>  2、如果<strong>Visual Studio 2010 Sp1、SQL Server 2008 r2 Sp1</strong>这些补丁,那么最好安装前卸载它,否则会安装失败的。(别人的经验之谈)</p><p>  附上补丁连接:win7系统SP1</p><p>win7 sp1 64位:<a href="http://www.downcc.com/soft/9301.html" target="_blank" textvalue="http://www.downcc.com/soft/9301.html">http://www.downcc.com/soft/9301.html</a></p><p>win7 sp1 32位:<a href="http://www.downcc.com/soft/9300.html" target="_blank" textvalue="http://www.downcc.com/soft/9300.html">http://www.downcc.com/soft/9300.html</a></p><p>  具体步骤如下:</p><p>  1)、看来这个界面还是没有改变的,和以前的一样,选择[安装]选项卡,点击[全新SQL Server 独立安装或向现有安装添加功能]。</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292817494.png"/></p><p>  2)、和以往一样,循例检查一些系统各项配置是否正确。</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292817416.png"/></p><p>  3)、输入产品密钥,后面几步骤都和以前的一样,直接下一步就可以。</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292817442.png"/></p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292817122.png"/></p><p>  4)、在此之前将会出现一个下载的界面,那只是在检查对应所需的组件是否有需要更新的,很快就会过去;当前你也可以在安装前把网断开,这样就不会下载那些更新啦。</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292817180.png"/></p><p>  5)、选择[SQL Server 功能安装]</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818209.png"/></p><p>  6)、选择你对应要安装的功能即可</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818674.png"/></p><p>  7)、检查必要的检查,如果没有安装.NET Freamework 3.5SP1以上,这是先决条件</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818346.png"/></p><p>  8)、取个实例名,这次看起来好多啦,下方可以看到本机安装过的那些实例。</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818272.png"/></p><p>  9)、后面都是和以往一样的步骤</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818490.png"/></p><p>  设置服务的启动类型,当然如果你不喜欢他们开机启动可以设置为手动</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818437.png"/></p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818425.png"/></p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818389.png"/></p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818212.png"/></p><p>  SQL 2012 的新功能,分布式回放设置,这个功能还没有见识过。</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818654.png"/></p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818226.png"/></p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818129.png"/></p><p>  OK,安装大约会持续40-60分钟吧。</p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818655.png"/></p><p>  <img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818580.png"/></p><p>  看看他的新界面吧,很熟悉是吧,我老早就想要这个界面啦,SQL 08做BI的时候就想为什么不是10的界面,现在终于实现啦。</p><p>  <img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292818875.png"/></p><p>  <img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/20128292819725.png"/></p><p>  安装的大致过程就是这样</p>http://www.downcc.com/tech/5127.htmlAccess2020/04/08 11:48:51<p>asp.net网站用的access数据。老发生错误,错误提示如下:</p><h3>未在本地计算机上注册&quot;microsoft.ACE.oledb.12.0&quot;提供程序。</h3><p><strong>说明:</strong> 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。</p><p><strong>异常详细信息:</strong> System.InvalidOperationException: 未在本地计算机上注册&quot;microsoft.ACE.oledb.12.0&quot;提供程序。<br/></p><p><strong><span style="color:#ff0000">解决方法:</span></strong></p><p>下载2007 Office system 驱动程序:数据连接组件安装</p><p><a href="http://www.downcc.com/soft/12343.html" target="_blank" textvalue="http://www.downcc.com/soft/12343.html">http://www.downcc.com/soft/12343.html</a></p><p>下载地址是连接到微软网站,请放心下载</p>http://www.downcc.com/tech/3372.htmlMySQL2017/10/21 22:48:48<p><strong>方法1: 用SET PASSWORD命令</strong>< br/>首先登录MySQL。< br/>格式:mysql&gt; set password for 用户名@localhost = password(&#39;新密码&#39;);< br/>例子:mysql&gt; set password for root@localhost = password(&#39;123&#39;);< br/><br/><strong>方法2:用mysqladmin</strong>< br/>格式:mysqladmin -u用户名 -p旧密码 password 新密码< br/>例子:mysqladmin -uroot -p123456 password 123< br/><br/><strong>方法3:用UPDATE直接编辑user表</strong>< br/>首先登录MySQL。< br/>mysql&gt; use mysql;< br/>mysql&gt; update user set password=password(&#39;123&#39;) where user=&#39;root&#39; and host=&#39;localhost&#39;;< br/>mysql&gt; flush privileges;< br/><br/><strong>方法4:在忘记root密码的时候,可以这样</strong>< br/><strong>以windows为例:</strong>< br/>1. 关闭正在运行的MySQL服务。< br/>2. 打开DOS窗口,转到mysql\bin目录。< br/>3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。< br/>4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。< br/>5. 输入mysql回车,如果成功,将出现MySQL提示符& gt;。< br/>6. 连接权限数据库: use mysql; 。< br/>6. 改密码:update user set password=password(&quot;123&quot;) where user=&quot;root&quot;;(别忘了最后加分号) 。< br/>7. 刷新权限(必须步骤):flush privileges; 。< br/>8. 退出 quit。< br/>9. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。</p>http://www.downcc.com/tech/3940.htmlMySQL2017/10/21 22:36:16<p>最近整服务器,搞的头大,MYSQL想修改下data目录,功夫不负有心人,最后被我搞定了,分享下方法给大家!</p><p>更改默认的mysql数据库目录</p><p>将 C:\ProgramData\MySQL\MySQL Server 5.1\data 改到 D:\MysqlData</p><p>1. 建立文件夹 D:\MysqlData</p><p>2. 停止 mysql 服务,将& quot;C:\ProgramData\MySQL Server 5.1\data&quot; 所有文件,拷贝到 D:\MysqlData</p><p>3. 在 mysql 安装目录找到 my.ini文件,找到:</p><p>#Path to the database root<br/>#datadir=&quot;C:/ProgramData/MySQL/MySQL Server 5.1/Data/&quot;</p><p>将datadir的值改为: datadir=&quot;D:/MysqlData/&quot;</p><p>保存后,重新启动mySQL服务即可。</p><p><span style="color: #ff0000">注:C:\ProgramData 目录是隐藏文件夹,可以文件选项中取消勾选 “不显示隐藏文件...”</span></p>http://www.downcc.com/tech/5262.htmlSQL Server2015/12/11 22:22:41<p><strong>2000w数据怎么打开?bak文件怎么打开?</strong></p><p>首先这个bak文件是SQL数据库的备份文件,要使用SQL恢复然后就可以查询了</p><p>找到需要的文件</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/201310211017790010.jpg"/></p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110172410237.jpg"/></p><p>注意解压出来有7GB+</p><p>1、下载SQL server 2012 express(带管理器)</p><p>2、安装上那个&quot;全新安装&quot;;</p><p>3、打开 SQL server management studio</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/201310211018157426.jpg"/></p><p>4、右键点击红圈圈&quot;数据库&quot;-----&quot;还原数据库&quot;;</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110184473942.jpg"/></p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110184840320.jpg"/></p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110185142957.jpg"/></p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/201310211019516896.jpg"/></p><p>确定导入---等待完成</p><p>然后就会出现这个数据库</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110194960251.jpg"/></p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/201310211020222709.jpg"/></p><p>右键,点击显示前1000行,右侧就会出现如图</p><p>可以看见使用这些代码就可以显示出1000行的信息</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110204597060.jpg"/></p><p>那么我们就去掉 那个 top 1000</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/201310211021823284.jpg"/></p><p>变成这样</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110214051228.jpg"/></p><p>然后最关键的</p><p>在最下面加入</p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110232149079.png"/></p><p><img border="0" alt="2000w数据怎么打开?bak文件怎么打开?" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-4/2013102110234156975.jpg"/></p><p>点击&quot;执行&quot;;</p><p>下面就会出现结果</p><p>我用ssd来搜索,大概要10秒完成检索,所以各位自己掂量吧。</p>http://www.downcc.com/tech/5432.htmlSQL Server2015/05/05 11:45:42<p><strong>SQL Server错误15023:当前数据库中已存在用户或角色</strong></p><p>在把远程服务器上的数据库备份还原到本地机后, 给一个&quot;登录&quot;关联一个&quot;用户&quot;时(用户映射),发生错误: “错误15023:当前数据库中已存在用户或角色”</p><p><img alt="SQL Server 错误:15023(创建对于用户失败)" src="http://pic.pdowncc.com/upload/2015-5/2015050511435047663.png" width="503" height="96"/></p><p><strong>原因:</strong></p><p>sql server中“登录”与“用户”的区别,“登录”用于用户身份验证,而数据库“用户”帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在“孤立用户”。此时是不能通过新建登录或者是对同名登录授予对应数据库的“用户”权限来解决登录问题,因为SQL Server会报出“错误15023:当前数据库中已存在用户或角色”</p><p><strong>解决:</strong></p><p>为了解决这个问题,需要调用系统存储过程sp_change_users_login,具体用法如下:</p><p>Use Northwind<br/>go<br/>sp_change_users_login& #39;update_one&#39;,& #39;test&#39;,& #39;test&#39;<br/>其中Northwind为存在孤立用户的数据库,update_one是存储过程的参数,表示只处理一个用户,前一个test是“用户”,后一个test是“登录”,以上这个SQL表示将服务器登录“test”与 Northwind 数据库用户“test”重新连接起来。这样就可以正常使用数据库了。</p>http://www.downcc.com/tech/4117.htmlSQL Server2015/04/05 17:12:57<p>在MS SQL 中经常会造成 xxxx_log.ldf 超级大的情况</p><p>通通是几十个G到上百个G造成服务器硬盘空间不够,我们可以通过以下办法来清下数据库日志。</p><p>一用专门的清理工具自动来清理</p><p style="text-indent: 0px; text-align: center;"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/soft/UploadPic/2012-8/2012861112352053.jpg"/></p><p><br/></p><table style="BORDER-BOTTOM: 0px; TEXT-ALIGN: left; BORDER-LEFT: 0px; LINE-HEIGHT: 18px; MARGIN: 10px auto; BORDER-SPACING: 1px; WIDTH: 400px; BORDER-COLLAPSE: separate; BACKGROUND: #000; COLOR: #333; FONT-SIZE: 12px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" cellspacing="1"><tbody><tr class="firstRow"><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; WIDTH: 100px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #ffffff; PADDING-TOP: 8px">软件名称:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">SQL日志清理工具</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">软件版本:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">绿色版</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">软件大小:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">315KB</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">软件语言:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">中文</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">适用平台:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">WinXP, WinAll</td></tr></tbody></table><p>下载地址:<a style="COLOR: #d50000; FONT-WEIGHT: bold; TEXT-DECORATION: underline" href="http://www.downcc.com/soft/10995.html">SQL日志清理工具</a></p><p>这个是绿色资源网小编用得最多的一个工具了,大部份情况下都可以清理成功,但极小数情况下无法清理。</p><p>如果上面的方法无法清理可以试试下面的方法:</p><p><strong>可以试试下面的方法:</strong></p><p>1、数据库属性〉〉选项〉〉恢复模式〉〉更改到简单模式<br/>2、收缩数据库<br/>3、数据库属性〉〉选项〉〉恢复模式〉〉更改到完整模式</p>http://www.downcc.com/tech/4335.htmlSQL Server2015/04/04 23:47:03<p>本方法主要是解决SQL Server运行过程中出现的“本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的”解决方法。</p><p>笔者ASP运行环境:操作系统为Windows XP SP2,IIS的版本为默认的5.1,数据库为SQL Server 2005(MDAC版本为2.8)</p><p>一、出现“本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的”</p><p>1.开始--&gt;管理管理工具--&gt;服务</p><p>2.启动SQL Server(MSSQLSERVER ) 3.出现“本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的”</p><p>二、解决“本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的”</p><p>1.打开SQL Server 2005中的配置工具SQL Server Configure Manager,将VIA协议禁用</p><p>2.重新启动SQL Server(MSSQLSERVER ),成功 “本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的”解决!</p>http://www.downcc.com/tech/4275.htmlMySQL2015/04/04 23:44:10<p>在ubuntu下安装了mysql 5 server,结果不知道什么原因,安装时输入的root帐号密码在使用时无论如何都不能通过数据库服务器的验证。无奈只有重置mysql的root帐号密码。查了一下,用了以下方法成功的重置了root帐号密码<br/><br/>ubuntu下安装了mysql5 server 忘记了root密码怎么办?怎样重置root密码呢?</p><p>停止mysql服务:</p><p>代码如下:</p><pre>root@webserver:/home/webmaster#&nbsp;service&nbsp;mysql&nbsp;stop</pre><p>接着采用忽略密码认证模式重新创建一个mysql服务:</p><p>代码如下:</p><pre>root@webserver:/home/webmaster#&nbsp;mysqld&nbsp;--user=mysql&nbsp;--skip-grant-tables&nbsp;--skip-networking&nbsp;&amp;</pre><p>成功启动后返回PID及其它启动信息</p><p>代码如下:</p><pre>[1]&nbsp;3591&nbsp;&nbsp;&nbsp;root@webserver:/home/webmaster#&nbsp;121005&nbsp;2:59:27&nbsp;[Note]&nbsp;Plugin&nbsp;&#39;FEDERATED&#39;&nbsp;is&nbsp;disabled.&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:27&nbsp;InnoDB:&nbsp;The&nbsp;InnoDB&nbsp;memory&nbsp;heap&nbsp;is&nbsp;disabled&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:27&nbsp;InnoDB:&nbsp;Mutexes&nbsp;and&nbsp;rw_locks&nbsp;use&nbsp;GCC&nbsp;atomic&nbsp;builtins&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:27&nbsp;InnoDB:&nbsp;Compressed&nbsp;tables&nbsp;use&nbsp;zlib&nbsp;1.2.3.4&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:27&nbsp;InnoDB:&nbsp;Initializing&nbsp;buffer&nbsp;pool,&nbsp;size&nbsp;=&nbsp;128.0M&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:27&nbsp;InnoDB:&nbsp;Completed&nbsp;initialization&nbsp;of&nbsp;buffer&nbsp;pool&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:27&nbsp;InnoDB:&nbsp;highest&nbsp;supported&nbsp;file&nbsp;format&nbsp;is&nbsp;Barracuda.&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:27&nbsp;InnoDB:&nbsp;Waiting&nbsp;for&nbsp;the&nbsp;background&nbsp;threads&nbsp;to&nbsp;start&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:28&nbsp;InnoDB:&nbsp;1.1.8&nbsp;started;&nbsp;log&nbsp;sequence&nbsp;number&nbsp;1595685&nbsp;&nbsp;&nbsp;121005&nbsp;2:59:28&nbsp;[Note]&nbsp;mysqld:&nbsp;ready&nbsp;for&nbsp;connections.&nbsp;&nbsp;&nbsp;Version:&nbsp;&#39;5.5.24-0ubuntu0.12.04.1&#39;&nbsp;socket:&nbsp;&#39;/var/run/mysqld/mysqld.sock&#39;&nbsp;port:&nbsp;0&nbsp;(Ubuntu)</pre><p><br/>连接到mysql系统库:</p><p>代码如下:</p><pre>root@webserver:/home/webmaster#&nbsp;mysql&nbsp;-u&nbsp;root&nbsp;mysql</pre><p>连接到mysql库后直接修改root帐号的密码为新的密码&#39;mynewpasswd&#39;:</p><p>代码如下:<br/>&nbsp;</p><pre>Type&nbsp;&#39;help;&#39;&nbsp;or&nbsp;&#39;\h&#39;&nbsp;for&nbsp;help.&nbsp;Type&nbsp;&#39;\c&#39;&nbsp;to&nbsp;clear&nbsp;the&nbsp;current&nbsp;input&nbsp;statement.&nbsp;&nbsp;&nbsp;&nbsp;mysql&gt;&nbsp;update&nbsp;user&nbsp;set&nbsp;Password=PASSWORD(&#39;mynewpasswd&#39;)&nbsp;where&nbsp;user=&#39;root&#39;;&nbsp;&nbsp;&nbsp;Query&nbsp;OK,&nbsp;3&nbsp;rows&nbsp;affected&nbsp;(0.00&nbsp;sec)&nbsp;&nbsp;&nbsp;Rows&nbsp;matched:&nbsp;3&nbsp;Changed:&nbsp;3&nbsp;Warnings:&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;mysql&gt;&nbsp;FLUSH&nbsp;PRIVILEGES;&nbsp;&nbsp;&nbsp;mysql&gt;&nbsp;quit;&nbsp;&nbsp;&nbsp;Bye</pre><p>中止mysql服务进程(PID 3591见前面启动服务时的屏幕信息):< br/>代码如下:<br/>&nbsp;</p><pre>root@webserver:/home/webmaster#&nbsp;kill&nbsp;3591</pre><p>正常启动 mysql服务,并用新密码登录mysql服务器成功:< br/>代码如下:<br/>&nbsp;</p><pre>root@webserver:/home/webmaster#service&nbsp;mysql&nbsp;start&nbsp;&nbsp;&nbsp; root@webserver:/home/webmaster#mysql&nbsp;-u&nbsp;root&nbsp;-pmynewpasswd</pre>http://www.downcc.com/tech/4154.htmlOracle2015/04/04 23:34:49<p><strong>启动数据库报错,ORA-18008: cannot find OUTLN schema</strong></p><p><strong>问题现象:<br/></strong>数据库版本 Oracle 11g r2<br/>hrdb1&gt;startup<br/>Oracle 例程已经启动。</p><p>Total System Global Area 4392697856 bytes-<br/>&nbsp;</p><p>Fixed Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2233616 bytes<br/>Variable Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1090521840 bytes<br/>Database Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3288334336 bytes<br/>Redo Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11608064 bytes<br/>数据库装载完毕。<br/>ORA-01092: Oracle instance terminated. Disconnection forced<br/>ORA-18008: cannot find OUTLN schema<br/>进程 ID: 5294<br/>会话 ID: 683 序列号: 3</p><p><br/>hrdb1&gt;!oerr ora 18008<br/>18008, 00000,& quot;cannot find OUTLN schema&quot;<br/>// *Cause:&nbsp; The database creation script that creates this schema must not<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; have been executed.<br/>// *Action: Review the log files to see what happened when the database<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; was created.</p><p><strong>问题原因:<br/>outlin用户被误删除</strong></p><p><strong>解决方法:</strong></p><p>按照metalink上的解决办法,先修改replication_dependency_tracking参数,重建数据库outln用户及相关对象即可。</p><p>1,启动到mount状态,修改replication_dependency_tracking参数<br/>alter system set replication_dependency_tracking =false scope=spfile;</p><p>2,启动数据库至open状态<br/>hrdb1&gt;shutdown immediate<br/>hrdb1&gt;startup</p><p>3,执行脚本doptim.bsq,Oracle 10g版本可参考执行附录脚本<br/>@$Oracle_HOME/rdbms/admin/doptim.bsq</p><p>此时,用户已创建</p><p>hrdb1&gt;select username from dba_users;</p><p>USERNAME<br/>------------------------------<br/>OUTLN</p><p><br/>4,修改回replication_dependency_tracking参数为true</p><p>alter system set replication_dependency_tracking =true scope=spfile;</p><p><br/>5,重新启动数据库,系统恢复正常<br/>hrdb1&gt;shutdown abort<br/>Oracle 例程已经关闭。<br/>hrdb1&gt;startup<br/>Oracle 例程已经启动。</p><p>Total System Global Area 4392697856 bytes<br/>Fixed Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2233616 bytes<br/>Variable Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1090521840 bytes<br/>Database Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3288334336 bytes<br/>Redo Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11608064 bytes<br/>数据库装载完毕。<br/>数据库已经打开。<br/>hrdb1&gt;select username from dba_users;</p><p>USERNAME<br/>------------------------------<br/>WJ<br/>OUTLN<br/>SYS<br/>SYSTEM<br/>HR<br/>STRMADMIN</p><p>已选择6行。</p><p><br/>由于版本是Oracle 11g,直接执行相关脚本即可,oracle 10g版本可以参考《Script to Create User OUTLN in 10.2 [ID 422983.1]》</p><p>备注:用于复制的一个参数,第一次碰到,做个记录<br/>REPLICATION_DEPENDENCY_TRACKING enables or disables dependency tracking for read/write operations to the database. Dependency tracking is essential for propagating changes in a replicated environment in parallel.</p><p>参考资料:<br/>Unable To Start The Database With OUTLN Schema Dropped ORA-01092&amp; ORA-18008 [ID 855104.1]<br/>Script to Create User OUTLN in 10.2 [ID 422983.1]</p>http://www.downcc.com/tech/4150.htmlMySQL2015/04/04 23:31:49<p>在安装mysql过程中,由于对log文件目录位置进行了修改,</p><p>在my.cnf 中加入</p><p>[mysqld]</p><p>port&nbsp;&nbsp;= 3306</p><p>socket&nbsp;&nbsp;= /tmp/mysql.sock</p><p>skip-locking</p><p>key_buffer_size = 16M</p><p>max_allowed_packet = 1M</p><p>table_open_cache = 64</p><p>sort_buffer_size = 512K</p><p>net_buffer_length = 8K</p><p>read_buffer_size = 256K</p><p>read_rnd_buffer_size = 512K</p><p>myisam_sort_buffer_size = 8M</p><p>新增log-error = /var/log/mysql/mysql_error.log</p><p>新增log-bin = /var/log/mysql/binlog</p><p>导致MYSQL无法正常启动</p><p>查看LOG后发现</p><p>Can&#39;t start server : Bind on unix socket: Permission denied</p><p>应该是一个权限问题,仔细检查发现 新制定的log 文件权限不对</p><p>使用chown进行修改 之后还是同样错误</p><p>Do you already have another mysqld server running on socket: /tmp/mysql.sock ?</p><p>chmod 777 /tmp 就可以了</p><p>如果好不行的话,建议把整个mysql安装目录都改为 mysql:mysql下</p><p>chown -R mysql:mysql /usr/local/mysql</p><p>应该就不会有权限方面的问题了</p>http://www.downcc.com/tech/4137.htmlOracle2015/04/04 23:28:53<p style="TEXT-ALIGN: left">今天下午在Win7上安装了一下oracle10g,虽然准备了挺多资料,但是还是出现了错误,安装了两次,又卸载了一次,花了将近四个小时才把Oracel10g装到了Win7上,在这个过程遇到一些问题和我遇到的错误并写成了文档,现在和大家分享一下吧,希望对学习和使用Oracle的人有所帮助。</p><p style="TEXT-ALIGN: left"><strong>一、Oracle数据库的安装(指服务器的安装,不是客户端的安装)</strong></p><p>对于Win7系统来说,首先要下载支持Vista版本的Oracle 10g,现在好像不好下载了(下载地址:http://www.oracle.com/technetwork/cn/database/10203vista-088351-zhs.html),下载完成后解压到不含中文的目录,Win7系统的安装首先要做好安装前的一些配置工作:</p><p>第一步就是要修改安装文件目录中的两个refhost.xml文件,分别在目录db\Disk1\stage\prereq\db和\db\Disk1\stage\prereq\db_prereqs\db下。打开对其进行编辑,找到如下代码段:</p><p>&lt;!--Microsoft Windows vista--&gt;< br/>&lt;OPERATING_SYSTEM&gt;< br/>&nbsp;&nbsp;& lt;VERSION VALUE=&quot;6.0&quot;/&gt;< br/>&lt;/OPERATING_SYSTEM&gt;< br/>在其后增加:< br/>&lt;!--Microsoft Windows 7--&gt;< br/>&lt;OPERATING_SYSTEM&gt;< br/>&nbsp;& lt;VERSION VALUE=&quot;6.1&quot;/&gt;< br/>&lt;/OPERATING_SYSTEM&gt;</p><p>原 理:Oracle 至今没有推出针对windows7的版本,在安装的版本检测时提示目前oracle不支持version为6.1的windows OS系统。从oracle官方下载oracle 10g for vista and windows2K8 x86版for windows是支持vista内核的,windows7的内核与2008以及vista的内核大致上是差不多的,经过以上修改可以绕过Oracle对系 统版本的检查而正常安装!</p><p>第二步就是要设置文件夹\db\Disk1\ setup.exe和db\Disk1\install\oui.exe兼容模式,方法为:选中文件点击右键,点&quot;属性&quot;,将兼容模式设为Vista SP2就行了。</p><p>第三步修改文件内容:db\Disk1\install\ oraparam.ini 【在相应位置添加如下配置】</p><p style="TEXT-ALIGN: left">[Windows-6.1-required]</p><p style="TEXT-ALIGN: left">#Minimum display colours for OUI to run</p><p style="TEXT-ALIGN: left">MIN_DISPLAY_COLORS=256</p><p style="TEXT-ALIGN: left">#Minimum CPU speed required for OUI</p><p style="TEXT-ALIGN: left">#CPU=300</p><p style="TEXT-ALIGN: left">第四步要增加一个网络适配器,如果不增加,后面会有警告,在到后面的时候会安装不成功。</p><p style="TEXT-ALIGN: left">首先选择我的电脑右键选择“设备管理器”,单击鼠标右键选择添加“过时硬件”,在打开的如下窗口中,选择下一步。如图所示:</p><p style="TEXT-ALIGN: left">&nbsp;<img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503825.jpg"/></p><p style="TEXT-ALIGN: left">然后再选择多个下一步选项,选择添加网络适配器,再打开的窗口中选择按照下图的情况选择:</p><p style="TEXT-ALIGN: left"><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503697.jpg"/></p><p style="TEXT-ALIGN: left">最后,当添加成功之后,进入到设置网络适配器IP地址的窗口中,设置IP地址,随便设置一下就行就行。这样我们的准备工作到此完毕。</p><p style="TEXT-ALIGN: left">正式安装开始:</p><p style="TEXT-ALIGN: left">1、在Oracle安装之前请关闭防火墙、杀毒软件等,Oracle内部优化严重,涉及系统内核,所以以前有杀毒软件上来二话不说先把oracle干掉。然后去执行\db\Disk1\ setup.exe安装文件,我的出现如下错误:</p><p style="TEXT-ALIGN: left"><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503886.jpg"/></p><p>不用管它,继续等待。直到出现如下界面,会改变系统的配色方案。重启以后自己就改回来了。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503510.jpg"/></p><p>2、接下来便出现了“Oracle Datebase 10g 安装-安装方法”的对话框,在该对话框中,设置Oracle的主目录的位置,对于Oracle的主目录的位置最好设置为两层的目录结构,且主目录的的文件名不要有空格,否则到后面检查的时候会出现警告,在到后面会安装失败。所以在这里选择它的安装目录为“D:\Oracle10g\Oracle10g”,并设置数据库的口令。单击下一步,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503960.jpg"/></p><p>3、可以看到准备安装框,等待一会儿出现有关“产品特定的先决条件检查”的对话框,由于我第一次安装失败,下边的这个图是我第一次截的图,第二次忘了截了,出现了两个警告,这也导致了我后边的失败,第二次安装成功了,原因在于我添加了网络适配器和取消了Oracle的安装目录中的空格,所以大家最好不要让他出现警告。单击下一步继续。如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503298.jpg"/></p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503258.jpg"/></p><p>如果有警告的化,你没有在意单击了下一步,会弹出对话框提示你是否继续。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503378.jpg"/></p><p>4、在接下来的对话框中,出现“概要”的对话框,从中可以看到我们的数据库的一些安装的信息,单击“安装”按钮继续安装,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814503700.jpg"/></p><p>5、接下来便进入到了安装的对话框中,接下来我们便需要等待了。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814504146.jpg"/></p><p>6、在过一会儿出现如下的配置助手对话框,这的安装十分的重要,如果前边有警告的化,这会出现失败提示。我第一次的时候就是到这失败的,并结束安装,所以大家一定要准备好安前的准备工作。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814504766.jpg"/></p><p>7、在安装配置助手的时候会出现如下对话框,从中可以看到正在为我们的系统安装数据库实例,我们要做的就是等待了。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814504591.jpg"/></p><p>8、当上边的安装完成后,会出现如下的对话框我们需要单击“口令管理”选项,设置用户的口令。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814504835.jpg"/></p><p>我们要解锁SCOTT这个用户,将它的口令设置为“tiger”(即老虎的意思)。单击两次确定的按钮返回。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814504210.jpg"/></p><p>下面是Oracle中几个重要的用户的默认的密码,也是比较常用的。</p><p>用户名:sys&nbsp;&nbsp;&nbsp;&nbsp; 密码:change_on_install&nbsp;&nbsp;</p><p>用户名:system&nbsp;&nbsp;&nbsp;&nbsp; 密码:manager&nbsp;&nbsp;</p><p>用户名:internal&nbsp;&nbsp;&nbsp;&nbsp; 密码:oracle&nbsp;&nbsp;</p><p>用户名:scott&nbsp;&nbsp;&nbsp;&nbsp; 密码:tiger</p><p>9、最后系统会提示Oracle10g的数据库安装成功。</p><p>在安装成功之后,我们需要将有关Oracle的服务设置为手动的方式启动,要不然每次开机的时候数据库会占用我们很大的内存。</p><p>如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="win 7系统上Oracle 10g数据库服务器端的安装经验分享_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/201282814504139.JPG"/></p><p>对于Win7系统安装完成之后可能会改变配色方案,重启启动机器就行了。</p><p><strong>二、Oracle的数据库的卸载</strong></p><p>1、停止所有与ORACLE相关的服务。</p><p>2.、使用OUI(Oracle Universal Installer)卸载Oracle软件。</p><p> “开始”-&gt;</p>http://www.downcc.com/tech/4136.htmlMySQL2015/04/04 23:25:42<p>大家都知道MySQL是一款中、小型关系型数据库管理系统,很具有实用性,对于我们学习很多技术都有帮助,前几天我分别装了SQL Server 2008和Oracle 10g数据库,也用了JDBC去连接他们,都没有出现乱码。昨天看同学用java连接MySQL数据库的时候,出现了乱码,这是我不知道的,我马上上网去查JDBC连接MySQL的操作,发现在用JDBC方式连接MySQL数据库的时候要传递一个能解决乱码的参数,才能将不是乱码的数据插入到数据库中.这是我要安装MySQL数据库的其中一个原因,想去体验以下它一下,再加上上课的机器配置比较低,装MySQL数据库做实验是最好的选择,正是由于这两个原因我安装了MySQL,在安装的过程中有些问题让我很注意,在安装的过程中我将步骤截了图,希望对有需要的人有所帮助,我的数据库是5.5.21这个版本的。以下是我的安装步骤:</p><p>1、首先单击MySQL5.5.21的安装文件,出现该数据库的安装向导界面,单击“next”继续安装,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143924356.jpg"/></p><p>2、在打开的窗口中,选择接受安装协议,单击“next”继续安装,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143927711.jpg"/></p><p>3、在出现选择安装类型的窗口中,有“typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,我们选择“Custom”,因为通过自定义可以更加的让我们去熟悉它的安装过程,单击“next”继续安装,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143927281.jpg"/>&nbsp;</p><p>4、在出现自定义安装界面中选择mysql数据库的安装路径,这里我设置的是“d:\Program File\MySQL”,单击“next”继续安装,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143927241.jpg"/></p><p>5、接下来进入到准备安装的界面,首先确认一下先前的设置,如果有误,按“back”返回,没有错误,单击“Install”按钮继续安装,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143927640.jpg"/></p><p>6、单击“Install”按钮之后出现如下正在安装的界面,经过很少的时间,MySQL数据库安装完成,出现完成MySQL安装的界面,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143927705.jpg"/></p><p>这个界面单击“next”就行。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143927270.jpg"/></p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143928913.jpg"/></p><p>注意要选择上边的“Launch the MySQL Instance Configuration Wizard”选项,这是启动MySQL的配置,单击“Finish”按钮,进入到配置界面。</p><p>7、MySQL数据库的安装十分简单,关键是安装完成之后的配置,单击完成之后出现如下的配置界面向导,单击“next”进行配置,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143928839.jpg"/></p><p>8、在打开的配置类型窗口中选择配置的方式,“Detailed& nbsp;Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,为了熟悉过程,我们选择“Detailed Configuration(手动精确配置)”,单击“next”继续,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143928162.jpg"/></p><p>9、在出现的窗口中,选择服务器的类型,“Developer Machine(开发测试类)”、“Server Machine(服务器类型)”、“Dedicated MySQL Server Machine(专门的数据库服务器)”,我们仅仅是用来学习和测试,默认就行,单击“next”继续,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143928334.jpg"/></p><p>10、在出现的配置界面中选择mysql数据库的用途,“Multifunctional Database(通用多功能型)”、“Transactional Database Only(服务器类型)”、“Non-Transactional Database Only(非事务处理型)”,这里我选择的是第一项, 通用安装,单击“next”继续配置,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143929840.jpg"/></p><p>11、在出现的界面中,进行对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间,如果修改了,要记住位置,重装的时候要选择一样的地方,否则可能会造成数据库损坏,当然,对数据库做个备份就没问题了,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143929747.jpg"/></p><p>12、在打开的页面中,选择mysql的访问量,同时连接的数目,“Decision Support(DSS)/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,设置为15个)这里选择手动设置,单击“next”继续,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143929734.jpg"/></p><p>13、在打开的页面中设置是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,这也是连接java的操作,默认的端口是3306,并启用严格的语法设置,单击“next”继续,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143930855.jpg"/></p><p>14、在打开的字符编码的页面中,设置mysql要使用的字符编码,第一个是西文编码,第二个是多字节的通用utf8编码,第三个是手动,我们选择utf-8或者是gbk,单击“next”,继续配置,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143930370.jpg"/></p><p>15、在打开的页面中选择是否将mysql安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH(加入后,就可以直接使用bin下的文件,而不用指出目录名,比如连接,“mysql –u username –p password;”就可以了,单击“next”继续配置,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143930218.jpg"/></p><p>16、在打开的页面中设置是否要修改默认root用户(超级管理员)的密码(默认为空),“New root password”,如果要修改,就在此填入新密码,并启用root远程访问的功能,不要创建匿名用户,单击“next”继续配置,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143930410.jpg"/></p><p>17、到这里所有的配置操作都已经完成,单击Execute按钮执行配置,如图所示:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143930503.jpg"/></p><p>18、过了几分钟,出现如下的提示界面就代表MySQL配置已经结束了,并提示了成功的信息。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="Win7系统安装MySQL5.5.21图解教程_downcc绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-8/2012828143930173.jpg"/></p><p>19、在服务中将mysql数据库启动,并在命令窗口中输入“mysql –h localhost –u root -p&amp;rdq</p>http://www.downcc.com/tech/4096.htmlSQL Server2015/04/04 23:18:23<p>一、概述<br/>通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。多表连接查询是使用Sql的基本操作,但连接的方式却有多种,熟练使用这些连接方式能够简化Sql语句,提高数据库运行效率。<br/>在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。<br/>连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。</p><p>二、基本语法与方法<br/>SQL-92标准所定义的FROM子句的连接语法格式为:</p><pre>FROM&nbsp;join_table&nbsp;join_type&nbsp;join_table&nbsp;[ON&nbsp;(join_condition)]</pre><p>其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。<br/>join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同。<br/>1、内连接又分为等值连接、自然连接和不等连接三种。<br/>2、外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。<br/>3、交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。<br/>连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。<br/>无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:</p><pre>SELECT&nbsp;p1.pub_id,p2.pub_id,p1.pr_info&nbsp;  FROM&nbsp;pub_info&nbsp;AS&nbsp;p1&nbsp;INNER&nbsp;JOIN&nbsp;pub_info&nbsp;AS&nbsp;p2&nbsp;  ON&nbsp;DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)</pre><p>(一)内连接<br/>内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:<br/>1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。<br/>2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括&gt;、&gt;=、&lt;=、&lt;、!&gt;、!&lt;和&lt;&gt;。<br/>3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。<br/>例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:</p><pre>SELECT&nbsp;*&nbsp;  FROM&nbsp;authors&nbsp;AS&nbsp;a&nbsp;INNER&nbsp;JOIN&nbsp;publishers&nbsp;AS&nbsp;p&nbsp;  ON&nbsp;a.city=p.city&nbsp;&nbsp;  SELECT&nbsp;a.*,p.pub_id,p.pub_name,p.country&nbsp;FROM&nbsp;authors&nbsp;AS&nbsp;a&nbsp;INNER&nbsp;JOIN&nbsp;publishers&nbsp;AS&nbsp;p&nbsp;ON&nbsp;a.city=p.city</pre><p>又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):<br/>(二)外连接<br/>内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。<br/>1、left join或left outer join(左外连接)<br/>左外连接:(也叫左外连接,给出两个表的配匹行,并且以左边的表为准,如果左边表有而右边表没有的行,则在右边表的相应行选择的列显示为NULL,允许左边的基准表对应右边表多条满足条件的记录)左连接就是返回左边的匹配行,不考虑右边的表是否有相应的行<br/>双击代码全选<br/>1<br/>select field1,field2 from table1 left join table2  on field1=field2(基准字段,可以多个)  where table1.field3=table2.field3</p><p>2、right join或right outer join(右外连接)<br/>右连接:(也叫右外连接,给出两个表的配匹行,并且以右边的表为准,如果右边表有而左边表没有的行,则在右边表的相应行选择的列显示为NULL,允许右边的基准表对应左边表多条满足条件的记录)<br/>语法与做链接差不多!<br/>(三)交叉连接<br/>交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。<br/>例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。</p><pre>SELECT&nbsp;type,pub_name&nbsp;  FROM&nbsp;titles&nbsp;CROSS&nbsp;JOIN&nbsp;publishers&nbsp;  ORDER</pre>http://www.downcc.com/tech/832.htmlMySQL2015/04/04 21:20:13<p>在CentOS上安装MySQL数据库服务器后,系统出于安全性考虑,缺省不支持用户通过非本机连接上数据库服务器,如果想让用户通过另外一台机器连接上数据库服务器必须手动进行修改:</p><p>1、在控制台执行 mysql -u root -p mysql,系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台,这个命令的第一个mysql是执行命令,第二个mysql是系统数据名称,不一样的。</p><p>2、在mysql控制台执行 GRANT ALL PRIVILEGES ON *.* TO& #39;root&#39;@&#39;%&#39; IDENTIFIED BY& #39;MyPassword&#39; WITH GRANT OPTION;</p><p>3、在mysql控制台执行命令中的& #39;root&#39;@&#39;%&#39; 可以这样理解: root是用户名,%是主机名或IP地址,这里的%代表任意主机或IP地址,你也可替换成任意其它用户名或指定唯一的IP地址;&#39;MyPassword&#39;是给授权用户指定的登录数据库的密码;另外需要说明一点的是我这里的都是授权所有权限,可以指定部分权限,GRANT具体操作详情见:http://dev.mysql.com/doc/refman/5.1/en/grant.html</p><p>4、不放心的话可以在mysql控制台执行 select host, user from user; 检查一下用户表里的内容,我的检查如下图所示:</p><p style="TEXT-ALIGN: center"><img border="0" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-2/201027133944150.jpg" width="550" height="289"/></p>http://www.downcc.com/tech/2728.htmlMySQL2015/03/29 12:44:20<p><strong>以下内容为网络搜集并经整理:<br/></strong>这几天有一台MySQL数据库服务器频繁出现掉线,经排查,并没有哪个网站受攻击,网上搜索了一下,很多人都碰到这问题,全是Windows系统上安装MySQL,原因是前段时间微软发布的补丁KB967723而导致的。现在有两种解决方法:<br/><br/><strong>第一种:卸载KB967723补丁<br/></strong>登录服务器,进入控制面板 — 添加和删除程序 — (勾选上方的“显示更新”)在里面可以看到更新的KB967723这个补丁,然后就想卸载普通软件一样卸载,卸载中会提示你,如果卸载可能导致程序运行出错,没关系,选择“是”,继续卸载。卸载完成后重启数据库服务器。<br/><br/><strong>第二种:修改注册表</strong><br/>本方法是微软给出的修改注册表修复该Bug的的方法,原因是默认最大的临时 TCP 端口的数是 5000 适用于一节中包含的产品中。 在这些产品中添加一个新参数。 要提高临时端口的上限,请按照下列步骤操作:</p><p>开始 → 运行 → 输入regedit → 启动注册表编辑器。< br/>在注册表中找到以下子项,然后单击 参数 :< br/>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters<br/>在 编辑 菜单上单击 新建,然后添加下面的注册表项:< br/>数值名称: MaxUserPort< br/>值类型: DWORD<br/>值数据: 65534<br/>有效范围: 5000-65534 (十进制)<br/>默认值: 0x1388 (5000 十进制)<br/>说明: 此参数将控制程序从系统请求任何可用的用户端口时使用的最大端口数。 通常,1024 的值和包含的 5000 之间分配临时的 (短) 端口。<br/>退出注册表编辑器,并重新启动计算机。< br/>微软原文链接:http://support.microsoft.com/kb/q196271</p>http://www.downcc.com/tech/2727.htmlMySQL2015/03/29 12:43:20<p><strong>错误编号:</strong>2003</p><p><strong>问题分析:</strong></p><p>无法连接到< span style="TEXT-DECORATION: none">MySQL</span>服务器,可能的情况为:</p><p>1、MySQL 服务没有启动,一般是在异常的情况下 MySQL 无法启动导致的,比如无可用的磁盘空间,my.ini 里 MySQL 的 basedir 路径设置错误等;</p><p>2、MySQL 服务器资源紧张,导致无法连接。<br/>&nbsp;</p><p><strong>解决方法:</strong></p><p>1、如果你是虚拟主机用户(购买的空间),则联系空间商检查 MySQL 是否正常启动,并确认 MySQL 的配置信息(是否为 localhost);</p><p>2、如果你是独立主机用户(拥有管理主机权限),则按下面步骤检查:</p><p>1)检查是否启动了 MySQL 服务。</p><p>Windows 主机的话,右键点击我的电脑,单击管理,在服务和应用程序中找到 MySQL 服务,看是否是已启动的状态。</p><p>&nbsp;<img style="CURSOR: hand" border="0" alt="Can" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/2011517141142901.gif" on="" t="" mysql="" server="" to="" connect=""/></p><p>Linux主机,在控制台执行 service mysql start 启动 MySQL 服务。</p><p>2)检查磁盘空间是否还有剩余可用空间,尽量保持有足够的磁盘空间可用。</p><p>3)检查 my.ini 里的 basedir&nbsp;(MySQL 安装地址)&nbsp;和 datadir (数据目录存放地址)等参数设置是否正确,然后重新启动下 MySQL 服务。</p><p>4)如果在刷新后偶尔能够正常显示而且服务器是Windows系统的话,那么减小Windows中TcpTimedWaitDelay时间可解决此类问题,默认情况下为240(未设置的情况下也是这个数值)此项设置需要到注册表如下位置进行设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay&nbsp; 如果注册表中没有TcpTimedWaitDelay这个项目,请增加这个项目,并设置为双字节(DWORD)类型数值设置为30 ~ 60 之间即可</p><p><img style="CURSOR: hand" border="0" alt="Can" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/2011517141142314.gif" on="" t="" mysql="" server="" to="" connect=""/></p><p><strong>相关内容:<br/></strong><a href="http://www.downcc.com/tech/2728.html" target="_blank"><strong>微软补丁KB967723造成MySQL频繁无法连接,刷新即恢复正常的解决方法</strong></a></p>http://www.downcc.com/tech/3416.htmlSQL Server2015/03/23 20:11:33<p>在安装 SQL Server 2008 或 SQL Server 工具时,将同时安装 Microsoft SQL Server Native Client 10.0。如果计算机上还安装了 SQL Server Native Client 的 SQL Server 2005 版本,则 SQL Server Native Client 10.0 将与早期版本并行安装。<br/><br/>Microsoft SQL Server Native Client 10.0下载:<a href="http://www.downcc.com/soft/8474.html" target="_blank" textvalue="http://www.downcc.com/soft/8474.html">http://www.downcc.com/soft/8474.html</a>&nbsp; 。<br/><br/>SQL Server Native Client 文件(sqlncli10.dll、sqlnclir10.rll 和 s10ch_sqlncli.chm)将安装到以下位置:<br/><br/>%SYSTEMROOT%\system32\<br/><br/><strong>注意:</strong>< br/>SQL Server Native Client OLE DB 访问接口和 SQL Server Native Client ODBC 驱动程序的所有相应注册表设置都将在安装过程中完成。<br/><br/>SQL Server Native Client 头文件和库文件(sqlncli.h 和 sqlncli10.lib)安装在以下位置:<br/><br/>%PROGRAMFILES%\Microsoft SQL Server\100\SDK<br/><br/>除了作为 SQL Server 安装过程的一部分安装 SQL Server Native Client 以外,还可以在 SQL Server 安装磁盘的以下位置找到名为 sqlncli.msi 的可再分发安装程序:<br/><br/>%CD%\Setup\<br/><br/>您可以通过 sqlncli.msi 分发 SQL Server Native Client。在您部署某一应用程序时,可能需要安装 SQL Server Native Client。安装多个包(对于用户而言就像是一次安装)的一种方法就是使用链接器和引导程序技术。有关详细信息,请参阅 Authoring a Custom Bootstrapper Package for Visual Studio 2005(为 Visual Studio 2005 创作自定义引导程序包)和添加自定义系统必备。<br/><br/>sqlncli.msi 的 x64 和 Itanium 版本也会安装 SQL Server Native Client 的 32 位版。如果您的应用程序所针对的目标平台并非其开发时所使用的平台,则可以从 Microsoft 下载中心下载针对 x64、Itanium 和 x86 的 sqlncli.msi 版本。<br/><br/>在调用 sqlncli.msi 时,默认情况下只会安装客户端组件。这些客户端组件即为那些支持运行使用 SQL Server Native Client 开发的应用程序的文件。若还要安装 SDK 组件,请在命令行中指定 ADDLOCAL=All。例如:<br/><br/>msiexec /i sqlncli.msi ADDLOCAL=ALL APPGUID={0CC618CE-F36A-415E-84B4-FB1BFF6967E1}<br/><br/>卸载 SQL Server Native Client<br/>--------------------------------------------------------------------------------<br/><br/>因为诸如 SQL Server 服务器和 SQL Server 工具之类的应用程序依赖于 SQL Server Native Client,所以只有在卸载所有依赖应用程序之后才能卸载 SQL Server Native Client。若要向用户提供应用程序依赖于 SQL Server Native Client 的警告,请在 MSI 中使用 APPGUID 安装选项,如下所示:<br/><br/>msiexec /i sqlncli.msi APPGUID={0CC618CE-F36A-415E-84B4-FB1BFF6967E1}<br/><br/>传递给 APPGUID 的值是您的特定产品代码。当使用 Microsoft Installer 捆绑应用程序安装程序时,必须创建产品代码。</p>http://www.downcc.com/tech/4709.htmlSQL Server2015/03/18 21:54:45<p><strong>一种情况,在安装 sqlServer2005 时 居然出现两个警告:</strong></p><p>1 Com+ 目录要求</p><p>2 Edition change check</p><p>郁闷!网上说出现两个警告,是肯定装不成功的!我抱着侥幸的态度试了下,成功了。</p><p>安装成功后,正准备 “&nbsp;仅工具、联机丛书和示例(T)”</p><p>但是安装不了,他提示我“工作站组件”安装过了对现有组件无法更新或升级。</p><p>解决办法:</p><p>1 打开“控制面板”----“添加删除程序”---“micorsoft sql server 2005”</p><p>2 按“更改按钮”,出现“micorsoft sql server 2005 维护”</p><p>3 选择 “ sql server 2005 公共组件”下面的“工作站组件”,按“下一步”</p><p>4 出现 “更改安装组件” 和“删除micorsoft sql server ”</p><p>5 我碰着运气选择了“删除micorsoft sql server ”</p><p>6 然后重新安装了“&nbsp;仅工具、联机丛书和示例(T)”</p><p>7 安装到最后又出现了“msdtc无法读取配置信息”,我吓死了,我按了下“重试”,结果又可以了。</p><p>8 安装成功!</p><p>呵呵,出现两个“警告”就不能安装成功的神话就这样被我打破了。</p><p><strong>第2种情况:安装sql2005后,没有SQL Server management studio。该怎么办?</strong></p><p>1:原来安装的有SQL 2000 和VS2005</p><p>很简单 下一个management 微软中国 上面下载SQL Server management studio expree版就行</p><p>你安装了SQL2000的时候自带了使用计算机管理的SQL管理插件。你安装了微软的05的话,你应该在安装组建中选择一个SQL Server management studio,可能你下载的是精简版本,一般正常下载的是一张光碟大小。解压1.4G。如果急需管理界面可以临时使用SQL 2000的管理界面连接进行管理。</p><p>2:SQLserver 2005里面没有SQL Server Management Studio解决办法</p><p>分两种情况,一种是版本问题,一种是安装顺序问题,请往下看:</p><p>一、你安装的是SQL Server 2005 Express Edition版,也就是我们说的快速开发版</p><p>SQL Server 2005 Express版是不用花钱的,微软免费让你用,但是它功能上少很多东西,不过对于学习、个人开发功能还是够用了。安装SQL Server 2005 Express Edition,在安装后会发现可以找得到SQL Server 2005的服务管理器,但是找不到它的数据库管理器,这是因为Express版本SQL本身没有带图形化管理工具。若需要这个工具的话,需要从微软上下载。</p><p>SQL Server 2005 使用的图形界面工具是< a href="http://www.downcc.com/soft/12940.html" target="_blank" textvalue="Microsoft SQL Server Management Studio Express">Microsoft SQL Server Management Studio Express</a>,现在微软官方已提供它的正式版本下载。</p><p>另外,微软还提供Microsoft SQL Server 2005 Express Edition 工具包下载,Microsoft SQL Server 2005 Express Edition 工具包包括Microsoft SQL Server Management Studio Express在里面。</p><p>你可以下载后安装,安装后在SQL Server 2005 程序组里就会出现Microsoft SQL Server Management Studio Express,使用它来进行管理即可。</p><p>(注:上面是简体中文版,你也可以选择其他语言的版本下载)</p><p><strong>三、第二种情况就是安装顺序问题</strong></p><p>你可能会告诉我,说我装的不是Express版,可能你装的是Microsoft SQL Server 2005 Development Edition(也就是开发版),这个版本功能齐全,功能上和企业版一模一样,没有任何差异,只是授权上有所差异。为什么我一猜你用的就是Development版呢?不要惊奇,因为这个版是网上流传比较广的版本,大部分中国人都有着网上下载或者地摊儿买盗版光盘的这种习惯,什么软件都从网上下载,一个子儿不用花,地摊儿买也就5块钱,所以我猜得没错的话大部分人用的都是Development版。</p><p>好了不扯远了,说正事儿,水寒有点罗嗦,说一个事儿就没完了,请见谅。</p><p>如果你先安装了Microsoft Visual Studio 2005/2008,后安装的Microsoft SQL Server 2005 Development Edition,那么也会出安装后的SQLserver 2005里面没有SQL Server Management Studio,因为你在安装Visual Studio 2005/2008的时候他会自动给你装一个SQL server Express的实例,等你装SQL Server 2005 Development的时候检测安装兼容性的时候他会问你是否要进行版本变更,说你以前的版本是Express版,估计大多人也没有看,直接“下一步”了,所以安装以后其实你的版本是Express版,所以Microsoft SQL Server Management Studio Express自然就没有装上。你可以在安装以后查看你的“服务项”里面,会有SQL server Express版的服务。</p><p>解决办法:这种情况解决办法就是在控制面板里面,把以Microsoft SQL server 2005开头的程序(包括一些工具组件)全部卸载,然后重装就可以搞定!</p>http://www.downcc.com/tech/202.htmlMySQL2015/02/23 14:03:14<p><a href="http://www.downcc.com/soft/583.html" target="_blank" textvalue="Mysql">Mysql</a>数据库是一个多用户,多线程的关系型数据库,是一个客户机/服务器结构的应用程序。它是对个人用户和商业用户是免费的.</p><p>Mysql数据库具有以下优点:</p><p>1.同时访问数据库的用户的数量不受限制</p><p>2.可以保存超过5千万条的记录</p><p>3.是目前市场上现有数据库产品中运行速度最快的数据库系统</p><p>4.用户权限设置简单、有效。</p><p>Mysql数据库常用命令:</p><p>启动Mysql数据库</p><p>C:\&gt;cd Mysql5.0\bin</p><p>C:\Mysql5.0\bin&gt;mysqld –install 安装Mysql服务</p><p>C:\Mysql5.0\bin&gt;net start mysql 启动Mysql服务</p><p>请求的服务已经启动。</p><p>连接mysql</p><p>用户需要提供Mysql的用户名和密码来连接服务器,如果服务器不是在本机,则还需要一个主机名或IP来指定服务器的位置。</p><p>C:\Mysql5.0\bin&gt;mysql -h localhost -u root -p</p><p>Enter password: ****</p><p>Welcome to the MySQL monitor. Commands end with ; or \g.</p><p>Your MySQL connection id is 6 to server version: 5.0.18-nt</p><p>Type& #39;help;&#39; or& #39;\h&#39; for help. Type& #39;\c&#39; to clear the buffer.</p><p>mysql&gt;</p><p>使用一条简单的查询语句</p><p>mysql&gt; select version(),current_date;</p><p>mysql&gt; select version();select now();</p><p>新建或删除一个数据库</p><p>Mysql&gt;create database mydb;</p><p>Mysql&gt; drop database mydb;</p><p>打开的数据库的命令</p><p>mysql&gt; use mysql</p><p>Database changed</p><p>查看数据库的命令</p><p>mysql&gt; show databases;</p><p>查看数据表的详细结构</p><p>mysql&gt; desc func;</p><p>新建数据库</p><p>mysql&gt; create database school;</p><p>Query OK, 1 row affected (0.00 sec)</p><p>新建表</p><p>mysql&gt; create table user01(</p><p>-&gt; id varchar(20) NOT NULL,</p><p>-&gt; userName varchar(10) NOT NULL,</p><p>-&gt; age int(11) default&#39;0&#39;,</p><p>-&gt; sex char(2) NOT NULL default&#39;m&#39;,</p><p>-&gt; PRIMARY KEY (id)</p><p>-&gt; )TYPE=InnoDB;</p><p>Query OK, 0 rows affected, 1 warning (0.02 sec)mysql&gt;desc student;</p><p><span style="DISPLAY: none">[page_break]</span></p><p>插入和删除表中的数据</p><p>Create table student(stuName varchar(20),age varchar(20),id varchar(20),set0 char(1));</p><p>插入</p><p>mysql&gt; insert into student(id,stuName) values(&#39;1&#39;,&#39;tomcat&#39;);</p><p>Query OK, 1 row affected (0.00 sec)</p><p><br/>删除</p><p>mysql&gt; delete from student where id=&#39;1&#39;;</p><p>Query OK, 1 row affected (0.01 sec)</p><p>删除表中所有数据</p><p>mysql&gt; truncate table student;</p><p>Query OK, 1 row affected (0.01 sec)</p><p>删除表</p><p>mysql&gt; create table temp(t varchar(1));</p><p>Query OK, 0 rows affected (0.00 sec)</p><p>mysql&gt; drop table temp;</p><p>Query OK, 0 rows affected (0.00 sec)</p><p>创建新用户并给予权限</p><p>mysql&gt; grant all privileges on *.* to dbuser@localhost identified by& #39;1234&#39;</p><p>with grant option;</p><p>更改Mysql用户密码</p><p>c:\Mysql5.0\bin&gt;mysqladmin -u root -p password 1234</p><p>Enter password: ****</p><p>备份数据库及表</p><p>我们用mysqldump命令来备份数据库</p><p>c:\mysql\bin\&gt;mysqldump –u root –p 3306 mysql&gt;d:\backup.sql</p><p>执行此语句将把mydb 备份到D盘的backup.sql文件中</p><p>备份多个数据库表</p><p>c:\mysql\bin\&gt;mysqldump –u root –p 3306 school user01 user& gt;d:\backup.sql</p><p>此句的意思是把school库中的user01表和user表的内容和表的定义备份到D盘backup.sql文件中。</p><p>备份所有的数据库</p><p>c:\myql\bin&gt;mysqldump –u root –p 3306 –all –database&gt;d:backup.sql</p><p>还原Mysql数据库</p><p>c:\mysql\bin\mysql –u root –p 3306 school</p><p>还原其中的一个表</p><p>mysql&gt; source d:\books.sql;</p><p>ERROR:</p><p>Unknown command& #39;\b&#39;.</p><p>Query OK, 0 rows affected (0.00 sec)</p><p>Query OK, 1 row affected (0.00 sec)</p><p>退出Mysql连接</p><p>mysql&gt;quit(exit)</p><p>关闭mysql服务</p><p>C:\mysql\bin&gt;net mysql</p>http://www.downcc.com/tech/984.htmlMySQL2015/02/23 11:52:20<p><strong>一、前言:</strong></p><p>当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小。</p><p>或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什么。灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统。</p><p>这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法。在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动备份与数据恢复过程都基于Shell。</p><p><strong>建立数据库备份所需条件</strong></p><p><strong>[1] 建立自动备份脚本</strong></p><p>在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。</p><p><table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center" uetable="null"><tbody><tr class="firstRow"><td style="WORD-WRAP: break-word" bgcolor="#ddedfb">[root@CentOS ~]# vi mysql-backup.sh & amp;larr; 建立数据库自动备份脚本,如下:< br/><br/>#!/bin/bash< br/><br/>PATH=/usr/local/sbin:/usr/bin:/bin< br/><br/># The Directory of Backup< br/>BACKDIR=/backup/mysql< br/><br/># The Password of MySQL< br/>ROOTPASS=********  此处请将星号替换成MySQL的root密码< br/><br/># Remake the Directory of Backup< br/>rm -rf $BACKDIR< br/>mkdir -p $BACKDIR< br/><br/># Get the Name of Database< br/>DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`< br/><br/># Backup with Database< br/>for dbname in $DBLIST< br/>do< br/>mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy< br/>done</td></tr></tbody></table></p><p>[2] 运行数据库自动备份脚本</p><p><table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center" uetable="null"><tbody><tr class="firstRow"><td style="WORD-WRAP: break-word" bgcolor="#ddedfb">[root@CentOS ~]# chmod 700 mysql-backup.sh  改变脚本属性,让其只能让root用户执行< br/>[root@CentOS ~]# ./mysql-backup.sh   运行脚本< br/>[root@CentOS ~]# ls -l /backup/mysql/   确认一下是否备份成功< br/>total 8< br/>drwxr-x--- 2 mysql mysql 4096 Sep 1 16:54 mysql   已成功备份到/backup/mysql目录中</td></tr></tbody></table></p><p><strong>[3] 让数据库备份脚本每天自动运行</strong></p><p><table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center" uetable="null"><tbody><tr class="firstRow"><td style="WORD-WRAP: break-word" bgcolor="#ddedfb">[root@sample ~]# crontab -e & amp;larr; 编辑自动运行规则(然后会出现编辑窗口,操作同vi)< br/>00 03 * * * /root/mysql-backup.sh   添加这一行到文件中,让数据库备份每天凌晨3点进行</td></tr></tbody></table></p><p>测试自动备份正常运转与否(备份恢复的方法)</p><p>这里,以通过实际操作的过程来介绍问题出现后的恢复方法。</p><p><strong>[1] 当数据库被删除后的恢复方法</strong></p><p>首先建立一个测试用的数据库。</p><p><table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center" uetable="null"><tbody><tr class="firstRow"><td style="WORD-WRAP: break-word" bgcolor="#ddedfb">[root@CentOS ~]# mysql -u root -p  & amp;larr; 用root登录到MySQL服务器< br/>Enter password: & amp;larr; 输入MySQL的root用户密码< br/>Welcome to the MySQL monitor. Commands end with ; or \g.< br/>Your MySQL connection id is 8 to server version: 4.1.20< br/><br/>Type& #39;help;&#39; or& #39;\h&#39; for help. Type& #39;\c&#39; to clear the buffer.< br/><br/>mysql&gt; create database test; & amp;larr; 建立一个测试用的数据库test< br/>Query OK, 1 row affected (0.00 sec)< br/><br/>mysql&gt; use test & amp;larr; 连接到这个数据库< br/>Database changed< br/><br/>mysql&gt; create table test(num int, name varchar(50)); & amp;larr; 在数据库中建立一个表< br/>Query OK, 0 rows affected (0.07 sec)< br/><br/>mysql&gt; insert into test values(1,&#39;Hello,CentOS&#39;); & amp;larr; 插入一个值到这个表(这里以&quot;Hello,CentOS&quot;为例)< br/>Query OK, 1 row affected (0.02 sec)< br/><br/>mysql&gt; select * from test; & amp;larr; 查看数据库中的内容< br/>+------+-----------------+< br/>| num | name |< br/>+------+-----------------+< br/>|1  | Hello,Centos | & amp;larr; 确认刚刚插入到表中的值的存在< br/>+------+------------------+< br/>1 row in set (0.01 sec)< br/><br/>mysql&gt; exit & amp;larr; 退出MySQL服务器< br/>Bye</td></tr></tbody></table></p><p>然后,运行刚才建立的数据库备份脚本,备份刚刚建立的测试用的数据库。</p><p><table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center" uetable="null"><tbody><tr class="firstRow"><td style="WORD-WRAP: break-word" bgcolor="#ddedfb">[root@sample ~]# cd &amp;larr; 回到脚本所在的root用户的根目录< br/>[root@sample ~]# ./mysql-backup.sh & amp;larr; 运行脚本进行数据库备份</td></tr></tbody></table></p><p>接下来,我们再次登录到MySQL服务器中,删除刚刚建立的测试用的数据库test,以便于测试数据恢复能否成功。</p><p><table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center" uetable="null"><tbody><tr class="firstRow"><td style="WORD-WRAP: break-word" bgcolor="#ddedfb">[root@Centos ~]# mysql -u root -p & amp;larr; 用root登录到MySQL服务器< br/>Enter password: & amp;larr; 输入MySQL的root用户密码< br/>Welcome to the MySQL monitor. Commands end with ; or \g.< br/>Your MySQL connection id is 13 to server version: 4.1.20< br/><br/>Type& #39;help;&#39; or& #39;\h&#39; for help. Type& #39;\c&#39; to clear the buffer.< br/><br/>mysql&gt; use test & amp;larr; 连接到测试用的test数据库< br/>Reading table information for completion of table and column names< br/>You can turn off this feature to get a quicker startup with -A< br/><br/>Database changed< br/>mysql&gt; drop table test; & amp;larr; 删除数据中的表< br/>Query OK, 0 rows affected (0.04 sec)< br/><br/>mysql&gt; drop database test; & amp;larr; 删除测试用数据库test< br/>Query OK, 0 rows affected (0.01 sec)< br/><br/>mysql&gt; show databases;< br/>+---------------+< br/>| Database |< br/>+---------------+< br/>| mysql | </td></tr></tbody></table></p>http://www.downcc.com/tech/3921.htmlMySQL2015/02/20 14:06:01<p>下面看图使用该工具创建数据库和导入数据。<a href="http://www.downcc.com/soft/804.html" target="_blank"><span style="COLOR: #41b80f">navicat</span></a> 8 下载地址</p><p>1</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限1" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183327600.jpg" width="489" height="446"/></p><p>2</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限2" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183327384.jpg" width="496" height="336"/></p><p>3</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限3" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329426.jpg" width="478" height="505"/></p><p>4</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限4" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329472.jpg" width="491" height="433"/></p><p>5</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限5" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329417.jpg" width="487" height="426"/></p><p>6</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限6" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329370.jpg" width="425" height="351"/></p><p>7</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限7" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329722.jpg" width="402" height="232"/></p><p>8</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限8" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329957.jpg" width="434" height="353"/></p><p>9</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限9" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329771.jpg" width="633" height="416"/></p><p>10</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限10" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329878.jpg"/></p><p>11</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="使用navicat 8实现创建数据库和导入数据 管理用户与权限11" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329713.jpg" width="401" height="357"/></p><p>12。教程完毕。<br/><br/><strong>2,管理建立用户和分配用户权限</strong></p><p>在这里,我们可以发现root是MySQL最高级别权限的用户,它拥有查看、修改和删除MySQL软件中所有数据库的权限。当需要有多个数据库,并且分配给不同的用户使用,多个用户之间只有查看自己对应数据库的权限,不相互干扰,那么需要怎么做呢?</p><p>答案很简单,建立多个数据库和用户,给用户设置管理指定数据库的权限。操作方法如下:</p><p>鼠标右键点击“localhost_3306” 连接,选择“创建数据库”,如下图:</p><p style="TEXT-ALIGN: center"><img style="CURSOR: pointer" title="点击查看大图" border="0" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183329166.jpg"/></p><p>“键入数据库名”处填写你想命名的数据库名字,例如:xunmei,“字符集”和“整理”都保持默认不变,点“确定”。</p><p>再点击顶部的“管理用户”,如下图:</p><p style="TEXT-ALIGN: center"><img style="CURSOR: pointer" title="点击查看大图" border="0" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183330362.jpg"/></p><p>在弹出的“添加用户”窗口中,“用户名”处输入你想设置的用户名,例如xmuser。“主机”处输入localhost,“密码”和“确认密码”处输入您想设置密码,例如xunmei123,然后点“确定”。</p><p>然后点击刚才建立用户左侧的加号<img style="CURSOR: pointer" title="点击查看大图" border="0" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183330129.jpg"/> ,展开就可以看到多个数据库。点到刚才建立的数据库xunmei再点击右边的“全选”,再点击“保存”。这时xunmei数据库上会有一个黄色锁图标,它表示xmuser用户对xunmei数据库有管理权限。如下图:</p><p style="TEXT-ALIGN: center"><img style="CURSOR: pointer" title="点击查看大图" border="0" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-4/2012419183330459.jpg"/></p><p>设置到此完成。为了验证我们的设置是否正确,我们可以用刚才建立的用户xmuser和密码xunmei123来连接localhost主机地址。连上后,我们发现该用户只能查看xunmei数据库和临时的information_schema虚拟数据库,由此证明之前的设置是正确的,教程到此完毕。</p>http://www.downcc.com/tech/4294.htmlSQL Server2015/02/14 10:12:33<p>解决方法... 关于SQL安装被挂起的修复大家可能都遇到过当SQL被删除后需要重新安装时,进入安装界面就会出现SQL错误提示:< br/>从前的安装程序操作使安装程序操作挂起,需要重新启动计算机 然而这些都是白费劲,不管你重新启动多少次也都无济于事,下面我就讲讲怎样能够解除安装或升级时文件被挂起的操作。< br/>点击 开始 运行 输入:regedit 打开注册表找到如下目录HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager删除PendingFileRenameOperations 再来安装SQL呵呵一切正常如初了!希望这些能有一点点帮助,从此再也不用盲目的重新安装系统了。< br/>解决sql server安装挂起 在安装sql server时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。无法进行下去。 参考有关资料后,以下步骤基本可以解决:< br/>1)添加/删除程序中彻底删除sql server。< br/>2)将没有删除的sql server目录也删除掉。<br/>3)打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Session Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目。< br/>4)删除注册表中跟sql server相关的键 SQL Server 无法安装,“文件挂起” 安装SQL Server 2000作开发,可是每次安装都提示“以前的某个程序安装已在安装计算计上创建挂起的文件操作。运行安装程序之前必须重新启动计算机。”重新启动了计算机之后,问题却丝毫没有解决,依然提示这样的话。< br/>A: 先删除您的 SQL Server 2000,必要的时候删除 Program Files\\Microsoft SQL Server 文件夹.<br/>B: 打开注册表, 在&quot;开始&quot;--&quot;运行&quot;键入& quot;regedit&quot; ;按下列顺序点击打开; + HKEY_LOCAL_MACHINE , + SOFTWART, + Microsoft, + Windows, + CurrentVersion, + Setup , + ExceptionComponents,3 将 ExceptionComponents 下面的文件夹全部删除!, 如 {60BFF50D-FB2C-4498-A577-C9548C390BB9} {60BFF50D-FB2C-4498-A577-C9548C390BB9} {60BFF50D-FB2C-4498-A577-C9548C390BB9} {60BFF50D-FB2C-4498-A577-C9548C390BB9}< br/>C: 先把SQL Server卸载,再把安装时产生的“Microsoft SQL Server”文件夹删掉,在运行注册表,把HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft SQL Server,和HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SQL Server全部删掉,(注意要把Microsoft SQL Server文件夹整个删掉),然后重起。</p><p>答案补充< br/>二.1 先运行你的安装程序,当提示挂起时,点击“确定”,切记,不要退出安装程序,用ALT+Tal键切换,<br/>点击“开始-运行”,输入“regedit”,打开注册表< br/>2 找到目录HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 3 删除其中的“PendingFileRenameOperations”(在这里说明一下,PendingFileRenameOperations文件位于Session Manager右侧,即当你点击Session Manager时,在右边就可以看到了) 4 关闭注册表 5 重新开始安装SQL Server 2000,一切OK了。简单吧, 问题解决了,哈哈。</p><p>或者下载:安装SQL挂起解决工具 美化版:<a href="http://www.downcc.com/soft/11962.html" target="_blank" textvalue="http://www.downcc.com/soft/11962.html">http://www.downcc.com/soft/11962.html</a></p>http://www.downcc.com/tech/3517.htmlSQL Server2015/02/11 09:56:08<p>SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份。这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数据库服务器,备份服务器只在主服务器出现故障时投入使用。它是一种优于文件备份的数据库备份解决方案。</p><p>&nbsp;在选择数据库同步备份解决方案时,我们评估了两种方式:SQL Server 2008的数据库镜像和SQL Server 2008数据库复制。数据库镜像的优点是系统能自动发现主服务器故障,并且自动切换至镜像服务器。但缺点是配置复杂,镜像数据库中的数据不可见(在SQL Server Management Studio中,只能看到镜像数据库处于镜像状态,无法进行任何数据库操作,最简单的查询也不行。想眼见为实,看看镜像数据库中的数据是否正确都不行。只有将镜像数据库切换主数据库才可见)。如果你要使用数据库镜像,强烈推荐killkill写的SQL Server 2005 镜像构建手册,我们就是按照这篇文章完成了数据库镜像部署测试。</p><p>最终,我们选择了SQL Server 2008数据库复制。</p><p>下面通过一个示例和大家一起学习一下如何部署SQL Server 2008数据库复制。</p><p>测试环境:Windows Server 2008 R2 + SQL Server 2008 R2(英文版),两台服务器,一台主数据库服务器CNBlogsDB1,一台备份数据库服务器CNBlogsDB2。</p><p>复制原理:我们采用的是基于快照的事务复制。主数据库服务器生成快照,备份库服务器读取并加载该快照,然后不停地从主数据库服务器复制事务日志。见下图:</p><p style="text-indent: 0px"><img title="grid.ai" alt="grid.ai" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193812488.gif" border="0"/></p><p>图片来自SQL Server联机丛书</p><p>安装与配置步骤:</p><p>一、在两台服务器上安装好SQL Server 2008 R2,主要安装的组件:Database Engine(含SQL Server Replication),Management Tools。</p><p>二、主数据库服务器(发布服务器)的配置:</p><p>1. 在主数据库服务器CNBlogsDB1新建示例数据库CNBlogsDemo(注意Recovery mode要使用默认值Full,只有这个模式才能进行事务复制),然后建立一张测试表,比如:CNBlogsTest。</p><p style="text-indent: 0px"><img title="cnblogs_test" alt="cnblogs_test" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193813416.jpg" border="0"/></p><p>2. 设置存放快照的文件夹:</p><p>创建发布之前,先设置一下存放快照的文件夹,创建发布后会在该文件夹生成快照文件,订阅服务器需要在初始化时加载该快照文件。</p><p>选择Replication》Local Publications》属性,在出现的窗口中选择Publishers,如下图:</p><p style="text-indent: 0px"><img title="20100826-8" alt="20100826-8" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814874.jpg" width="600" border="0"/></p><p>点击红框处的按钮,出现设置窗口:</p><p style="text-indent: 0px"><img title="20100826-9" alt="20100826-9" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814132.jpg" border="0"/></p><p>在Default Snapshot Folder中设置快照文件存放路径。</p><p>3. 在主数据库服务器创建发布:</p><p>在Replication》Local Publications中选择New Publication,出现一个向导。先选择要发布的数据库CNBlogsDemo,然后选择发布类型Transational publication,如下图:</p><p style="text-indent: 0px"><img title="Transationalpublication" alt="Transationalpublication" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814331.jpg" border="0"/></p><p>点击Next,出现错误:</p><p style="text-indent: 0px"><img title="20100826-1" alt="20100826-1" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814254.jpg" border="0"/></p><p>原来所有要复制的表都需要有主键,刚才建CNBlogsTest表时,没有建主键。建一下主键,并重新启动向导就可以了。</p><p>接着选择要复制的对象:</p><p style="text-indent: 0px"><img title="20100826-2" alt="20100826-2" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814439.jpg" border="0"/></p><p>点Next,Next,进入Snapshot Agent窗口,选择Create a snapshot immediately and keep the snapshot available to initialize subscriptions,见下图:</p><p style="text-indent: 0px"><img title="20100826-3" alt="20100826-3" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814954.jpg" border="0"/></p><p>Next,进入Agent Security:</p><p style="text-indent: 0px"><img title="20100826-4" alt="20100826-4" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814966.jpg" border="0"/></p><p>选择Security Settings,进行相应的帐户设置:</p><p style="text-indent: 0px"><img title="20100826-5" alt="20100826-5" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814706.jpg" border="0"/></p><p>一个是设置运行Snapshot Agent的Windows帐户,我们这里选择与SQL Server Agent同样的帐户。</p><p>一个是设置连接发布服务器的SQL帐户,我们这里就用主数据库服务器的sa帐户。</p><p>继续:OK,Next,Next,为这个发布起个名字:</p><p>&nbsp;<img title="20100826-7" alt="20100826-7" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814822.jpg" border="0"/></p><p>点击Finish,就开始正式创建发布,创建成功就会出现如下窗口:</p><p style="text-indent: 0px"><img title="20100826-10" alt="20100826-10" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814895.jpg" border="0"/></p><p>这时查看快照文件夹,就会看到unc文件夹,快照文件就在这个文件夹中。</p><p>这里要考虑这样一个问题,如何让订阅服务器通过网络访问这个快照文件夹。</p><p>我们在这个问题上折腾了一些时间,本来想通过共享文件夹的方式,但又不想打开匿名共享,折腾了半天,没搞定订阅服务器访问共享文件夹用户验证的问题。于是采用了FTP的方式,所以,下面介绍一下如何让订阅服务器通过FTP访问快照文件。</p><p>4. 设置快照的FTP访问</p><p>首先在主数据库服务器上开通FTP服务,建立一个指向快照文件夹的FTP站点,设置好可以远程连接的FTP帐户。然后在这台发布服务器设置一下FTP客户端配置。配置方法如下:</p><p>在Replication》Local Publications中选择刚才创建的发布[CNBlogsDemo]:CNBlogsDemo_Publication,选择属性》FTP Snapshot,如下图:</p><p>&nbsp;<img title="20100826-11" alt="20100826-11" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814802.jpg" width="600" border="0"/></p><p>选中Allow Subscribers to download snapshot files using FTP,并设置一下FTP客户端连接参数,订阅服务器就是通过这里的设置连接FTP服务器的(注:Path from the FTP root folder的设置要和上图一样,设置为:/ftp)。</p><p><span style="display: none">[page_break]</span></p><p>点击OK,这时会在快照文件夹中创建一个ftp文件夹,并在该文件夹中生成快照文件。</p><p>这样,发布服务器就配置好了,下面配置订阅服务器。</p><p>三、备份数据库服务器(订阅服务器)的配置:</p><p>进入订阅服务器CNBlogsDB2,创建与发布服务器同名的数据库CNBlogsDemo,使用完全恢复模式。</p><p>在Replication》Local Subscriptions中选择New Subscriptions,进入向导。</p><p>Next,进入选择发布服务器的窗口,选择Find SQL Server Publisher,出现服务器连接窗口:</p><p style="text-indent: 0px"><img title="20100826-12" alt="20100826-12" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193814711.jpg" border="0"/></p><p>这里要注意的是Server Name中一定要填写发布服务器的计算机名,如果计算机名连接不上,要在hosts文件中加一个IP地址解析。</p><p>成功连接发布服务器之后,就可以看到刚才在主数据库服务器上创建的发布:</p><p style="text-indent: 0px"><img title="20100826-13" alt="20100826-13" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193815741.jpg" border="0"/></p><p>Next,进入&quot;分发代理工作位置&quot;的选择窗口:</p><p style="text-indent: 0px"><img title="20100826-14" alt="20100826-14" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193815455.jpg" border="0"/></p><p>我们这里选择pull subscriptions,把数据给拉过来,这样主数据库服务器的负担会轻些。</p><p>Next,选择订阅服务器上的数据库,之前我们已经建好同名的数据库,所以系统自己会找到。</p><p>Next,进入分发代理安全设置窗口:</p><p style="text-indent: 0px"><img title="20100826-15" alt="20100826-15" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193815471.jpg" border="0"/></p><p>点击红框内的按钮,进入设置窗口:</p><p style="text-indent: 0px"><img title="20100826-16" alt="20100826-16" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193815350.jpg" border="0"/></p><p>设置如上图,Connect to the Distributor处设置的是发布服务器的sa帐户。</p><p>OK, Next, Next, Next:</p><p style="text-indent: 0px"><img title="20100826-17" alt="20100826-17" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-2/201229193815753.jpg" border="0"/></p>http://www.downcc.com/tech/3495.htmlSQL Server2015/02/03 20:32:47<p>装了一天终于装上了sql server 2008 express sp1版,以下是几个需要注意的地方:<br/><br/>必须先安装dot net 3.5 sp1</p><p>机器名不能和用户名相同:第二个问题导致安装错误简直太不可思议了!</p><p>需要在administrator账户下安装</p><p>最好关闭360安全卫士,据说打开的话有些地方没有注册上。</p>http://www.downcc.com/tech/4086.htmlMySQL2015/01/24 09:29:58<p>一、下载MYSQL管理器MYSQL-Front中文版,点击此处下载<a href="http://www.downcc.com/soft/9338.html" target="_blank" textvalue="MYSQL-Front中文版">MYSQL-Front中文版</a>(含其他多语种) 默认安装为中文语言。<br/>二、解压安装后,运行MySQL-Front.exe,可以系统设置里面设置语言,选择简体中文版本 。<br/><img style="CURSOR: pointer" title="MYSQL-Front中文版使用图文教程1" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-6/2012626104940591.jpg"/><br/><br/>三、打开登录信息,输入MYSQL数据库服务器相关参数:< br/><br/><img style="CURSOR: pointer" title="MYSQL-Front中文版使用图文教程2" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-6/2012626104942165.jpg"/><br/><br/>四、输入MYSQL服务器的IP地址,例如:202.101.98.55,如下图< br/><br/><img style="CURSOR: pointer" title="MYSQL-Front中文版使用图文教程3" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-6/2012626104942516.jpg"/><br/><br/>五、输入MYSQL服务器的用户名和密码,以及MYSQL的数据库名称,点击确定后,选择&quot;打开&quot;,如下图:< br/><br/><img style="CURSOR: pointer" title="MYSQL-Front中文版使用图文教程4" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-6/2012626104942998.jpg"/><br/><br/>六、如果输入的MYSQL数据库的IP、用户名、密码、数据库都正确后,就可以打开服务器了,然后通过 视图-&gt; SQL编辑器 将MYSQL的查询语句复制到SQL编辑器中,便可以迅速的将MYSQL数据库导入了。< br/><br/><img style="CURSOR: pointer" title="MYSQL-Front中文版使用图文教程5" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-6/2012626104942536.jpg"/><br/><br/>七、MYSQL管理器的 对象浏览器、数据浏览器 可方便的建立、修改数据库表的结构及数据< br/>补充说明:MySQL-Front软件操作简单,是一款非常不错的MYSQL管理软件,非常容易上手,初次使用该软件可能会有一些使用操作上的疑惑,多尝试几次就会熟练的。</p>http://www.downcc.com/tech/4707.htmlMySQL2015/01/05 21:48:46<p>MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持,MySQL 的执行性能非常高,运行速度非常快,并非常容易使用。是一个非常捧的数据库,PHP 和MYSQL完美组合。</p><p>下面的是MySQL安装的图解,用的可执行文件安装的,双击解压缩,运行&quot;setup.exe&quot;,出现如下界面</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201824861.jpg"/></p><p>mysql安装图文教程1</p><p>mysql安装向导启动,按&quot;Next&quot;继续</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201827691.jpg"/></p><p>mysql图文安装教程2</p><p>选择安装类型,有&quot;Typical(默认)&quot;、&quot;Complete(完全)&quot;、&quot;Custom(用户自定义)&quot;三个选项,我们选择&quot;Custom&quot;,有更多的选项,也方便熟悉安装过程:</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201828663.jpg"/></p><p>mysql图文安装教程3</p><p>在&quot;Developer Components(开发者部分)&quot;上左键单击,选择&quot;This feature, and all subfeatures, will be installed on local hard drive.&quot;,即&quot;此部分,及下属子部分内容,全部安装在本地硬盘上&quot;。在上面的&quot;MySQL Server(mysql服务器)&quot;、&quot;Client Programs(mysql客户端程序)&quot;、&quot;Documentation(文档)&quot;也如此操作,以保证安装所有文件。点选&quot;Change...&quot;,手动指定安装目录。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201831447.jpg"/></p><p>mysql图文安装教程4</p><p>填上安装目录,我的是&quot;F:\Server\MySQL\MySQL Server 5.0&quot;,也建议不要放在与操作系统同一分区,这样可以防止系统备份还原的时候,数据被清空。按&quot;OK&quot;继续。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201832368.jpg"/></p><p>mysql图文安装教程5</p><p>返回刚才的界面,按&quot;Next&quot;继续</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201834331.jpg"/></p><p>mysql图文安装教程6</p><p>确认一下先前的设置,如果有误,按&quot;Back&quot;返回重做。按&quot;Install&quot;开始安装。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201836950.jpg"/></p><p>mysql图文安装教程7</p><p>正在安装中,请稍候,直到出现下面的界面</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201837625.jpg"/></p><p>mysql图文安装教程8</p><p>这里是询问你是否要注册一个mysql.com的账号,或是使用已有的账号登陆mysql.com,一般不需要了,点选&quot;Skip Sign-Up&quot;,按&quot;Next&quot;略过此步骤。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201839113.jpg"/></p><p>mysql图文安装教程9</p><p>现在软件安装完成了,出现上面的界面,这里有一个很好的功能,mysql配置向导,不用向以前一样,自己手动乱七八糟的配置my.ini了,将& quot;Configure the Mysql Server now&quot;前面的勾打上,点&quot;Finish&quot;结束软件的安装并启动mysql配置向导。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201841542.jpg"/></p><p>mysql图文安装教程10</p><p>mysql配置向导启动界面,按&quot;Next&quot;继续</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201842294.jpg"/></p><p>mysql图文安装教程11</p><p>选择配置方式,&quot;Detailed Configuration(手动精确配置)&quot;、&quot;Standard Configuration(标准配置)&quot;,我们选择&quot;Detailed Configuration&quot;,方便熟悉配置过程。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201844660.jpg"/></p><p>mysql图文安装教程12</p><p>选择服务器类型,&quot;Developer Machine(开发测试类,mysql占用很少资源)&quot;、&quot;Server Machine(服务器类型,mysql占用较多资源)&quot;、&quot;Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)&quot;,大家根据自己的类型选择了,一般选&quot;Server Machine&quot;,不会太少,也不会占满。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201846466.jpg"/></p><p>图13</p><p>选择mysql数据库的大致用途,&quot;Multifunctional Database(通用多功能型,好)&quot;、&quot;Transactional Database Only(服务器类型,专注于事务处理,一般)&quot;、&quot;Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),随自己的用途而选择了,我这里选择&quot;Transactional Database Only&quot;,按&quot;Next&quot;继续。</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201849140.jpg"/></p><p>图14</p><p>对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间,如果修改了,要记住位置,重装的时候要选择一样的地方,否则可能会造成数据库损坏,当然,对数据库做个备份就没问题了,这里不详述。我这里没有修改,使用用默认位置,直接按&quot;Next&quot;继续</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201850640.jpg"/></p><p>图15</p><p>选择您的网站的一般mysql访问量,同时连接的数目,&quot;Decision Support(DSS)/OLAP(20个左右)&quot;、&quot;Online Transaction Processing(OLTP)(500个左右)&quot;、&quot;Manual Setting(手动设置,自己输一个数)&quot;,我这里选&quot;Online Transaction Processing(OLTP)&quot;,自己的服务器,应该够用了,按&quot;Next&quot;继续</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201853768.jpg"/></p><p>图16</p><p>是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,我这里启用,把前面的勾打上,Port Number:3306,在这个页面上,您还可以选择&quot;启用标准模式&quot;(Enable Strict Mode),这样MySQL就不会允许细小的语法错误。如果您还是个新手,我建议您取消标准模式以减少麻烦。但熟悉MySQL以后,尽量使用标准模式,因为它可以降低有害数据进入数据库的可能性。按&quot;Next&quot;继续</p><p><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/2013322201854279.jpg"/></p><p>图17</p><p>西文编码,第二个是多字节的通用utf8编码,都不是我们通用的编码,这里选择第三个,然后在Character Set那里选择或填入&quot;gbk&quot;,当然也可以用&quot;gb2312&quot;,区别就是gbk的字库容量大,包括了gb2312的所有汉字,并且加上了繁体字、和其它乱七八糟的字&amp;mdash;&amp;mdash;使用mysql的时候,在执行数据操作命令之前运行一次&quot;SET NAMES GBK;&quot;(运行一次就行了,GBK可以替换为其它值,视这里的设置而定),就可以正常的使用汉字(或其它文字)了,否则不能正常显示汉字。按& quot;Next&quot;继续。</p>http://www.downcc.com/tech/4157.htmlSQL Server2014/11/10 17:34:34<p>downcc绿色资源网的一台数据库存SQL SERVER 2005 的日志文件达到了 200多个G一直无法清理,想了很多的办法也不行。</p><p>原来一直用</p><p><a href="http://www.downcc.com/soft/9851.html">http://www.downcc.com/soft/9851.html</a></p><table style="TEXT-ALIGN: left; LINE-HEIGHT: 18px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 10px auto; BORDER-SPACING: 1px; WIDTH: 450px; BORDER-COLLAPSE: separate; BACKGROUND: #000; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: #333; FONT-SIZE: 12px; BORDER-LEFT-WIDTH: 0px" cellspacing="1"><tbody><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; WIDTH: 100px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #ffffff; PADDING-TOP: 8px">软件名称:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">MS SQL server 日志收缩工具(删除mssql .LDF日志)</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">软件版本:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">&nbsp;</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">软件大小:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">252KB</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">软件语言:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">中文</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">适用平台:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px">WinXP</td></tr><tr><th style="TEXT-ALIGN: center; PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #0476b3; COLOR: #fff; PADDING-TOP: 8px">下载地址:</th><td style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #fff; PADDING-TOP: 8px"><a style="COLOR: #d50000; FONT-WEIGHT: bold; TEXT-DECORATION: underline" href="http://www.downcc.com/soft/9851.html">MS SQL server 日志收缩工具(删除mssql .LDF日志)</a></td></tr></tbody></table><p>这个工具一清就可以清干净的。</p><p>最后采用了一个比较死的办法。采用 分离,然后再删除日志文件再附加来生成一个新的日志文件。</p><p><strong><span style="COLOR: #ff0000">切记在操作前先把SQL好好的备份一下,要是丢失了数据西西可互不起这个责任。</span></strong></p><p>第一步 当然还是打开企业管理器了</p><p style="TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/20129922276855.jpg"/></p><p>在分离前最好是先把IIS之类的正在连接数据库的程序关一下,要不然老半天也分离不了。</p><p style="TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/20129922277874.jpg" width="600"/></p><p>也可以选择一下 删除链接 这样可能分离会快一点。</p><p>我们再定位到数据库所在的硬盘位置</p><p style="TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/20129922277985.jpg"/></p><p>我们为了保除起见可以把 qq2.mdf备份一份,然后再将 qq2_log.ldf 这个文件重命一下名(200G的文件实在是没地方可以备份)。</p><p>然后我们再来附加数据库</p><p style="TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/20129922277385.jpg"/></p><p style="TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/20129922277159.jpg" width="600"/></p><p>附加到刚刚那个 mdf的文件。注意看下面会提示 .ldf 文件找不到。</p><p style="TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/20129922277421.jpg" width="600"/></p><p>不管他了。选择 .ldf这一分把他给删掉。</p><p>然后再确定,哈还原成功了。系统自动生成了一个新的 ldf 文件&nbsp; 504KB</p><p>见建大家先用上面的那个工具去清一下,,如果清不到再用这个死办法来删除日志</p>http://www.downcc.com/tech/5340.htmlOracle2014/11/10 16:37:29<p>导出是用MS自带的ole db provider访问接口导出:</p><p>1.右键要导出的数据库【任务】-》【导出数据】-》设置导出数据源</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321013139.png" width="600"/></p><p>2.设置oracle为目标数据源</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321013431.png" width="600"/></p><p>3.设置目标表(创建)</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321014438.png" width="600"/></p><p>4.编辑字段</p><p>由于sqlserver的t-sql与oracle的pl/sql定义数据类型不一样,这里注意要修改类型:</p><p>int -&gt; number (注意设置number的精度)</p><p>nvarchar -&gt; varchar2 (最好是nvarchar2,但ms这个驱动只提供这种转换)</p><p>datetime -&gt; date</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321014988.png" width="600"/></p><p>也可以直接编辑sql,注意pl/sql的编写方式,编辑完之后下一步</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321014116.png" width="600"/></p><p>5.这里的datetime转成date是有警告的,不过没关系,然后可以忽略出错与截断,下一步:</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321014688.png" width="600"/></p><p>6.点击完成</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321015234.png" width="600"/></p><p>在oracle em里面查看刚才导出的数据表及数据</p><p style="TEXT-ALIGN: center; TEXT-INDENT: 0px"><img style="CURSOR: pointer" title="点击查看大图" alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/201472321015133.png" width="600"/></p>http://www.downcc.com/tech/5381.htmlSQL Server2014/10/16 22:37:14<p><strong>方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容)</strong>< br />< br /> varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace< br />< br /> 替换 text ntext 数据类型字段的语句< br />& nbsp;</p>< div ><br />< strong>update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么')< /strong><br />< br />< strong>方法二:(替换其他数据类型字段的语句,实际应用中不常见)</strong>< br />< br />& nbsp;</div>< div ><strong>update [表名] set 字段名 = replace(与前面一样的字段名,'原本内容','想要替换成什么')< br />< /strong></div>< p><strong>以下是补充:</strong></p>< p><strong>1。如何批量替换ntext字段里面的数据< br />< /strong>问题描述:< br /> 我想把数据库中News表中的字段content中的一些字符批量替换。< br /> 我的content字段是ntext类型的。< br />< br /> 我想替换的字段是content字段,我想把里面的www.downcc.com替换成http://www.downcc.com,替换方法是:< br />< br /> update News< br /> set content = replace(cast(content as varchar(8000)),< br /> 'www.downcc.com',< br /> 'http://www.downcc.com')< br />< br />< strong>2。如何批量替换varchar和nvarchar类型</strong>< br /> varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace。< br /> update 表名< br /> set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值')< br /> update 表名< br /> set ntext类型字段名=replace(convert(nvarchar(4000),ntext类型字段名),'要替换的字符','替换成的值')< br />< br /> 不过上面的方法,对于text或ntext字段超过8000的时候就不能用了,一般可以用asp程序来实现,先读取内容替换后,保存到数据库中。<br />< br /> 临时解决方法:就是在生成静态的时间,可以先替换再输出,这里有个貌似不错的解决方法了。</p>http://www.downcc.com/tech/5379.htmlSQL Server2014/10/14 21:38:23<p>有人问我<a target="_blank" href="http://www.downcc.com/zhuanti/sqlserver.html">sqlserver</a>怎么查看版本号呢?下面给大家整理了一些SQL Server版本号查看sql语句,可以查看SQL Server 2000 、2005 、2008版本号</p>< p>今天要查询自己的装的sqlserver2008 是否是R2版本,搜索了下,发现很多人查询此问题,现在记录如下,通过版本命令查询</p>< p>同时也了解了哥哥sql server的对应版本好,一看就非常清晰了,记录下</p>< p><strong>1、查看 SQL Server 2005/2008 版本号</strong></p>< p><strong>select serverproperty('productversion') ,serverproperty('productlevel') ,serverproperty('edition')</strong></p>< p>下面是 SQL Server 2005 版本号查询结果信息:<br /> version level edition<br />& mdash;&mdash;&mdash;&mdash;& mdash;-& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;-<br /> 9.00.3042.00 SP2 Enterprise Edition<br /> 下表是 SQL Server 2005 版本号信息:<br /> SQL Server 2005 版本号 SQL Server 2005 版本描述<br />& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br /> 2005.90.1399 RTM (Release to Manufacturing)<br /> 2005.90.2047 SQL Server 2005 SP1<br /> 2005.90.3042 SQL Server 2005 SP2<br /> 2005.90.4035 SQL Server 2005 SP3<br /> 2005.90.5000 SQL Server 2005 SP4<br /> 下表是 SQL Server 2008 版本号信息:<br /> SQL Server 2008版本号 SQL Server 2008 版本描述<br />& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br /> 10.0.1600.22 RTM<br /> 10.00.2531.00 SQL Server 2008 SP1<br /> 10.00.4000.00 SQL Server 2008 SP2<br /> 10.50.1600.1 SQL Server 2008 R2 (RTM)</p>< p><strong>二、查看 SQL Server 2000 版本号</strong></p>< p><strong>select serverproperty('productversion') ,serverproperty('productlevel'),serverproperty('edition')</strong></p>< p>下面是 SQL Server 2000 版本号查询结果信息:<br /> version level edition<br />& mdash;&mdash;&mdash;&mdash;& mdash;-& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;-<br /> 8.00.2039 SP4 Enterprise Edition<br /> 下表是 SQL Server 2000 各个版本号信息:<br /> SQL Server 2000 版本号 SQL Server 2000 版本描述<br />& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br /> 2000.80.194.0 RTM (Release to Manufacturing)<br /> 2000.80.384.0 SQL Server 2000 SP1<br /> 2000.80.534.0 SQL Server 2000 SP2<br /> 2000.80.760.0 SQL Server 2000 SP3/SP3a<br /> 2000.8.00.2039 SQL Server 2000 SP4</p>< p>查看 SQL Server 版本号的通用方法:@@version</p>< p>select @@version< br /> Microsoft SQL Server 2000& ndash; 8.00.2039 (Intel X86)<br /> May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation<br /> Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)<br /> Microsoft SQL Server 2005& ndash; 9.00.3042.00 (Intel X86)<br /> Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation<br /> Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)</p>< p>可以看出,@@version 版本号结果中还包含 OS 版本信息。<br /> 下面的概念对于理解 SQL Server 的并行实例的 SQL Server 行为以及特定于 SQL Server 2008 R2 和 SQL Server 2008 并行实例的情况十分有用。<br /> SQL Server 的标准产品版本格式为 MM.nn.bbbb.rr,其中每一片断定义为:<br /> MM& ndash; 主版本<br /> nn& ndash; 次版本<br /> bbbb& ndash; 内部版本号<br /> rr& ndash; 内部修订版本号</p>< p>在 SQL Server 的每个主版本或次版本中,都会增加该版本号,以便与之前的版本区分。这一对版本的更改出于多种目的。包括在用户界面中显示版本信息,控制在升级期间替换文件的方式,并且还作为后续版本间在功能上进行区分的机制。</p>< p>SQL Server 2008 R2 是 SQL Server 2008 的一个次要升级。这意味着它与 SQL Server 2008 共享相同的主版本号,并且会增加次版本号。SQL Server 2008 R2 的产品版本为 10.50.bbbb.rr。与之相比的是,SQL Server 2008 的产品版本是 10.0.bbbb.rr。</p>http://www.downcc.com/tech/5378.htmlSQL Server2014/10/14 21:33:17<p>我们今天主要向大家描述的是正确查看< a target="_blank" href="http://www.downcc.com/soft/13332.html">SQL Server 2005</a> 版本号的实际操作步骤,以及对其在实际操作中要用到的相关信息的描述,下面就是文章的详细内容的描述,望你在浏览之后会有更深的体会。<strong>< /strong></p>< p><strong>查看 SQL Server 2005 版本号< /strong></p>< pre><ol ><li ><span><span>select&nbsp;serverproperty(&amp;#039;productversion&amp;#039;)& nbsp;</span></span></li><li><span>,serverproperty(&amp;#039;productlevel&amp;#039;)& nbsp;</span></li><li ><span>,serverproperty(&amp;#039;edition&amp;#039;)&nbsp;</span></li></ol></pre>< p>下面是 SQL Server 2005 版本号查询结果信息:</p>< p><strong>一、查看 SQL Server 2005 版本号< /strong></p>< pre><ol ><li ><span><span>select&nbsp;serverproperty('productversion')& nbsp;</span></span></li><li><span>,serverproperty('productlevel')& nbsp;</span></li><li ><span>,serverproperty('edition')&nbsp;</span></li></ol></pre>< p>下面是 SQL Server 2005 版本号查询结果信息:</p>< pre><ol ><li ><span><span>version&nbsp;level&nbsp;edition& nbsp;</span></span></li><li><span>9.00.3042.00&nbsp;SP2&nbsp;Enterprise&nbsp;Edition&nbsp;</span></li></ol></pre>< p>下表是 SQL Server 2005 版本号信息:</p>< p>SQL Server 2005 版本号 SQL Server 2005 版本描述</p>< pre><ol ><li ><span><span>2005.90.1399&nbsp;RTM&nbsp;(Release&nbsp;to&nbsp;Manufacturing)& nbsp;</span></span></li><li><span>2005.90.2047&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;SP1& nbsp;</span></li><li ><span>2005.90.3042&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;SP2&nbsp;</span></li></ol></pre>< p><strong>二、查看 SQL Server 2000 版本号< /strong></p>< pre><ol ><li ><span><span>select&nbsp;serverproperty('productversion')& nbsp;</span></span></li><li><span>,serverproperty('productlevel')& nbsp;</span></li><li ><span>,serverproperty('edition')&nbsp;</span></li></ol></pre>< p>下面是 SQL Server 2000 版本号查询结果信息:</p>< pre><ol ><li ><span><span>version&nbsp;level&nbsp;edition& nbsp;</span></span></li><li><span>8.00.2039&nbsp;SP4&nbsp;Enterprise&nbsp;Edition&nbsp;</span></li></ol></pre>< p>下表是 SQL Server 2000 各个版本号信息:</p>< p>SQL Server 2000 版本号 SQL Server 2000 版本描述</p>< pre><ol ><li ><span><span>2000.80.194.0&nbsp;RTM&nbsp;(Release&nbsp;to&nbsp;Manufacturing)& nbsp;</span></span></li><li><span>2000.80.384.0&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;SP1& nbsp;</span></li><li ><span>2000.80.534.0&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;SP2& nbsp;</span></li><li><span>2000.80.760.0&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;SP3& nbsp;</span></li><li ><span>2000.80.760.0&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;SP3a& nbsp;</span></li><li><span>2000.8.00.2039&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;SP4&nbsp;</span></li></ol></pre>< p>查看 SQL Server 版本号的通用方法:@@version&nbsp;</p>< pre><ol ><li ><span><span>select&nbsp;@@version& nbsp;</span></span></li><li><span>Microsoft&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;-&nbsp;8.00.2039&nbsp;(Intel&nbsp;X86)& nbsp;</span></li><li ><span>May&nbsp;3&nbsp;2005&nbsp;23:18:38&nbsp;Copyright&nbsp;(c)&nbsp;1988-2003&nbsp;Microsoft&nbsp;Corporation& nbsp;</span></li><li><span>Enterprise&nbsp;Edition&nbsp;on&nbsp;Windows&nbsp;NT&nbsp;5.2&nbsp;(Build&nbsp;3790:&nbsp;Service&nbsp;Pack&nbsp;1)& nbsp;</span></li><li ><span>Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;-&nbsp;9.00.3042.00&nbsp;(Intel&nbsp;X86)& nbsp;</span></li><li><span>Feb&nbsp;9&nbsp;2007&nbsp;22:47:07&nbsp;Copyright&nbsp;(c)&nbsp;1988-2005&nbsp;Microsoft&nbsp;Corporation& nbsp;</span></li><li ><span>Enterprise&nbsp;Edition&nbsp;on&nbsp;Windows&nbsp;NT&nbsp;5.2&nbsp;(Build&nbsp;3790:&nbsp;Service&nbsp;Pack&nbsp;2)&nbsp;</span></li></ol></pre>< p>可以看出,@@version 版本号结果中还包含 OS 版本信息。同时 @@version 通用于 SQL Server 6.5 以上的版本。</p>< p>以上的相关内容就是对查看 SQL Server 2005 版本号的介绍,望你能有所收获。</p>http://www.downcc.com/tech/5371.htmlSQL Server2014/09/29 16:05:52<p><strong>01 连接<a target="_blank" href="http://www.downcc.com/zhuanti/sql.html">数据库</a></strong></p>< p>Win7下,先打开SQLServer管理工具(开始菜单/所有程序/Microsoft< a target="_blank" href="http://www.downcc.com/zhuanti/sqlserver.html">sql server</a> 2008/SQL Server Management Studio)</p>< p>会弹出&ldquo;连接到服务器对话框&rdquo;</p>< p>1 服务器类型 : 数据库引擎<br /> 2 服务器名称 : 127.0.0.13 身份验证 : Windows身份验证</p>< p>服务器名称也可以是&ldquo;<strong>(local)</strong>&rdquo;,&ldquo;<strong>.</strong>&rdquo;,&ldquo;<strong>loacalhost</strong>&rdquo;,当本机未安装网卡(驱动)时使用&ldquo;(local)&rdquo;& nbsp;注意:不包括双引号</p>< p>身份验证也可以选择SQLServer 身份验证,要有sa用户密码</p>< p>链接成功后会在左侧&ldquo;对象资源管理器&rdquo;显示相关数据库</p>< p><strong>02 新建数据库实例</strong></p>< p>在这里我们使用图形化操作</p>< p>点击127.0.0.1左侧&ldquo;+&rdquo;号,右键数据库&mdash;新建数据库</p>< p>填上数据库名,点击完成,我们就已经在本机建立了一个数据库</p>< p>我这里为了学习用,建了一个数据库(ForStudy),起名字什么的最蛋疼了....</p>< p>接着新建表,看截图,点击新建表后会显示中央显示列信息</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201492916821707.jpg" /></p>< p>我们可以在右侧&ldquo;属性&rdquo;框把名称改成自己的表名(默认Table_1)</p>< p>设置好列信息后,点击左侧工具栏中的钥匙图标可以在选中的列设置主键,如下</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201492916822192.jpg" /></p>< p>Ctrl+S 保存即可</p>< p>在&ldquo;对象资源管理器&rdquo;,依次点击打开我们刚刚创建的表(我的是dbo.student)</p>< p>右键,编辑前200行,就可以向刚建的表添加信息了</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201492916822333.jpg" /></p>< p>此时数据库中已经建好表,我们也可以对表进行增删改查各种操作</p>< p><strong>在这里多说两句,表的设计很重要,在程序开发的工程中一定要先把数据库设计好</strong></p>< p><strong>否则,等到写代码的途中需要修改数据库的时候你会发现这是有多么的操蛋...</strong></p>< p><strong>03 使用查询语句操作表</strong></p>< p>点击&ldquo;新建查询&rdquo;,在中央文本框输入我们查询语句,点击执行即可</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201492916822683.jpg" /></p>< p><strong>04 分离数据库文件</strong></p>< p>分离数据库文件,以便在不同的主机中使用该数据库</p>< p>关闭之前的查询语句文本框,在&ldquo;ForStudy&rdquo;右键-任务-分离,显示分离对话框</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201492916823361.jpg" /></p>< p>点击&ldquo;确定&rdquo;,这时我们已经把数据库文件从本机分离出去</p>< p><strong>05 导入数据库</strong></p>< p>能分离必然可以重新导入</p>< p>右键对象资源管理器里的&ldquo;数据库&rdquo;,点击&ldquo;附加&rdquo;</p>< p>在弹出的对话框中选择&ldquo;添加&rdquo;按钮,选择要添加的数据库文件(.mdf后缀的)</p>< p>比如我的是ForStudy.mdf,然后点击确定即可</p>< p><strong>小技巧:</strong></p>< p>使用sqlcmd修改sa密码:</p>< p>CMD下输入(原密码为123456新密码I2e456)</p>< p><span style="color: rgb(255,0,0); font-size: 18px"><strong>sqlcmd 实用工具</strong></span></p>< p>使用 sqlcmd 实用工具,可以在命令提示符处、在 SQLCMD 模式下的&ldquo;查询编辑器&rdquo;中、在 Windows 脚本文件中或者在 SQL Server 代理作业的操作系统 (Cmd.exe) 作业步骤中输入 Transact-SQL 语句、系统过程和脚本文件。 此实用工具使用 ODBC 执行 Transact-SQL 批处理。</p>< p><strong>重要说明</strong></p>< p>在查询编辑器的常规模式和 SQLCMD 模式下,SQL Server Management Studio 使用 Microsoft .NET Framework SqlClient 执行批处理。 从命令行运行 sqlcmd 时,sqlcmd 使用 ODBC 驱动程序。 由于可以应用不同的默认选项,因此在 SQL Server Management Studio SQLCMD 模式下以及在 sqlcmd 实用工具中执行相同的查询时,可能会看到不同的行为。</p>< p>当前,sqlcmd 在命令行选项和值之间不需要空格。 但是,在将来的版本中,在命令行选项和值之间可能需要空格。</p>< p><strong>语法</strong></p>< p>&nbsp;sqlcmd& nbsp;</p>< p>&nbsp;& nbsp;-a packet_size&nbsp;</p>< p>&nbsp;& nbsp;-A (dedicated administrator connection)</p>< p>&nbsp;& nbsp;-b (terminate batch job if there is an error)</p>< p>&nbsp;& nbsp;-c batch_terminator&nbsp;</p>< p>&nbsp;& nbsp;-C (trust the server certificate)</p>< p>&nbsp;& nbsp;-d db_name&nbsp;</p>< p>&nbsp;& nbsp;-e (echo input)</p>< p>&nbsp;& nbsp;-E (use trusted connection)</p>< p>&nbsp;& nbsp;-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]</p>< p>&nbsp;& nbsp;-h rows_per_header&nbsp;</p>< p>&nbsp;& nbsp;-H workstation_name&nbsp;</p>< p>&nbsp;& nbsp;-i input_file&nbsp;</p>< p>&nbsp;& nbsp;-I (enable quoted identifiers)</p>< p>&nbsp;& nbsp;-k[1 | 2] (remove or replace control characters)</p>< p>&nbsp;& nbsp;-K application_intent&nbsp;</p>< p>&nbsp;& nbsp;-l login_timeout&nbsp;</p>< p>&nbsp;& nbsp;-L[c] (list servers, optional clean output)</p>< p>&nbsp;& nbsp;-m error_level&nbsp;</p>< p>&nbsp;& nbsp;-M multisubnet_failover&nbsp;</p>< p>&nbsp;& nbsp;-N (encrypt connection)</p>< p>&nbsp;& nbsp;-o output_file&nbsp;</p>< p>&nbsp;& nbsp;-p[1] (print statistics, optional colon format)</p>< p>&nbsp;& nbsp;-P password&nbsp;</p>< p>&nbsp;& nbsp;-q& quot;cmdline query&quot;&nbsp;</p>< p>&nbsp;& nbsp;-Q& quot;cmdline query&quot; (and exit)</p>< p>&nbsp;& nbsp;-r[0 | 1] (msgs to stderr)</p>< p>&nbsp;& nbsp;-R (use client regional settings)</p>< p>&nbsp;& nbsp;-s col_separator&nbsp;</p>< p>&nbsp;& nbsp;-S [protocol:]server[\instance_name][,port]</p>< p>&nbsp;& nbsp;-t query_timeout&nbsp;</p>< p>&nbsp;& nbsp;-u (unicode output file)</p>< p>&nbsp;& nbsp;-U login_id&nbsp;</p>< p>&nbsp;& nbsp;-v var =& quot;value&quot;&nbsp;</p>< p>&nbsp;& nbsp;-V error_severity_level&nbsp;</p>< p>&nbsp;& nbsp;-w column_width&nbsp;</p>< p>&nbsp;& nbsp;-W (remove trailing spaces)</p>< p>&nbsp;& nbsp;-x (disable variable substitution)</p>< p>&nbsp;& nbsp;-X[1] (disable commands, startup script, environment variables and optional exit)</p>< p>&nbsp;& nbsp;-y variable_length_type_display_width&nbsp;</p>< p>&nbsp;& nbsp;-Y fixed_length_type_display_width&nbsp;</p>< p>&nbsp;& nbsp;-z new_password& nbsp;</p>< p>&nbsp;& nbsp;-Z new_password (and exit)</p>< p>&nbsp;& nbsp;-? (usage)</p>http://www.downcc.com/tech/5367.htmlMySQL2014/09/23 09:14:57<p><strong>提示:&ldquo;Starting MySQL&hellip;&hellip; ERROR! Manager of pid-file quit without updating file&rdquo;的解决办法。</strong></p>< p>删除了mysql二进制日志文件后,重新启动mysql出现这个报错的,因为磁盘空间小,那些二进制文件占用了很大的空间。所以要删除。</p>< p>后来的解决方法是,进入mysql的var目录下cd<br /> /usr/local/mysql/var/,然后vi<br /> mysql-bin.index,去掉你删除的二进制日志文件即可。如果还是没有解决查看var目录下的*.err文件进一步判断。</p>< p>关闭mysql二进制文件方法:</p>< p>vi /etc/my.cnf</p>< p>log-bin=mysql-bin</p>< p>binlog_format=mixed</p>< p>注释掉这两行,然后重启</p>http://www.downcc.com/tech/5363.htmlSQL Server2014/09/11 20:34:35<p>可能由于操作系统不同,或者在安装SQL 2008的时候已经安装SQL其他版本,因此可能会遇到问题,那么这时我们的实际经验和动手测试的能力也是非常重要的,这样才能少走弯路。</p>< p><strong>问题1:&amp;#65279;安装<a target="_blank" href="http://www.downcc.com/zhuanti/sqlserver.html">sql server</a> 2008 R2,安装过程中提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本</strong>。请在安装 SQL Server 2008 前将 Microsoft Visual Studio 2008 升级到 SP1。</p>< p>之前我的电脑上确实装了<a target="_blank" href="http://www.downcc.com/soft/12904.html">vs2008</a>,于是我准备去下载一个SP1补丁包,一看800多M的大小,本来安装这个软件就已经很麻烦了,还得花时间下载,那有没有其他更好的办法呢?其实很简单,只需要改一下注册表即可,方法如下:</p>< p><strong>解决方法:</strong></p>< p>修改注册表。</p>< p><span style="color: rgb(255,0,0)">运行注册表,将HKEY-Local-Machine/Software/Microsoft/DevDiv重命名就行</span>。</p>< p>安装好后再将其改回。</p>< p>将SQL Server安装返回上一步,然后再点下一步,这个问题就成功解决了。</p>< p><strong>问题2:安装SQL2008,提示删除SQL2005Express工具的解决方法</strong></p>< p>在安装SQL2008的时候,提示要删除SQL2005EXPRESS工具,在网上找了很多资料,终于找到一个比较方便的方法了,希望能帮助大家。修改注册表:HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\90\Tools\ShellSEM,将ShellSEM项重命名或删除即可。</p>< p><strong>无法安装 SQL Server 2008 Management Studio Express</strong></p>< p>故障现象:</p>< p>在windows7中已经安装好SQL Server 2008 Express 并且已经安装好SP3,然后从微软官网下载SQL Server 2008 Management Studio Express 安装,发现在安装过程中,没有添加 Management 工具这一项。</p>< p>解决方法:</p>< p>先使用sql server2008安装中心(在开始菜单的microsoft sql server 2008里面有)的维护功能,将express升级到具有高级服务的Express。再安装SQL Server 2008 Management Studio Express,这就可以发现工具这个选项。安装成功。</p>< p>其他提示:</p>< p>在安装SQL Server 2008 Management Studio Express 时会出现& rdquo;此程序存在已知兼容性问题&ldquo; 的对话框。如果你确认自己已经安装过 SP1 以上的文件,并已升级到具有高级服务的express,那么不用理会这个对话框,直接按& rdquo;运行程序&ldquo;这个按钮。不会有任何问题。</p>< p><strong>问题3、解决无法安装SQL Server 2008 Management Studio Express的问题</strong></p>< p><span style="line-height: 1em">我的sql server 2008 express是visual studio 2010自带的,所以当然它没有management studio ,自己下了一个安装,不过无法安装SQL Server 2008 Management Studio Express。提示未选择功能。</span><br />& nbsp;</p>< p>刚从网上找到解决方案,本人测试通过,再次分享:</p>< p>VS2010自带的SQL Server是Express简化版的,需要到&ldquo;SQL Server安装中心&gt;维护&gt;版本升级&rdquo;,把它升级成&ldquo;具有高级服务的Express&rdquo;(很快就可完成)。再运行SQL Server 2008 Management Studio Express安装包,随后会再次弹出SQL Server安装中心,选择&ldquo;安装&gt;全新SQL Server独立安装或向现有安装添加功能&rdquo;,接下去就可以添加Management Studio了。</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201491120415346.png" /></p>< p>下面是对具有高级服务的express版本的一些介绍:</p>< p>具有高级服务的 SQL Server Express 具备 SQL Server 2005 Express Edition 中的全部功能,并且还具有下列功能:</p>< p>借助 SQL Server 2005 Management Studio Express (SSMSE) 这一新的易于使用的图形管理工具,轻松管理 SQL Server Express。</p>< p>对 SQL Server 表中纯字符数据发出全文查询。 全文查询可以包括词和短语,或者词或短语的多种形式。</p>< p>对本地关系数据运行 SQL Server Reporting Services 报表。</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201491120415859.png" /></p>< p>现在,允许management studio express安装文件,出现管理工具选项了:</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-9/201491120415127.png" /></p>< p><strong>问题4、安装程序配置检查RebootRequiredCheck时失败,问题解决方法</strong></p>< p>问题描述:& nbsp;</p>< p>GlobalRules: 针对规则组&ldquo;GlobalRules&rdquo;的 SQL Server 2008 安装程序配置检查</p>< p>RebootRequiredCheck<br /> 检查是否需要挂起计算机重新启动。挂起重新启动会导致安装程序失败。<br /> 失败<br /> 需要重新启动计算机。必须重新启动计算机才能安装 SQL Server。</p>< p>其它检查都是&ldquo;已通过&rdquo;。</p>< p><strong>解决方法:</strong></p>< p><strong>还是用修改注册表的方法</strong></p>< p>1. 在开始-&gt;运行中输入regedit&nbsp;;<br /> 2. 找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 位置 ;<br /> 3. 将右边窗口中名称为PendingFileRenameOperations的项删除,然后确认 ;<br /> 4. 重新启用安装或修复程序,即可。</p>< p><strong>问题5、SQL Server 2008安装失败:Error writing to file:Microsoft.analysisServices.AdomdClient.dll.</strong></p>< p><strong>问题描述</strong></p>< p>==========</p>< p>SQL Server 2008 标准版安装在Windows Server 2008上失败,错误为:</p>< p>Error writing to file:Microsoft.analysisServices.AdomdClient.dll. Verify that you have access to that directory.</p>< p><strong>故障排查</strong></p>< p>==========</p>< p>根据错误日志,存在以下错误信息:</p>< p>1.在安装到Install_sql_common_core_Cpu32_Action : InstallFiles. Copying new files时出现以下错误信息:</p>< p>Error writing to file:Microsoft.analysisServices.AdomdClient.dll. Verify that you have access to that directory.</p>< p>2.在安装到Install_SqlBrowser_Cpu32_Action时出现以下错误信息:</p>< p>系统无法从指定的设备上读取(The system cannot read from the specified device.)</p>< p>3.在Detail.txt中存在以下错误信息:</p>< p>Bootstrap/Log/20110620_153155/Registry_SOFTWARE_Microsoft_MSSQLServer.reg_</p>< p>2011-06-20 16:07:03 Slp: 系统无法从指定的设备上读取。</p>< p>2011-06-20 16:07:03 Slp: Watson bucket for Msi based failure has been created</p>< p>2011-06-20 16:07:03 Slp: InstallPackage: MsiInstallProduct returned the result code 30.</p>< p>2011-06-20 16:07:03 Slp: Retry-able MSI return code detected: 30</p>< p>2011-06-20 16:07:03 Slp: Prompting user if they want to retry this action due to the following failure:</p>< p>2011-06-20 16:07:03 Slp: ----------------------------------------</p>< p>2011-06-20 16:07:03 Slp: The following is an exception stack listing the exceptions in outermost to innermost order</p>< p>2011-06-20 16:07:03 Slp: Inner exceptions are being indented</p>< p>2011-06-20 16:07:03 Slp:</p>< p>2011-06-20 16:07:03 Slp: Exception type: Microsoft.SqlServer.Configuration.MsiExtension.MsiExtensionException</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp; Message:</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL Server 安装程序在运行 Windows Installer 文件时遇到错误。</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows Installer 错误消息: 系统无法从指定的设备上读取。</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows Installer 文件: N:/x86/setup/sqlbrowser.msi</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows Installer 日志文件: C:/Program Files/Microsoft SQL Server/100/Setup Bootstrap/Log/20110620_153155/SqlBrowser_Cpu32_1.log</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp; Data:</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DisableRetry = true</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp; Inner exception type: System.ComponentModel.Win32Exception</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Message:</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统无法从指定的设备上读取。</p>< p>2011-06-20 16:07:03 Slp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsphttp://www.downcc.com/tech/5358.htmlSQL Server2014/08/31 14:59:51<p>虽然绿色资源网小编不建议大家去用命令删除<a target="_blank" href="http://www.downcc.com/zhuanti/sql.html">数据库</a>表中的东西,但是这些删除命令总有用的着的地方。</p>< p>说到删除表数据的关键字,大家记得最多的可能就是delete了</p>< p>然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了</p>< p>现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的</p>< p><strong>老大------drop</strong></p>< p>出没场合:drop table& nbsp;tb&nbsp;--tb表示数据表的名字,下同</p>< p>绝招:删除内容和定义,释放空间。简单来说就是<strong>把整个表去掉</strong>.以后要新增数据是不可能的,除非新增一个表,</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;例如:一个班就是一个表,学生就是表中的数据,学生的职务就是定义</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;drop table class,就是把整个班移除.学生和职务都消失</p>< p>比如下面TestSchool数据库中有两张表[Classes]表和[Teacher]表</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311540337.png" /></p>< p>当执行下面代码之后</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311540717.png" /></p>< p>Classes表就被清楚,一干二净! 删除得非常暴力,作为老大实至名归</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311541307.png" /></p>< p><strong>老二-----truncate</strong></p>< p>出没场合:truncate table tb</p>< p>绝招:删除内容、释放空间但不删除定义。与drop不同的是,他只是清空表数据而已,他比较温柔.</p>< p>同样也是一个班,他只去除所有的学生.班还在,职务还在,如果有新增的学生可以进去,也可以分配上职务</p>< p>删除内容很容易理解,不删除定义也很容易理解,就是保留表的数据结构</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" baiduimageplusstatus="1" baiduimageplusoriginalsrc="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311541943.png" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311541943.png" /></p>< p>上图就表现了:删除内容</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" baiduimageplusstatus="1" baiduimageplusoriginalsrc="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311542675.png" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311542675.png" /></p>< p>执行语句之后,发现数据表的结构还在,也就是不删除定义</p>< p>至于释放空间,看下下面两幅图.你们就会明白的</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311542461.png" /></p>< p>右图:Id列标识列,因之前delete过行数据,所以会出现标识列不连续(体现了delete删除是不释放空间的)</p>< p>经过truncate table Teacher 之后 再新增三条数据</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/20148311542534.png" /></p>< p>右图:同样Id是标识列,发现插入数据的时候,标识列连续了(体现了truncate删除是释放空间)</p>< p>注意:truncate 不能删除行数据,要删就要把表清空</p>< p><strong>老三-----delete</strong></p>< p>出没场合:delete table tb& nbsp;&nbsp;--虽然也是删除整个表的数据,但是过程是痛苦的(系统一行一行地删,效率较truncate低)<br />& nbsp;</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; 或</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; delete table tb where 条件</p>< p>绝招:删除内容不删除定义,不释放空间。三兄弟之中最容易欺负的一个</p>< p>然后关于delete的就不详细说明了,大家都懂的</p>< p>关于truncate的小小总结:</p>< p>truncate table 在功能上与不带 WHERE 子句的 delete语句相同:二者均删除表中的全部行。</p>< p>但 truncate 比 delete速度快,且使用的系统和事务日志资源少。</p>< p>delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行roll back</p>< p>1、truncate 在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而&nbsp;truncate&nbsp;则不会被撤销。&nbsp;<br /> 2、truncate 是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对&nbsp;truncate&nbsp;使用ROLLBACK命令。&nbsp;<br /> 3、truncate&nbsp;将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过&nbsp;truncate&nbsp;操作后的表比Delete操作后的表要快得多。&nbsp;<br /> 4、truncate&nbsp;不能触发任何Delete触发器。&nbsp;<br /> 5、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。&nbsp;<br /> 6、不能清空父表</p>http://www.downcc.com/tech/5353.htmlMySQL2014/08/25 20:04:12<p>绿色资源网小编:最近本地调试网站的时候个别程序如phpcms一直出现这个问题,速度异常慢,偶尔发现下面的文章,才提醒了我,原来问题这样的。。。</p>< p>最近在windows上开发应用的时候发现一个有趣的问题:我的本地程序连接本地<a target="_blank" href="http://www.downcc.com/soft/23044.html">mysql</a>库居然要延迟1秒钟左右才能打开。</p>< p><strong>问题分析</strong></p>< p>考虑到可能是程序性能问题后,我使用了xdebug的性能日志功能输出程序运行日志后发现连接mysql的函数时间居然用掉了接近95%的执行时间。</p>< p>确认是mysql性能问题后,考虑是mysql的域名反查功能影响了速度,令我失望的是,在my.ini里面关闭域名反查后问题依旧存在。</p>< p>百思不得其解时我突发奇想将代码中的服务器的地址从localhost修改为了127.0.0.1,那个神奇的1秒钟延迟居然消失了。</p>< p>换成ip后居然就好了,难道是localhost存在啥蹊跷?打开cmd,输入ping localhost,ping输出的结果让我十分惊讶:</p>< center><img border="1" alt="Mysql教程之Windows 7/8下连接本地MySQL慢的问题解析_绿色资源网" width="654" height="239" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-8/201482520745499.png" /></center>< p>没错,localhost 出来的是 ipv6 地址 ::1,那么这一秒延迟的原因也很容易理解了,使用localhost连接,程序解析出来的地址是ipv6地址::1,然后去尝试连接监听这个地址的mysql, 而显然的是mysql监听的是ipv4地址127.0.0.1, ipv6连不上超时后会再去连接ipv4地址127.0.0.1, 这就是这个1秒钟延迟出现的原因。</p>< p>打开windows的hosts文件,你会看到下面的注释</p>< p># localhost name resolution is handled within DNS itself.</p>< p># 127.0.0.1 localhost</p>< p># ::1 localhost</p>< p><strong>解决方法</strong></p>< p>方案1. 使用127.0.0.1而不是localhost去连接mysql。</p>< p>方案2. 编辑hosts文件强制将127.0.0.1绑定在localhost。</p>http://www.downcc.com/tech/5345.htmlSQL Server2014/07/27 17:16:19<p>打开任何报表,都会提示:未能为 SSL/TLS 安全通道建立信任关系。</p>< p>问题原因:SQL报表配置文件中,设置了SSL认证。</p>< p><strong>解决方法:<br />< /strong>1.删除SQL报表配置文件中的SSL认证。<br /> 2.修改SQL报表配置文件:<br /> 位置:X:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\rsreportserver.config<br /> 参数:&lt;Add Key=&quot;SecureConnectionLevel&quot; Value=&quot;0&quot;/&gt;,将参数值Value=&quot;2&quot;修改为&quot;Value=&quot;0&quot;。</p>http://www.downcc.com/tech/5341.htmlOracle2014/07/23 21:00:42<p>1、先下载适合自己系统的即时客户端,可通过下面的地址下载。<br /> http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html&nbsp;</p>< p>2、直接解压到你想要存放的目录中,如:C:\instantclient_11_2</p>< p>3、编辑环境变量:< br /> TNS_ADMIN 设置为 C:\instantclient_11_2< br /> ORACLE_HOME 设置为 C:\instantclient_11_2</p>< p>4、编辑连接配置文件 tnsnames.ora,该文件需要自行在即时客户端目录(C:\instantclient_11_2)中创建。在该文件内输入如下内容:< br /> MYDB =<br /> (DESCRIPTION =<br /> (ADDRESS_LIST =<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.250)(PORT = 1521))<br /> )<br /> (CONNECT_DATA =<br /> (SERVER = DEDICATED)<br /> (SERVICE_NAME = MYDB)<br /> )<br /> )</p>< p>MYDB:是数据库实例名<br /> 192.168.3.259:是数据库的 IP 地址<br /> 1521:是数据库的端口</p>< p>5、然后你就可以使用 PLSQL Developer 和 TOAD 这类软件来管理 Oracle 数据库了。</p>http://www.downcc.com/tech/5339.htmlOracle2014/07/23 20:55:39http://www.downcc.com/tech/5338.htmlOracle2014/07/23 20:48:42<p>一直在使用Oracle<a target="_blank" href="http://www.downcc.com/zhuanti/sql.html">数据库</a>,各种语句、注意一大堆,一不留神就沾染上了连接错误。</p>< p>最近,碰到的需要注意的地方,就是每隔一段时间需要更新启用新的用户密码,否则连接错误,提示也很明显,总不过是密码过期的意思。</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/2014723205438836.png" /></p>< p>但是工作中,因为没有专门的数据库维护,所以密码神马的,总是用一个。所以,想要避免这种麻烦。需要用SQL语句修改Oracle的参数。</p>< p>更新密码:alter user system identified by sa;</p>< p>其中system是用户名称,sa是用户密码,可以启用新的密码,也可以保持原有密码。</p>< p>修改密码保护周期:alter profile default limit password_life_time unlimited;</p>< p>这样,可以无限期的使用同一个密码,一般在DBA权限下修改。</p>< p><strong>11g oracle 用户密码过期问题</strong></p>< p>Oracle 11g 之前默认的用户时是没有密码过期的限制的,在Oracle 11g 中默认的profile启用了密码过期时间是180天。如下:<br /> select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';<br /> 过期的密码可用alter&nbsp;user userXXX identified by xxx;解决,可以修改为和以前一样。</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/2014723205438113.png" /></p>< p>如果想设置密码不过期,可用管理员登陆,然后执行:<br />& nbsp;ALTER&nbsp;PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;<br /> 即可。<br /> 其他相关参数:<br /> select&nbsp;* from dba_profiles where profile='DEFAULT' and RESOURCE_NAME like 'PASSWORD%';</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-7/2014723205439317.gif" /></p>< p><strong>FAILED_LOGIN_ATTEMPTS</strong>&nbsp;整数<br /> 设定登录到Oracle 数据库时可以失败的次数。一旦某用户尝试登录数据库的达到该值时,该用户的帐户就被锁定,只能由DBA能解锁。<br />< strong>PASSWORD_LIFE_TIME<br />< /strong>设定口令的有效时间(天数),一旦超过这一时间,必须重新设口令。缺省为180天(11g,10gUNLIMITED).<br />< strong>PASSWORD_REUSE_TIME<br />< /strong>许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令。缺省为UNLIMITED.<br />< strong>PASSWORD_REUSE_MAX<br />< /strong>重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。<br />< strong>PASSWORD_LOCK_TIME<br />< /strong>设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。<br />< strong>PASSWORD_GRACE_TIME<br />< /strong>设定在口令失效前,给予的重新设该口令的宽限天。当口令失效之后回,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。<br />< strong>PASSWORD_VERITY_FUNCTION<br />< /strong>该资源项允许调用一个PL/SQL 来验证口令。Oracle公司已提供该应用 的脚本,但是只要愿意的话,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称。缺省为NULL.</p>< p><strong>oracle 11g 用户密码180天过期解决方法</strong></p>< p>alter profile default limit password_life_time unlimited;</p>< p>select * dba_profiles where profile=&lsquo;DEFAULT&rsquo; and resource-name=&lsquo;PASSWORD_LlFE_TIME&rsquo;;</p>< p><strong>oracle 11g 180天密码</strong></p>< p>查询密码过期时间</p>< p>select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';</p>< p>设置密码用不过期</p>< p>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;</p>< p>重置密码</p>< p>alter user ccc&nbsp;identified by ddd;</p>http://www.downcc.com/tech/5310.htmlMySQL2014/06/20 13:25:53<p><strong>MySQL</strong>默认是开启了日志文件的,如果数据操作比较频繁就会产生大量的日志,在/usr/local/mysql/var/下面产生mysql- bin.0000* 类似的文件,而且一般都在几十MB到几个GB,更甚会吃掉整个硬盘空间,从来导致mysql无法启动或报错。<br />& nbsp;</p>< p>如何关闭MySQL的日志功能:</p>< p>删除日志:<br /> 执行:/usr/local/mysql/bin/mysql -u root -p</p>< p>输入密码登录后再执行:reset master;<br /> 再输入:quit 退出mysql命令模式。</p>< p>彻底禁用MySQL日志:修改/etc/my.cnf 文件,找到<br /> log-bin=mysql-bin<br /> binlog_format=mixed</p>< p>再这两行前面加上#,将其注释掉,再执行/etc/init.d/mysql restart即可。<br /> 如果实在想保留日志,可以在/etc/my.cnf里加入<br /> expire_logs_days = 30<br /> 然后重启mysql,这样30天就会自动清理日志。</p>< p>因为硬盘满了,mysql启动不起来了,删除mysql的日志文件,重启mysql发现错误:<br /> 启动的时候出现错误:<br /> Starting MySQL.Manager of pid-file quit without updating file.[FAILED]</p>< p>网上有不少这个原因的解释,但是都不是我想说的。<br /> data/mysql-bin.index 没有删除,data/mysql-bin.index是存放日志文件索引的文件,只删除了日志文件而没有对日志的索引文件做处理显然是不行的。</p>< p>删除data/mysql-bin.index文件,再service mysqld start就可以了。</p>http://www.downcc.com/tech/3702.htmlSQL Server2014/03/11 15:14:06<p><strong>前言:</strong></p><p>[学习SQL SERVER 2005系列]准备把学习2005的一些心得整理出来,和大家分享,共同学习一起提高。</p><p><a href="http://www.downcc.com/soft/9159.html" target="_blank">sql2005 精简版下载</a><br/><br/><a href="http://www.downcc.com/soft/9015.html" target="_blank">Microsoft SQL Server 2005简体中文版</a></p><p><strong>安装准备:</strong>< br/>1、SQL Server 2005 的各版本之间选择< br/>  大多数企业都在三个 SQL Server 版本之间选择:SQL Server 2005 Enterprise Edition、SQL Server 2005 Standard Edition 和 SQL Server 2005 Workgroup Edition。大多数企业选择这些版本是因为只有 Enterprise Edition、Standard Edition 和 Workgroup Edition 可以在生产服务器环境中安装和使用。< br/>  除 Enterprise Edition、Standard Edition 和 Workgroup Edition 外,SQL Server 2005 还包括 SQL Server 2005 Developer Edition 和 SQL Server 2005 Express Edition。以下段落分别说明其中的每个版本,并建议应在何时使用哪个版本。< br/>2、软、硬件要求< br/>1 网络软件要求:< br/>  独立的命名实例和默认实例支持以下网络协议:Shared Memory、Named Pipes、TCP/IP、VIA< br/>2 Internet 要求</p><p><table border="1" bgcolor="#cccccc" uetable="null"><tbody><tr class="firstRow"><td>Internet 信息服务 (IIS)</td><td>安装 Microsoft SQL Server 2005 Reporting Services (SSRS) 需要 IIS 5.0 或更高版本。</td></tr></tbody></table><br/>安装程序支持软件< br/>SQL Server 安装程序需要 Microsoft Windows Installer 3.1 或更高版本以及 Microsoft 数据访问组件 (MDAC) 2.8 SP1 或更高版本。您可以从此 Microsoft 网站下载 MDAC 2.8 SP1。< br/>SQL Server 安装程序安装该产品所需的以下软件组件:< br/>    Microsoft Windows .NET Framework 2.0< br/>    Microsoft SQL Server 本机客户端< br/>    Microsoft SQL Server 安装程序支持文件< br/><strong>硬件要求</strong>< br/>  SQL SERVER 2005对硬件的要求相对于2000来讲提高一个档次了,记得2000的企业版内存推荐才128M,最低64M就够了。<table border="1" bgcolor="#cccccc" uetable="null"><tbody><tr class="firstRow"><td><br/>SQL Server 2005(32 位)</td><td><br/>处理器类型1</td><td><br/>处理器速度2</td><td><br/>内存 (RAM)3</td></tr><tr><td><br/>SQL Server 2005 Enterprise Edition 4< br/>SQL Server 2005 Developer Edition< br/>SQL Server 2005 Standard Edition</td><td><br/>需要 Pentium III 兼容处理器或更高速度的处理器</td><td><br/>最低:600 MHz< br/>建议:1 GHz 或更高</td><td><br/>最小:512 MB< br/>建议:1 GB 或更大< br/>最大:操作系统的最大内存</td></tr></tbody></table><br/>操作系统与2005< br/>此表显示对于每种 32 位版本的 SQL Server 2005,操作系统是否可以运行其服务器软件。<table border="1" bgcolor="#cccccc" uetable="null"><tbody><tr class="firstRow"><td><br/>&nbsp;</td><td><p><br/>Enterprise</p><p>Edition1</p></td><td><p><br/>Developer</p><p>Edition</p></td><td><p><br/>Standard</p><p>Edition</p></td><td><p><br/>Workgroup</p><p>Edition</p></td><td><p><br/>Express</p><p>Edition</p></td><td><p><br/>Evaluation</p><p>Edition</p></td></tr><tr><td><br/>Windows 2000</td><td><br/>否</td><td><br/>否</td><td><br/>否</td><td><br/>否</td><td><br/>否</td><td><br/>否</td></tr><tr><td><br/>Windows 2000 Professional Edition SP42,4</td><td><br/>否</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>Windows 2000 Server SP42</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>Windows 2000 Advanced Server SP42</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>Windows 2000 Datacenter Edition SP42</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>嵌入式 Windows XP</td><td><br/>否</td><td><br/>否</td><td><br/>否</td><td><br/>否</td><td><br/>否</td><td><br/>否</td></tr><tr><td><br/>Windows XP Home Edition SP2</td><td><br/>否</td><td><br/>是</td><td><br/>否</td><td><br/>否</td><td><br/>是</td><td><br/>否</td></tr><tr><td><br/>Windows XP Professional Edition SP24</td><td><br/>否</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>Windows XP Media Edition SP2</td><td><br/>否</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>Windows XP Tablet Edition SP2</td><td><br/>否</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>Windows 2003 Server SP1</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td><td><br/>是</td></tr><tr><td><br/>Windows 2003 Enterprise Edition SP1</td><td><br/>是</td><td><br/>是</td><td></td><td></td><td></td><td></td></tr></tbody></table></p>http://www.downcc.com/tech/5241.htmlMySQL2014/02/25 19:02:35<p>做python的时候需要用到<a target="_blank" href="http://www.downcc.com/zhuanti/sql.html">数据库</a>,于是自己重新整理了一下数据库的知识,并且熟悉了python中MysqlDB模块的功能和函数等接口,现在系统地来总结一下吧:</p>< p>首先你要做的还是下载相应的模块并且安装啦,下载地址自己搜,网上有很多,安装的话也很好办,安装之后python的安装目录下的Lib文件夹下的site-packages文件夹下的MySQLdb文件夹,这之中存放的便是该模块的定义。准备工作做好之后我们需要在源码中import MySQLdb</p>< p><strong>数据库的连接:</strong></p>< p>模块引入之后我们就需要和数据库进行连接了,实例代码如下:</p>< p>db = MySQLdb.connect(&quot;localhost&quot;,&quot;root&quot;,&quot;123456&quot;,&quot;myciti&quot; )<br />& nbsp;</p>< p>这三个关键参数的含义一目了然:第一个为服务器的地址,第二个为用户名,第三个为dbms密码,第四个为要访问的数据库,其实该connect函数的参数不止这些,不过由于其有默认值而且大多数情况下不用修改,因而省略了。这里做如下列表:</p>< p>host,连接的数据库服务器主机名,默认为本地主机(localhost)。</p>< p>user,连接数据库的用户名,默认为当前用户。</p>< p>passwd,连接密码,没有默认值。</p>< p>db,连接的数据库名,没有默认值。</p>< p>conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions</p>< p>cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。</p>< p>compress,启用协议<a target="_blank" href="http://www.downcc.com/zhuanti/yasuo.html">压缩</a>功能。</p>< p>named_pipe,在windows中,与一个命名管道相连接。</p>< p>init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。</p>< p>read_default_file,使用指定的MySQL配置文件。</p>< p>read_default_group,读取的默认组。</p>< p>unix_socket,在unix中,连接使用的套接字,默认使用TCP。</p>< p>port,指定数据库服务器的连接端口,默认是3306</p>< p>大家可能会注意到源码中没有用到端口号,这是因为MySQLdb的connect函数的该参数的默认值便是3306,如果你在安装mysql的时候修改了数据库的端口号,那么你就需要在源码中加上该参数的修改值了。</p>< p><strong>一,安装mysql</strong></p>< p>如果是windows&nbsp;用户,mysql&nbsp;的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可。</p>< p>Linux&nbsp;下的安装可能会更加简单,除了下载安装包进行安装外,一般的linux&nbsp;仓库中都会有mysql&nbsp;,我们只需要通过一个命令就可以下载安装:</p>< p>Ubuntu\deepin</p>< p>&gt;&gt;sudo&nbsp;apt-get&nbsp;install&nbsp;mysql-server&nbsp;</p>< p>&gt;&gt;Sudo&nbsp;apt-get&nbsp;install&nbsp;&nbsp;mysql-client</p>< p>centOS/redhat</p>< p>&gt;&gt;yum&nbsp;install&nbsp;mysql</p>< p><strong>二,安装MySQL-python</strong></p>< p>要想使python可以操作mysql&nbsp;就需要MySQL-python驱动,它是python&nbsp;操作mysql必不可少的模块。</p>< p>下载地址:https://pypi.python.org/pypi/MySQL-python/</p>< p>下载MySQL-python-1.2.5.zip&nbsp;文件之后直接解压。进入MySQL-python-1.2.5目录:</p>< p>&gt;&gt;python&nbsp;setup.py&nbsp;install</p>< p><strong>三,测试</strong></p>< p>测试非常简单,检查MySQLdb&nbsp;模块是否可以正常导入。</p>< pre> fnngj@fnngj-H24X:~/pyse$&nbsp;python&nbsp; Python&nbsp;2.7.4&nbsp;(default,&nbsp;Sep&nbsp;26&nbsp;2013,&nbsp;03:20:56)&nbsp; [GCC&nbsp;4.7.3]&nbsp;on&nbsp;linux2 Type&nbsp;&quot;help&quot;,&nbsp;&quot;copyright&quot;,&nbsp;&quot;credits&quot;&nbsp;or&nbsp;&quot;license&quot;&nbsp;for&nbsp;more&nbsp;information.& gt;&gt;&gt;&nbsp;import&nbsp;MySQLdb</pre>< p><br />& nbsp;没有报错提示MySQLdb模块找不到,说明安装OK&nbsp;,下面开始使用python&nbsp;操作数据库之前,我们有必要来回顾一下mysql的基本操作:</p>< p><strong>四,mysql&nbsp;的基本操作</strong></p>< p>$&nbsp;mysql&nbsp;-u&nbsp;root&nbsp;-p&nbsp;&nbsp;(有密码时)</p>< p>$&nbsp;mysql&nbsp;-u&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(无密码时)</p>< pre> mysql&gt;&nbsp;show&nbsp;databases;&nbsp;&nbsp;//&nbsp;查看当前所有的数据库 +--------------------+ |&nbsp;Database&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| +--------------------+ |&nbsp;information_schema&nbsp;| |&nbsp;csvt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;csvt04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;mysql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;performance_schema&nbsp;| |&nbsp;test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| +--------------------+ 6&nbsp;rows&nbsp;in&nbsp;set&nbsp;(0.18&nbsp;sec) mysql&gt;&nbsp;use&nbsp;test;&nbsp;&nbsp;&nbsp;//作用与test数据库 Database&nbsp;changed mysql&gt;&nbsp;show&nbsp;tables;&nbsp;&nbsp;&nbsp;//查看test库下面的表 Empty&nbsp;set&nbsp;(0.00&nbsp;sec) //创建user表,name&nbsp;和password&nbsp;两个字段 mysql&gt;&nbsp;CREATE&nbsp;&nbsp;TABLE&nbsp;&nbsp;user&nbsp;(name&nbsp;VARCHAR(20),password&nbsp;VARCHAR(20));&nbsp;&nbsp;Query&nbsp;OK,&nbsp;0&nbsp;rows&nbsp;affected&nbsp;(0.27&nbsp;sec) //向user表内插入若干条数据 mysql&gt;&nbsp;insert&nbsp;into&nbsp;user&nbsp;values('Tom','1321');Query&nbsp;OK,&nbsp;1&nbsp;row&nbsp;affected&nbsp;(0.05&nbsp;sec) mysql&gt;&nbsp;insert&nbsp;into&nbsp;user&nbsp;values('Alen','7875');Query&nbsp;OK,&nbsp;1&nbsp;row&nbsp;affected&nbsp;(0.08&nbsp;sec) mysql&gt;&nbsp;insert&nbsp;into&nbsp;user&nbsp;values('Jack','7455');Query&nbsp;OK,&nbsp;1&nbsp;row&nbsp;affected&nbsp;(0.04&nbsp;sec) //查看user表的数据 mysql&gt;&nbsp;select&nbsp;*&nbsp;from&nbsp;user;+------+----------+ |&nbsp;name&nbsp;|&nbsp;password&nbsp;| +------+----------+ |&nbsp;Tom&nbsp;&nbsp;|&nbsp;1321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;Alen&nbsp;|&nbsp;7875&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;Jack&nbsp;|&nbsp;7455&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| +------+----------+ 3&nbsp;rows&nbsp;in&nbsp;set&nbsp;(0.01&nbsp;sec) //删除name&nbsp;等于Jack的数据 mysql&gt;&nbsp;delete&nbsp;from&nbsp;user&nbsp;where&nbsp;name&nbsp;=&nbsp;'Jack';Query&nbsp;OK,&nbsp;1&nbsp;rows&nbsp;affected&nbsp;(0.06&nbsp;sec) //修改name等于Alen&nbsp;的password&nbsp;为&nbsp;1111 mysql&gt;&nbsp;update&nbsp;user&nbsp;set&nbsp;password='1111'&nbsp;where&nbsp;name&nbsp;=&nbsp;'Alen';Query&nbsp;OK,&nbsp;1&nbsp;row&nbsp;affected&nbsp;(0.05&nbsp;sec) Rows&nbsp;matched:&nbsp;1&nbsp;&nbsp;Changed:&nbsp;1&nbsp;&nbsp;Warnings:&nbsp;0 //查看表内容 mysql&gt;&nbsp;select&nbsp;*&nbsp;from&nbsp;user;+--------+----------+ |&nbsp;name&nbsp;&nbsp;&nbsp;|&nbsp;password&nbsp;| +--------+----------+ |&nbsp;Tom&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;1321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;Alen&nbsp;&nbsp;&nbsp;|&nbsp;1111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| +--------+----------+ 3&nbsp;rows&nbsp;in&nbsp;set&nbsp;(0.00&nbsp;sec)</pre>< p><strong>五,python&nbsp;操作mysql数据库基础</strong></p>< pre> #coding=utf-8import&nbsp;MySQLdb conn=&nbsp;MySQLdb.connect(& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host='localhost',& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port&nbsp;=&nbsp;3306,& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user='root',& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passwd='123456',& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;='test',& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) cur&nbsp;=&nbsp;conn.cursor()#创建数据表#cur.execute(&quot;create&nbsp;table&nbsp;student(id&nbsp;int&nbsp;,name&nbsp;varchar(20),class&nbsp;varchar(30),age&nbsp;varchar(10))&quot;)#插入一条数据#cur.execute(&quot;insert&nbsp;into&nbsp;student&nbsp;values('2','Tom','3&nbsp;year&nbsp;2&nbsp;class','9')&quot;)#修改查询条件的数据#cur.execute(&quot;update&nbsp;student&nbsp;set&nbsp;class='3&nbsp;year&nbsp;1&nbsp;class'&nbsp;where&nbsp;name&nbsp;=&nbsp;'Tom'&quot;)#删除查询条件的数据#cur.execute(&quot;delete&nbsp;from&nbsp;student&nbsp;where&nbsp;age='9'&quot;)cur.close() conn.commit() conn.close()</pre>< p>&gt;&gt;&gt;&nbsp;conn&nbsp;=&nbsp;MySQLdb.connect(host='localhost',port&nbsp;=&nbsp;3306,user='root', passwd='123456',db&nbsp;='test',)</p>< p>Connect()&nbsp;方法用于创建数据库的连接,里面可以指定参数:用户名,密码,主机等信息。</p>< p>这只是连接到了数据库,要想操作数据库需要创建游标。</p>< p>&gt;&gt;&gthttp://www.downcc.com/tech/5234.htmlSQL Server2014/01/28 10:45:44<p><a target="_blank" href="http://www.downcc.com/zhuanti/sqlserver.html">sql server</a> 2005& amp; 2008 master与msdb<a target="_blank" href="http://www.downcc.com/zhuanti/sql.html">数据库</a>的备份与恢复,<span style="line-height: 1em">master与msdb数据库的备份与普通数据库一样,本文主要描述master与msdb数据库的恢复的一些个人积累。</span></p>< p>恢复master与msdb数据库关键在于以单用户模式启动,其它并没有太大的区别。</p>< p>由于系统数据库对Sql Server来说尤其重要,为了确保SQL SERVER系统的正常运行,除了日常备份用户的数据库之外,我们还需要备份系统数据库,如对Master,Model,Msdb(TempDB不需备份)进行完整备份<br />& nbsp;</p>< p><strong>1、还原Master数据库</strong><br /> 如果系统配置丢失或Master出现问题,可以进入单用户模式进行还原;如果出现下列情况,必须重新生成损坏的 master 数据库:<br /> A. master 数据库的当前备份不可用。<br /> B. 存在 master 数据库备份,但由于 Microsoft SQL Server 实例无法启动,因此无法还原该备份。<br /> 1、重新生成 master 数据库:<br /> 注意:<br /> 在 SQL Server 2005 中已废止 Rebuildm.exe 程序。若要重新生成 master 数据库,请使用 setup.exe。<br /> 1、 Start /wait setup.exe /qn INSTANCENAME=&lt;InstanceName&gt; REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=&lt;NewStrongPassword&gt;<br /> 例:start /wait e:&ldquo;setup.exe /qn INSTANCENAME=mssqlserver REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=abc123@!@<br /> 注:INSTANCENAME:指定实例名,默认实例则用mssqlserver表示<br /> REINSTALL:指定引擎<br /> SAPWD:强密码<br /> Setup.exe:指定光盘1中的根目录下的文件<br /> /qn 开关用于取消所有安装程序对话框和错误消息。如果指定 /qn 开关,则所有安装程序消息(包括错误消息)都将写入安装程序日志文件。有关日志文件的详细信息,请参阅如何查看 SQL Server 2005 安装日志文件。<br /> 指定 /qb 开关将显示基本的安装程序对话框。还会显示错误消息。<br /> 2、 还原Master备份(在恢复master的备份时要注意:必须在单用户(single&nbsp;& nbsp;user)模式下进行&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;a.进入单用户模式的方法:&nbsp;& nbsp;&nbsp;&nbsp;<br />& nbsp;&nbsp;& nbsp;&nbsp;1.在命令行模式下输入sqlservr&nbsp;& nbsp;-c&nbsp;& nbsp;-f&nbsp;& nbsp;-m或者输入sqlservr&nbsp;& nbsp;-m&nbsp;& nbsp;&nbsp;&nbsp;<br />& nbsp;&nbsp;& nbsp;&nbsp;其中:-c&nbsp;& nbsp;可以缩短启动时间,SQL&nbsp;& nbsp;Server&nbsp;& nbsp;不作为Windows&nbsp;& nbsp;NT的服务启动&nbsp;& nbsp;&nbsp;&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;-f&nbsp;& nbsp;用最小配置启动SQL&nbsp;& nbsp;Server&nbsp;& nbsp;&nbsp;&nbsp;<br />& nbsp;&nbsp;& nbsp;&nbsp;-m&nbsp;& nbsp;单用户模式启动SQL&nbsp;& nbsp;Server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />< br /> 2.系统默认没有设置PATH,先进入CMD,进入&ldquo;C:&ldquo;Program Files&ldquo;Microsoft SQL Server&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;Binn&rdquo;,执行SQLSERVR.EXE& ndash;M<br /> 打开SSMS工具,先断开连接,再新建查询,执行以下命名还原<br /> USE master<br /> GO<br /> RESTORE DATABASE master<br /> FROM disk=&lsquo;c:&ldquo;master.bak&lsquo;<br /> GO<br /> 开始实验了~~~<br />< strong>MASTER重新生成</strong><br /> 为了模拟MASTER数据库坏了,我们就删除MASTER数据库(要停止SQL SERVER服务才能删除)在我的电脑,C:&ldquo; PROGRAM FILES&ldquo;MICROSOFT SQL SERVER&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;DATE 中删除MASTER.MDF<br /> 重新生成MASTER<br /> 1.首先在CMD中输入<br /> start /wait setup.exe /qn INSTANCENAME=&lt;InstanceName&gt; REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=&lt;NewStrongPassword&gt;<br /> 其中的 SETUP.EXE为启动光盘的路径,我这里的是 E:&ldquo;SETUP.EXE /QN<br /> 我这里的为默认实例所以其中的&lt;INSTANCENAME&gt;用 MSSQLSERVER代替<br /> 最后的&lt;NewStrongPassword&gt;为密码我设密码为abc123@!@,所以就用abc123@!@代替&lt;NewStrongPassword&gt;<br /> 若没有返回错误,我们就可以到我的电脑中C:&ldquo; PROGRAM FILES&ldquo;MICROSOFT SQL SERVER&ldquo;MSSQL.1&ldquo;DATE上面又有MASTER.MDF了<br /> 接下来进入目录<br /> 单用户模式<br /> 启动SSMS工具,新建查询<br /> 输入命令<br /> 启动服务(MSSQL SERVER)<br /> 打开SSMS<br /> 连接到数据库后就可以发现数据库中的数据又回来了<br /> 以下是我在命令行下搞的命令,我用记事本的方式全部复制下来了,为了不传附件,我就直接粘贴到下面了<br /> Microsoft Windows [版本 5.2.3790]<br /> (C) 版权所有 1985-2003 Microsoft Corp.<br /> C:&ldquo;Documents and Settings&ldquo;Administrator&gt;start /wait e:&ldquo;setup.exe /qn INSTANCENAME=mssqlserver REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=abc123@!@<br /> C:&ldquo;Documents and Settings&ldquo;Administrator&gt;cd C:&ldquo;Program Files&ldquo;Microsoft SQL Server&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;Binn<br /> C:&ldquo;Program Files&ldquo;Microsoft SQL Server&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;Binn&gt;sqlservr.exe -m<br /> 2008-04-18 15:47:46.56 Server Authentication mode is MIXED.<br /> 2008-04-18 15:47:46.59 Server Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)<br /> Oct 14 2005 00:33:37<br /> Copyright (c) 1988-2005 Microsoft Corporation<br /> Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)<br /> 2008-04-18 15:47:46.59 Server (c) 2005 Microsoft Corporation.<br /> 2008-04-18 15:47:46.59 Server All rights reserved.<br /> 2008-04-18 15:47:46.59 Server Server process ID is 3984.<br /> 2008-04-18 15:47:46.59 Server Logging SQL Server messages in file& lsquo;C:&ldquo;Program Files&ldquo;Microsoft SQL Server&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;LOG&ldquo;ERRORLOG&lsquo;.<br /> 2008-04-18 15:47:46.59 Server This instance of SQL Server last reported using a process ID of 764 at 2008-4-18 15:46:40 (local) 2008-4-18 7:46:40 (UTC). This is an informational message only; no user action is required.<br /> 2008-04-18 15:47:46.60 Server Registry startup parameters:<br /> 2008-04-18 15:47:46.60 Server -d C:&ldquo;Program Files&ldquo;Microsoft SQL Server&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;DATA&ldquo;master.mdf<br /> 2008-04-18 15:47:46.60 Server -e C:&ldquo;Program Files&ldquo;Microsoft SQL Server&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;LOG&ldquo;ERRORLOG<br /> 2008-04-18 15:47:46.60 Server -l C:&ldquo;Program Files&ldquo;Microsoft SQL Server&ldquo;MSSQL.1&ldquo;MSSQL&ldquo;DATA&ldquo;mastlog.ldf<br /> 2008-04-18 15:47:46.62 Server Command Line Startup Parameters:<br /> 2008-04-18 15:47:46.62 Server -m2008-04-18 15:47:46.64 服务器 SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.<br /> 2008-04-18 15:47:46.67 服务器 Detected 1 CPUs. This is an informational message; no user action is required.<br /> 2008-04-18 15:47:46.78 服务器 Using dynamic lock allocation. Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node. This is an informational message only. No user action is required.<br /> 2008-04-18 15:47:46.84 服务器 Attempting to initialize Microsoft Distributed Transaction Coordinator (MS DTC). This is an informational message only. No user action is required.<br /> 2008-04-18 15:47:47.95 服务器 Attempting to recover in-doubt distributed transactions involving Microsoft Distributed Transaction oordinator (MS DTC).<br /> This is an informational message only. No user action is required.<br /> 2008-04-18 15:47:47.96 服务器 Database Mirroring Transport is disabled in the endpoint configuration.<br /> 2008-04-18 15:47:47.96 spid5s Warning ******************<br /> 2008-04-18 15:47:47.96 spid5s SQL Server started in single-user mode. This an informational message only. No user action is required.<br /> 2008-04-18 15:47:47.99 spid5s Starting up database& lsquo;master&lsquo;.<br /> 2008-04-18 15:47:48.17 spid5s Recovery is writing a checkpoint in database& lsquo;master&lsquo; (1). This is an informational message only. No user action is required.<br /> 2008-04-18 15:47:48.28 spid5s SQL Trace ID 1 was started by login& quot;sa&quot;.<br /> 2008-04-18 15:47:48.32 spid5s Starting up database ssqlsystemresource&lsquo;.<br /> 2008-04-18 15:47:48.76 spid5s Server name is& lsquo;VM01&lsquo;. This is an informational message only. No user action is required.<br /> 2008-04-18 15:47:48.78 spid8s Starting up database& lsquo;model&lsquo;.<br /> 2008-04-18 15:47:49.20 服务器 A self-generated certificate wahttp://www.downcc.com/tech/5230.htmlSQL Server2014/01/11 23:06:14<p>想起来之前<strong>着急哥</strong>问我的一个问题,一个DBA删除了Windows登录用户,而且SQLSERVER服务器的验证方式是Windows身份验证。</p>< p>怎麽办??</p>< p>我当时给他的答复是:重装系统<a target="_blank" href="http://www.downcc.com/zhuanti/sql.html">数据库</a>master</p>< p>今天看到这篇文章<strong>没有了SA密码,无法Windows集成身份登录,DBA怎么办?</strong>,有思路了</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123725185.png" /></p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123725725.png" /></p>< p><strong>假设我们遇到很糟糕的情况</strong></p>< p>sa被禁用,服务器身份验证为Windows身份验证模式,Windows登录用户被删,没有其他sysadmin角色的登录用户</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123725107.jpg" /></p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123725997.jpg" /></p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123725886.jpg" /></p>< p><strong>步骤一</strong>:</p>< p>停掉SQLSERVER:在命令行 net stop mssqlserver</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123725248.jpg" /></p>< p><strong>步骤二</strong>:</p>< p>转到SQLSERVER的安装目录</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123725545.png" /></p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123726812.png" /></p>< p>然后加上/m /f& nbsp; 参数</p>< p><strong>步骤三</strong>:以为单用户模式启动SQLSERVER</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123726992.png" /></p>< p><strong>步骤四</strong>:打开SSMS</p>< p>这时候一定不要马上进行连接,需要点击取消,然后在左上角的点击新建查询,这个步骤跟DAC(专用管理员连接)的步骤是一样的</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123726676.png" /></p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123727295.png" /></p>< p>你会发现用Windows登录用户这时候可以登录</p>< p><strong>步骤五</strong>:执行下面的SQL脚本</p>< pre> 1&nbsp;--打开xp_cmdshell功能&nbsp;2&nbsp;EXEC&nbsp;[sys].[sp_configure]&nbsp;@configname&nbsp;=&nbsp;'xp_cmdshell',&nbsp;--&nbsp;varchar(35)&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@configvalue&nbsp;=&nbsp;1&nbsp;--&nbsp;int&nbsp;4&nbsp;RECONFIGURE&nbsp;WITH&nbsp;override&nbsp;5&nbsp;&nbsp;6&nbsp;&nbsp;7&nbsp;--修改注册表,修改身份验证为混合验证方式&nbsp;8&nbsp;USE&nbsp;[master]&nbsp;9&nbsp;GO10&nbsp;EXEC&nbsp;xp_instance_regwrite&nbsp;N'HKEY_LOCAL_MACHINE',&nbsp;N'Software\Microsoft\MSSQLServer\MSSQLServer',&nbsp;N'LoginMode',&nbsp;REG_DWORD,&nbsp;211&nbsp;GO12&nbsp;13&nbsp;--创建登录名14&nbsp;CREATE&nbsp;LOGIN&nbsp;[计算机名\Administrator]&nbsp;FROM&nbsp;WINDOWS;15&nbsp;GO16&nbsp;17&nbsp;--赋予登录名的权限为sysadmin18&nbsp;USE&nbsp;master19&nbsp;GO20&nbsp;EXEC&nbsp;[sys].[sp_addsrvrolemember]&nbsp;@loginame&nbsp;=&nbsp;'计算机名\Administrator',&nbsp;--&nbsp;sysname21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@rolename&nbsp;=&nbsp;sysadmin&nbsp;--&nbsp;sysname22&nbsp;23&nbsp;--关闭xp_cmdshell功能24&nbsp;EXEC&nbsp;[sys].[sp_configure]&nbsp;@configname&nbsp;=&nbsp;'xp_cmdshell',&nbsp;--&nbsp;varchar(35)25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@configvalue&nbsp;=&nbsp;0&nbsp;--&nbsp;int26&nbsp;RECONFIGURE&nbsp;WITH&nbsp;override</pre>< p>这时候身份验证方式已经改为混合验证方式</p>< p><strong>步骤六</strong>:关掉SQLSERVER,再重新启动</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123727566.png" /></p>< p>打开SQLSERVER配置管理器,启动SQLSERVER</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123727249.png" /></p>< p><strong>步骤七</strong>:登录SQLSERVER</p>< p>回到SSMS,可以看到这时候恢复正常了</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123727887.jpg" /></p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123727372.jpg" /></p>< p><strong>总结</strong></p>< p>感谢i6first大侠,之前一直以为无法子了,想不到他想到了用单用户模式启动的方法来进入SQLSERVER。</p>< p><strong>没有了SA密码,无法Windows集成身份登录,DBA怎么办?</strong></p>< p>一同事反馈SQL无法正常登录了,以前都是通过windows集成身份验证登录进去的(sa密码早忘记了),今天就改了服务器的机器名,现在无论如何都登录不进去。</p>< p>SQL登录时如果采用windows集成身份验证,登录框将会以&ldquo;机器名\当前系统用户名&rdquo;的格式显示登录名,而且登录名和密码都是灰色的,不允许用户输入。</p>< p>了解到同事刚刚修改了服务器的机器名,因此在SQL的登陆框中显示&ldquo;新机器名\当前系统用户名&rdquo;。要知道windows集成身份验证能登录的原因是在SQL的登录名中已经包括了该用户名,原来的用户名在SQL安装的时候已经记录到了SQL中,如果机器名变更了,&ldquo;新机器名\当前系统用户名&rdquo;肯定无法正常登录。</p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123728515.png" /></p>< p>网上看到有人说可以采用OSQL&ndash;S instancename& ndash;E(在命令行窗口中输入)登录进去后再去修改sa的密码,一番尝试后发现是扯谈,因为采用这种方式的前提是需要windows集成身份能够登录。</p>< p>后来在微软的官网上看到一篇文档,<strong>原来只要在</strong><strong>SQL</strong><strong>的启动参数中加一个&ldquo;</strong><strong>-m</strong><strong>&rdquo;的选项(记得在</strong><strong>-m</strong><strong>前加分号),然后需要重启</strong><strong>SQL</strong><strong>服务,再次用</strong><strong>SQL Management Studio</strong><strong>的</strong><strong>windows</strong><strong>集成身份验证登陆就可以了。</strong></p>< p style="text-align: center; text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2014-1/201411123728250.jpg" /></p>< p>-m表示单用户登录。细心的读者可能会质疑了:只是加了-m,但最后还是采用的windows集成身份验证,理论说跟之前使用SQLOS& ndash;S instancename& ndash;E有什么区别呢?</p>< p>这个问得非常专业。当时我也没有搞明白,觉得有点不可思议,但结果就是这样,肯定有其道理。后来在微软的官网上找到了这段话。</p>< p>Start the instance of< a target="_blank" href="http://www.downcc.com/zhuanti/sqlserver.html">sql server</a> in single-user mode by using either the&nbsp;<strong>-m</strong>&nbsp;or&nbsp;<strong>-f</strong>&nbsp;options. Any member of the computer's local Administrators group can then connect to the instance of SQL Server as a member of the sysadmin fixed server role.</p>< p>大概的意思是说<strong>当在</strong><strong>SQL</strong><strong>的启动参数中添加了</strong><strong>-m</strong><strong>或者</strong><strong>-f</strong><strong>参数时,计算机本地管理员组的任何一个用户都可以</strong><strong>sysadmin</strong><strong>的身份登录到</strong><strong>SQL</stronhttp://www.downcc.com/tech/5227.htmlSQL Server2014/01/06 09:47:52<p>由于种种原因,我们如果当时仅仅备份了mdf文件,而无法得到日志文件,那么恢复起来就是一件很麻烦的事情了。</p>< p><strong>【同一<a target="_blank" href="http://www.downcc.com/zhuanti/sql.html">数据库</a>服务器的情况】</strong><br /> 如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息<br /> 设备激活错误。物理文件名 'C:\Program Files\Microsoft sql server\MSSQL\data\test_Log.LDF' 可能有误。<br /> 已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。</p>< p><strong>【不同数据库服务器的情况】</strong><br />   如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息<br /> 服务器: 消息 1813,级别 16,状态 2,行 1<br /> 未能打开新数据库 'test'。CREATE DATABASE 将终止。<br /> 设备激活错误。物理文件名 'd:\test_log.LDF' 可能有误。</p>< p>怎么办呢?别着急,下面我们举例说明恢复办法。</p>< p>A.使用默认方式建立一个供恢复使用的数据库(test)。</p>< p>B.停掉数据库服务器。</p>< p>C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。</p>< p>D.启动数据库服务器。此时会看到数据库test的状态为&ldquo;置疑&rdquo;。这时候不能对此数据库进行任何操作。</p>< p>E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择&ldquo;属性&rdquo;,在&ldquo;服务器设置&rdquo;页面中将&ldquo;允许对系统目录直接修改&rdquo;一项选中。</p>< p><span style="color: rgb(255,0,0)">F.设置test为紧急修复模式</span></p>< p>update sysdatabases set status=-32768 where dbid=DB_ID('test')</p>< p>此时可以在SQL Server Enterprise Manager里面看到该数据库处于&ldquo;只读\置疑\脱机\紧急模式&rdquo;可以看到数据库里面的表,但是仅仅有系统表。</p>< p>G.下面执行真正的恢复操作,重建数据库日志文件</p>< p>dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')</p>< p>执行过程中,如果遇到下列提示信息:</p>< p>服务器: 消息 5030,级别 16,状态 1,行 1</p>< p>未能排它地锁定数据库以执行该操作。</p>< p>DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。</p>< p>说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。</p>< p>正确执行完成的提示应该类似于:</p>< p>警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。</p>< p>DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。</p>< p>此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为&ldquo;只供DBO使用&rdquo;。此时可以访问数据库里面的用户表了。</p>< p>H.验证数据库一致性(可省略)</p>< p>dbcc checkdb('test')</p>< p><strong>一般执行结果如下:</strong></p>< p>CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。</p>< p>DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。</p>< p>I.设置数据库为正常状态</p>< p>sp_dboption 'test','dbo use only','false'</p>< p>如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。</p>< p>J.最后一步,我们要将步骤E中设置的&ldquo;允许对系统目录直接修改&rdquo;一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成<br />& nbsp;</p>< p>-SQL</p>< p>sp_configure&nbsp;'allow&nbsp;updates',0<br /> go&nbsp;<br /> reconfigure&nbsp;with&nbsp;override<br /> go</p>http://www.downcc.com/tech/5151.htmlSQL Server2013/12/09 15:54:07<p>绿色资源网一台数据库服务器更换了一台机器,需要重新做一下同步复制,结果在订阅的时候出错了。</p>< p><span style="color: #ff0000">显示的错误消息:</span></p>< p><strong>错误消息:</strong><br /> 进程无法向表&ldquo;&quot;dbo&quot;.&quot;Company&quot;&rdquo;进行大容量复制。 (源: MSSQL_REPL,错误号: MSSQL_REPL20037)<br /> 获取帮助: http://help/MSSQL_REPL20037<br />< strong>成批发送失败</strong><br /> 在数据流中缺少用于大容量复制 text、ntext 或 image 数据的文本长度。 (源: MSSQLServer,错误号: 4813)<br /> 获取帮助: http://help/4813<br /> 若要获取详细说明初始化订阅表时所遇到的错误的错误文件,请执行在下面显示的 bcp 命令。有关该 bcp 实用工具及其支持的选项的详细信息,请参阅 BOL。 (源: MSSQLServer,错误号: 20253)<br /> 获取帮助: http://help/20253<br /> bcp& quot;xxx&quot;.&quot;dbo&quot;.&quot;Company&quot; in& quot;d:\ReplData\unc\WIN-39LLDBLGOAH_CR173COM_173\20131209110101\Company_2.bcp&quot; -e& quot;errorfile&quot; -t&quot;\n&lt;x$3&gt;\n&quot; -r&quot;\n&lt;,@g&gt;\n&quot; -m10000 -SWIN-URF3GO69MJ2 -T -w (源: MSSQLServer,错误号: 20253)<br /> 获取帮助: http://help/20253</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013129155537897.jpg" /></p>< p style="text-indent: 0px"><strong>解决方案:</strong></p>< p>1、将 服务器 -&gt; 属性 -&gt; 高级将中&nbsp;最大文本复制大小& nbsp;改大一点。最小加两个0</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013129155537994.jpg" /></p>< p>(这么搞了一下还是不行)&nbsp;</p>< p><span style="color: #ff0000"><strong>后来排查到这张表有一列很长且有特殊html标签类/&lt;&amp;%|^等特殊字符,去掉该列就很顺利的发布成功了.</strong></span></p>< p><span style="color: #ff0000"><strong>但实际中这个排除是非常难的,你根本不知道是哪一条记录有特殊字符。<br />< /strong></span><br /> 后来将所有字符集全部改成&nbsp;<span style="color: rgb(51,51,255)">unicode 才解决。</span><br />< span style="color: #3333ff"><strong>将所有的非unicode(varchar/char/text) 类型字段调整为unicode(nvarchar/nchar/ntext)类型即可&quot;</strong></span><br />< br /> 看来以后在新建表的时候还是最好采用&nbsp;<span style="color: rgb(51,51,255)">unicode& nbsp;字符集</span></p>http://www.downcc.com/tech/5144.htmlSQL Server2013/12/02 20:18:12<p>SQL Server 2008是目前windows上使用最多的sql数据库,2008的安装机制是基于framework重写的,特点是非常耗时间(我的小本本配置还是可以的。^_^)。但不需要原ISO或隐藏起来的MSI文件(如果你不小心手工删除这些安装文件的话,也不必担心。) 这也是为什么大多数时候,SQL Server 2008的安装日志文件setup.log会有1G大小的原因。因为安装工序实在是太庞大了。</p>< p>SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本。</p>< p><strong>SQL Server 2008 的安装:</strong></p>< p>下载<a target="_blank" href="http://www.downcc.com/soft/11805.html">SQL Server 2008</a>的iso安装文件,用虚拟光驱打开,运行Setup</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202013887.jpg" /></p>< p>选择&ldquo;安装&rdquo;&nbsp; -&gt;& quot;全新sql独立安装&quot;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202014481.jpg" /></p>< p>开始安装,中间需要填写数据库实例,选择混合密码登陆。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202014507.jpg" /></p>< p>实例随意命名</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202014497.jpg" /></p>< p>账户名如图选择 NT AUTHORTIY\SYSTEM</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202014525.jpg" /></p>< p>身份验证模式设置为混合模式并设置密码。选择添加当前用户(系统管理员)。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202014112.jpg" /></p>< p><strong>SQL Server 2008 配置</strong></p>< p>安装完成后,SQL Server Management Studio就是数据库管理程序,SQL Server 配置管理器是配置程序。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202014576.jpg" /></p>< p>登陆SSMS(SQL Server Management Studio)的时候,服务器名称格式是 (local)\安装时填写的实例名,身份验证用SQL 验证,登录名是系统默认的sa,密码是安装时选择混合模式自己设置的密码。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202014643.jpg" /></p>< p>如果不能登陆,选择Windows方式登陆,然后&ldquo;安全性&rdquo; -&gt;& quot;登录名&quot; -&gt;& quot;sa&quot; -&gt;& ldquo;状态&rdquo; 设为启用,详细如图。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202015158.jpg" /></p>< p><strong>打开SQL Server配置管理器</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202015967.jpg" /></p>< p>选择SQL Server 网络配置里自己建立的实例的协议,选择TCP/IP协议设置为启用状态,将其中一个IP设置为本机 127.0.0.1,设为启用。再将IP ALL的端口设置为1433,动态端口设为空。如图。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202015126.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202015592.jpg" /></p>< p><strong>同样的,将客户端的端口也设置为1433,启用状态。</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202015529.jpg" /></p>< p>然后!必须要重启SQL Server服务,不然即使电脑重启都是无效的。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202015154.jpg" /></p>< p>SQL Server 2008 连接JDBC</p>< p>OK,启动你的SSMS,对数据库右键,&ldquo;建立新的数据库&rdquo;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202015596.jpg" /></p>< p>建立数据库后建立表,如图,建立表后要编辑表对表右键编辑前两百行。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202016165.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202016546.jpg" /></p>< p><strong>开始在eclipse里操作连接JDBC:</strong></p>< p>首先要用到连接驱动,官方的驱动是sqlserver4.jar,不过这个包有时候用不起,这里用的是jtds驱动,JDK1.6用jtds 1.2.6。JDC1.7用1.3.0。 然后在ECLIPSE& ldquo;项目&rdquo;& ldquo;属性&rdquo;& ldquo;构建路径&rdquo; 里& ldquo;添加外部jar (add extern jar)&rdquo;</p>< p>官网下载地址:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202016228.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-12/2013122202016772.jpg" /></p>< p>然后就可以开始写测试代码了:</p>< p><strong>[java]</strong>&nbsp;view plaincopy</p>< p>String&nbsp;JDriver&nbsp;=&nbsp;&quot;net.sourceforge.jtds.jdbc.Driver&quot;;&nbsp;&nbsp;&nbsp;//jtds驱动代码&nbsp;&nbsp;</p>< p>DB&nbsp;=&nbsp;&quot;jdbc:jtds:sqlserver://127.0.0.1:1433;datebaseName=School&quot;;&nbsp;//URL连接&nbsp;&nbsp;</p>< p>测试</p>< p><strong>[java]</strong>&nbsp;view plaincopy</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;JDriver&nbsp;=&nbsp;&quot;net.sourceforge.jtds.jdbc.Driver&quot;;&nbsp;&nbsp;</p>< p>String&nbsp;connectDB&nbsp;=&nbsp;&quot;jdbc:jtds:sqlserver://127.0.0.1:1433;datebaseName=School&quot;;&nbsp;&nbsp;</p>< p>try&nbsp;{&nbsp;&nbsp;</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(JDriver);&nbsp;&nbsp;</p>< p>}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;加载数据库引擎失败&quot;);&nbsp;&nbsp;</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;System.exit(0);&nbsp;&nbsp;</p>< p>}&nbsp;&nbsp;</p>< p>System.out.println(&quot;数据库加载成功&quot;);&nbsp;&nbsp;</p>< p>String&nbsp;user&nbsp;=&nbsp;&quot;sa&quot;;&nbsp;&nbsp;</p>< p>String&nbsp;password&nbsp;=&nbsp;&quot;xxxxxxxxxxxxxxxx&quot;;&nbsp;&nbsp;</p>< p>System.out.println(&quot;准备连接....&quot;);&nbsp;&nbsp;</p>< p>Connection&nbsp;connection&nbsp;=&nbsp;DriverManager.getConnection(connectDB,user,password);&nbsp;&nbsp;</p>< p>System.out.println(&quot;连接成功&quot;);&nbsp;&nbsp;</p>< p>Statement&nbsp;stmt&nbsp;=&nbsp;connection.createStatement();&nbsp;&nbsp;</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql0&nbsp;=&nbsp;&quot;USE&nbsp;数据库名&quot;;&nbsp;&nbsp;</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.execute(sql0);&nbsp;&nbsp;</p>< p>这里有一个小的需要注意的地方是,在eclipse里用到数据库的时候,最好在最前面加一句</p>< p>&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; String sql0 =& quot;USE 数据库名&quot;;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&http://www.downcc.com/tech/5141.htmlMySQL2013/11/30 15:19:12<p><strong>Ubuntu</strong>是一个流行的Linux操作系统,基于Debian发行版和GNOME桌面环境,和其他Linux发行版相比,Ubuntu非常易用,和Windows相容性很好,非常适合Windows用户的迁移,预装了大量常用软件,中文版的功能也较全,支持拼音输入法,预装了<a target="_blank" href="http://www.downcc.com/soft/7036.html">firefox</a>、Open Office、多媒体播放、图像处理等大多数常用软件,一般会自动安装网卡、音效卡等设备的驱动。</p>< p><strong>安装MySQL</strong></p>< p>在Ubuntu上可以使用Ubuntu Software Center或者apt命令来安装MySQL,两种方式都十分方便。</p>< p>1. 使用Ubuntu Software Center:打开Ubuntu Software Center,在右上角的搜索框查询mysql,然后选定MySQL Server,点击安装即可。</p>< p>2. 使用apt:打开终端执行& rdquo;sudo apt-get install mysql-server&ldquo; 即可。</p>< p><strong>MySQL初始配置</strong></p>< p>MySQL完成安装后可以直接使用root账户登录,且该账户默认是没有密码的。注意这里的root角色就是指你的Ubuntu的root角色,如果你当前使用的系统帐号不是root的话,也不必切换到系统root账户,可以在登录MySQL的时候使用&ldquo;-u&quot;这个参数来指定登录账户。如:</p>< pre> $mysql -u root mysql&gt; show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) mysql&gt; select Host, User from user; +-----------+------------------+ | Host | User | +-----------+------------------+ | 127.0.0.1 | root | | ::1 | root | | iUbuntu | | | iUbuntu | root | | localhost | | | localhost | debian-sys-maint | | localhost | root | +-----------+------------------+ 7 rows in set (0.00 sec)</pre>< p>因为此时root账户默认没有密码,所以不用输入密码就能以root角色登录并查看所有信息的权限。如果换成非root角色登录MySQL,则只拥有部分数据库操作权限。</p>< pre> $mysql mysql&gt; show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+ 2 rows in set (0.00 sec) mysql&gt; use mysql ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'</pre>< p>因此MySQL完成安装后的第一件事就是给root用户设置密码,否则数据库将毫无安全可言。</p>< pre> mysql&gt; GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY& quot;&lt;password&gt;&quot;;</pre>< p>将以上命令中的&lt;password&gt;替换为你要设定的密码,以上命令的意思是对在本机(localhost)使用&lt;password&gt;密码登录的root用户赋予所有数据库的操作权限。设置密码后,如果再以root用户登录就需要输入密码了,如:</p>< pre> $mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) $mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 75 Server version: 5.5.34-0ubuntu0.13.10.1 (Ubuntu) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql&gt;< /pre>< p><strong>建立数据库独立用户</strong></p>< p>因为root用户拥有数据库的所有操作权限,所以不能轻易地提供给别人使用。在一个MySQL实例中可以创建多个数据库,这些数据库可能归属于不同项目,每个数据库的操作角色也不一样。对此可以针对不同那个数据库指定用户进行访问。</p>< pre> 首先使用root角色创建一个数据库 mysql&gt; create database db_web_monitor 然后将这个数据库授予一个叫xavier的用户使用 mysql&gt; GRANT ALL PRIVILEGES ON db_web_monitor.* TO xavier@localhost IDENTIFIED BY& quot;xavier&quot;;</pre>< p>这样就可以使用xavier用户,密码为xavier在本机登录MySQL操作db_web_monitor数据库了。</p>< pre> $mysql -u xavier ERROR 1045 (28000): Access denied for user 'xavier'@'localhost' (using password: NO) $mysql -u xavier -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 77 Server version: 5.5.34-0ubuntu0.13.10.1 (Ubuntu) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql&gt; show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db_web_monitor | | test | +--------------------+ 3 rows in set (0.00 sec) mysql&gt;< /pre>< p><strong>开放远程登录权限</strong></p>< p>1. 首先修改MySQL的配置文件,允许监听远程登录。</p>< pre> $sudo vi /etc/mysql/my.cnf 找到bind-address所在行 45 # Instead of skip-networking the default is now to listen only on 46 # localhost which is more compatible and is not less secure. 47 bind-address = 127.0.0.1 将 bind-address值修改为本机IP即可。 注意注释说明,如果是较老版本的MySQL,此处就应该是skip-networking,直接将其注释即可。</pre>< p>2. 授予用户远程登录权限。</p>< pre> mysql&gt;GRANT ALL PRIVILEGES ON db_web_monitor.* TO xavier@&quot;%&quot; IDENTIFIED BY& quot;xavier&quot;;</pre>< p>如此这般,xavier用户就可以在任意主机通过IP访问到本机MySQL,对db_web_monitor数据库进行操作了。</p>http://www.downcc.com/tech/5132.htmlSQL Server2013/11/21 17:08:17<p>这几天在写一个程序,需要用到SQLITE,但是对于SQLITE不熟悉,在网上找了一个SQLITE查看器</p>< p>这个查看器叫做:<a target="_blank" href="http://www.downcc.com/soft/20776.html">SQLite Database Browser 2.0</a></p>< p>这个查看器可以新建SQLITE文件数据库,可以建立表索引,写SQL语句,编辑表数据</p>< p>不过这个查看器支持的SQLITE数据库引擎版本低了一点,先介绍一下SQLite Database Browser 2.0是怎么用的?</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117936766.jpg" /><br /> 主界面</p>< p>将SQLITE的db文件拖进去软件就可以了,不用点击&ldquo;打开&rdquo;按钮</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117936355.jpg" /><br /> 新建数据库</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117936328.jpg" /></p>< p><strong>由于新建数据库的时候,软件的保存类型为ALL Files</strong>,新建完毕之后会发现文件没有后缀名,这个时候你可以先close database</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117936224.jpg" /></p>< p>重命名一下数据库文件,<strong>比如新建数据库的时候,文件名为123,那么可以重命名为123.db</strong></p>< p>如果用editplus来打开,会看到文件头有SQLite format 3的字样</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117936845.jpg" /></p>< p>在软件的标题栏可以看到数据库文件的路径</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117936237.jpg" /></p>< p>编写并执行SQL语句</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117937381.jpg" /></p>< p>浏览数据并且编辑表数据</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117937223.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117937198.jpg" /></p>< p>修改表数据完毕后,记得点击&ldquo;Apply Changes&rdquo;按钮</p>< p><strong>修改表结构</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117937923.jpg" /></p>< p><strong>重命名表名,添加字段,修改字段,删除字段</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117937478.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117937917.jpg" /></p>< p>修改表结构,建立索引,建立新表之后都要点击一下保存按钮,不然的话所做的修改无效</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/2013112117937208.jpg" /></p>< p>似乎介绍SQLite Database Browser 2.0这个工具的篇幅多了一点.</p>http://www.downcc.com/tech/5124.htmlSQL Server2013/11/18 16:25:37<p>虽然在Unity3D中能够通过PlayerPrefs类来保存和读取数据,但是一旦数据量增大,仅仅通过代码的方式存取数据,这样的工作量是非常大的。那么如何通过使用Sql Server数据库来存取数据呢?其实过程也非常简单,过程如下:</p>< p>1、找到System.Data.<a target="_blank" href="http://www.downcc.com/dll.html">dll文件</a>,默认的地址是在C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity,这个根据你所安装的路径有关。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" qvod="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131118162637266.png" /></p>< p><strong>2、将该文件复制到你的工作空间下的Asset文件夹内</strong></p>< p>3、在你的编辑器中添加引用,我用的是VS</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" qvod="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131118162638151.png" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" qvod="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131118162638233.png" /></p>< p>4、在命名空间内增加程序集</p>< p>using System;</p>< p>using System.Data;</p>< p>using System.Data.SqlClient;</p>< p><strong>5、编写连接数据库代码</strong></p>< pre> SqlConnection con = null; SqlDataAdapter sda = null; void Start() { string s = @&quot;server=.;database=ConnectTest;uid=sa;pwd=123456&quot;; //注意,这里必须使用SQL Server和Windows验证模式,否则会报错 con = new SqlConnection(s); con.Open(); string sql =& quot;select * from table1&quot;; sda = new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); sda.Fill(ds,& quot;table1&quot;); print(ds.Tables[0].Rows[0][0]); }</pre>< p>6、实验结果</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" qvod="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131118162638645.png" /></p>http://www.downcc.com/tech/5120.htmlSQL Server2013/11/12 12:34:04<p>想好好学习数据库(SQL SERVER)方面的知识,哪怕是工具的使用也好。每天前进一小步,才能成就未来一大步。今天要介绍的是怎么使用Microsoft SQL Server Management Studio导入数据。</p>< p>Microsoft SQL Server Management Studio是SQL SERVER的客户端工具,相信大家都知道。</p>< p>不知道大家是否都知道微软给我们提供了数据的导入和导出的功能。参照如下图:</p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131846971.gif" /></p>< p>下面就贴图并简单说明,以导入数据为例,<strong>导出数据功能好像跟导入数据完全一样</strong>,不知道为什么要搞两个出来。</p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131847902.gif" /></p>< p>下图也有说明了,选择要从中复制数据的源,也就是设置源头数据,比如从A复制到B,这里就是设置A的数据库。</p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131848158.gif" /></p>< p>接着上面说从A复制到B,下图就是设置B的数据库</p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131848121.gif" /></p>< p>下图提供两种方式来选择复制的数据源,如果A跟B是一样的结构,那么选择第一种方式即可,另一种方式则是个性化选择需要复制的数据源</p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131848680.gif" /></p>< p>因为Demo数据库(上面例子说的A)只有一张表,所以下图只显示一张表,如果是有多张表,则都会显示出来,勾选我们需要复制的表即可</p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131848240.gif" /></p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131848256.gif" /></p>< p align="center"><img alt="SQL SERVER 2005数据导入图文教程" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-11/20131112131848211.gif" /></p>< p>注:这里面需要说明一下的是,如果A里面的表使用的主键是自增长的方式,那么你就需要把B里面表的自增长方式先去掉。因为这里面从A复制到B是所有字段的复制,包括自增长的ID也一样需要复制。等复制完数据之后,再改回B数据库的表为自增长方式。</p>http://www.downcc.com/tech/5061.htmlSQL Server2013/10/10 17:19:48<p>前段时间用得好好的 sql server 2005 的管理工具& quot;SQL Server Management Studio&quot; 突然不能用了. 提示& quot;未能加载包&quot;Microsoft SQL Management Studio Package& quot;&quot;.</p>< p>网上查了一下, 有人说是& quot;.net framework 2.0&quot; 的原因, 有人说要打什么& quot;start...&quot; 的命令, 更离谱的提议是重装 SQL Server 2005.</p>< p>&quot;SQL Server Management Studio&quot; 只是一个类似第三方的工具而已, 有必要重装 SQL Server 2005 吗? 并且即使&quot;SQL Server Management Studio&quot; 不能正确运行, SQL Server 2005 的数据库引擎还是能正常运行. 既然是一个工具, 那么应该可以独立安装, 修复或删除才对. 我能考虑到的, 微软一定也考虑到了.</p>< p>本人技术粗糙, 不知道那个& quot;start...&quot; 的怎么用. 但是我知道 windows 的& quot;控制面板&quot; 里面有个& quot;添加或删除程序&quot;.</p>< p>1 找到 SQL Server 2005, 点击&quot;更改&quot;</p>< div><img alt="" src="http://hi.csdn.net/attachment/201108/13/0_1313209127j4Y4.gif" /></div>< p>2 进入下面的窗口, 选择& quot;工作站组件&quot;, 点击& quot;下一步&quot;,& quot;下一步&quot;,& quot;下一步&quot;</p>< div><img alt="" src="http://hi.csdn.net/attachment/201108/13/0_1313209143J4PP.gif" /></div>< p>3 进入下面的窗口, 点击& quot;更改已安装的组件&quot;</p>< p><img alt="" src="http://hi.csdn.net/attachment/201108/13/0_1313209166AQds.gif" /></p>< p>4 进入下面的窗口, 看到& quot;管理工具&quot; 了吧, 这个包含& quot;SQL Server Management Studio&quot; 在内的几个工具.</p>< div><img alt="" src="http://hi.csdn.net/attachment/201108/13/0_1313209184AIX8.gif" /></div>< p>5.点击& quot;管理工具&quot; 左边的图标, 选择& quot;红叉叉 整个功能将不可用&quot;, 点击& quot;下一步&quot;,后面的操作就是删除& quot;管理工具&quot; 了</p>< p>删除完成后, 就是安装了, 重复 1-4 的步骤, 到了 5的步骤就有点不同了, 点击&quot;管理工具&quot; 左边的图标, 选择& quot;将安装到本地硬盘上&quot;, 点击&quot;下一步&quot; , 后面的操作就是安装& quot;管理工具&quot; 了.</p>< p>操作成功后, 运行 管理工具& quot;SQL Server Management Studio&quot; , 能成功进入的话就恭喜了.</p>< p><span style="color: #ff0000">可能安装& quot;管理工具&quot; 时需要你插入光盘,可以没必要,只要运行它就行了:SqlRun_Tools.msi;</span></p>< div><img alt="" src="http://hi.csdn.net/attachment/201108/13/0_13132092140Qh8.gif" /></div>< div>&nbsp;</div>< div>这是另外一种方法:</div>< p>C:\WINDOWS\Microsoft.NET\Framework \v2.0.50727\Microsoft .<span style="color: #ff0000">NET Framework 2.0\netfx.msi右键选择修复</span>,完成会提示重启,重启完成就OK了,没有必要花那么大力气!</p>< p style="text-indent: 2em">最初&ldquo;Microsoft SQL Server 2005&rdquo; 运行正常,后来我安装.NET Framwork 2.0 SP1,安装过程提示&ldquo;安装过程中出现了问题,安装失败&rdquo;。再次打开SQL Server 2005时,</p>< p style="text-indent: 2em">出现如下问题:</p>< p style="text-indent: 2em"><img alt="" src="http://hi.csdn.net/attachment/201108/13/0_1313209363oou9.gif" /></p>< p style="text-indent: 2em">解决办法:修复&ldquo;Microsoft .NET Framework 2.0&rdquo;。</p>< p style="text-indent: 2em">步骤:开始&mdash;&mdash;控制面板&mdash;&mdash;添加或删除程序&mdash;&mdash;单击&ldquo;<span style="color: #ff0000">Microsoft .NET Framework 2.0&rdquo;&mdash;&mdash;更改&mdash;&mdash;修复。</span></p>< p style="text-indent: 2em">修复成功后,重启电脑,运行SQL Server 2005 ,一切正常。</p>< p style="text-indent: 2em">因为&ldquo;Microsoft SQL Server 2005&rdquo;是基于.NET Framwork 2.0的。</p>< p>这是我从网上搜的,有问题,自己在尝试解决吧!</p>http://www.downcc.com/tech/5052.htmlSQL Server2013/09/22 19:00:21<p>在一个理想的世界中,不会存在任何数据库的损坏,就像我们不会将一些严重意外情况列入我们生活中的日常一样,而一旦这类事情发生,一定会对我们的生活造成非常显著的影响,在SQL Server中也同样如此,或许几年内您没有遇见过数据库中出现这类情况,而一旦遇见这类情况,往往伴随着数据的丢失,宕机,严重甚至您本身的职业生涯也会受到影响。因此对于这类情况,我们需要了解数据库损坏方面的知识,以便我们能够事前准备,事后能够处理。本篇文章会对数据库损坏的原因、现象、事前和事后的一些处理方法以及简单的修复方法进行探讨。</p>< p><strong>数据库为什么会损坏?</strong></p>< p>在了解数据库损坏之前,首先我们要了解SQL Server是如何将数据保存到数据文件(MDF、NDF等)。无论更新还是插入数据,数据都需要首先在内存中的Buffer Pool驻留,然后通过CheckPoint和Lazy Writer等过程将内存中的数据持久化到磁盘。在这个过程中,数据脏页由内存写入持久化的IO子系统,在此期间,按照IO子系统的不同,数据可能经过这几层:</p>< p>Windows(写数据一定调用的是WINDOWS API)</p>< p>Windows底层的中间层(杀毒软件,磁盘加密系统)</p>< p>网卡、路由器、交换机、光钎、网线等(如果IO子系统不是直连的话)</p>< p>SAN控制器(如果使用了SAN)</p>< p>RAID控制器(IO子系统做了RAID)</p>< p>磁盘或SSD等持久化存储器</p>< p>因此,数据页被写入持久化存储期间,可能经过上述列表中的几项。在经历上述过程中,硬件环境会受到很多方面的影响,比如说电压是否稳定、断电、温度过高或过低、潮湿程度等,而软件方面,由于软件都是人写的,因此就可能存在BUG,这些都可能导致数据页在传输过程中出现错误。</p>< p>此外,影响磁盘的因素也包括电压是否稳定、灰尘等因素,这些也有可能引起磁盘坏道或整体损坏。</p>< p>上面提到的所有因素都可以被归结为IO子系统。因此,造成数据损坏的情况绝大部分是由IO子系统引起的,还有非常非常小的概率内存芯片也会导致数据页损坏,但这部分情况微乎其微,因此不在本文的讨论之列。</p>< p>上面提到的这些导致数据损坏的原因都属于天灾,还有一些人祸。比如说通过编辑器等手动编辑数据文件、数据库中还有需要Redo和Undo的事务时(也就是没有Clean Shutdown)删除了日志文件(通常会导致数据库质疑)。</p>< p><span style="color: #ff0000">发现数据库损坏</span></p>< p>在我们知道可能造成数据库的损坏原因之后,接下来我们来看SQL Server是如何监测数据库页损坏的。</p>< p>在SQL Server的数据库级别,可以设置页保护类型,一共有三个选项:None,CheckSum,Torn_Page_Detection,如图1所示:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/201392220458235.png" /><br /> 图1.页保护的三种选项</p>< p>关于这三种选项,首先,请无视None,请不要在任何场景下选择该选项,该选项意味着SQL Server不对页进行保护。</p>< p>其次是TORN_PAGE_DETECTION,在SQL Server中,数据的最小单位是页,每一页是8K,但是对应磁盘上往往是16个512字节的扇区,如果一个页在写入持久化存储的过程中,只写了一半的页,这就是所谓的TORN_PAGE_DETECTION,SQL Server通过每个扇区提512字节中前2位作为元数据,总共16个扇区32位4字节的元数据(页头中标识为:m_tornBits),通过该元数据来检测是否存在部分写的TORN_PAGE,但该类型的页验证无法检测出页中的写入错误,因此在SQL Server 2005及以上版本,尽量选择CheckSum。</p>< p>在SQL Server 2005及以上版本,引入了CheckSum,CheckSum可以理解为校验和,当数据页被写入持久化存储时,会根据页的值计算出一个4字节的CheckSum存于页头(页头中标识同为:m_tornBits),和数据在同一页中一起保存在数据库中。当数据从IO子系统被读取到内存中时,SQL Server会根据页内的值再次计算CheckSum,用该重新计算的CheckSum和页头中存储的CheckSum进行比对,如果比对失败,则SQL Server就会认为该页被损坏。</p>< p>由CheckSum的过程可以看出,只有在页被写入SQL Server的过程中才会计算CheckSum,因此如果仅仅改变数据库选项的话,则页头中的该元数据并不会随之改变。</p>< p><strong>与IO相关的三种错误</strong></p>< p>通过上述CheckSum的原理可以看出,SQL Server可以检测出页损坏,此时,具体的表现形式可能为下述三种错误的一种:</p>< p>823错误,也就是所谓的硬IO错误,可以理解为SQL Server希望读取页,而Windows告诉SQL Server,无法读取到该页。</p>< p>824错误,也就是所谓的软IO错误,可以理解为SQL Server已经读取到该页,但通过计算CheckSum等值发现不匹配,因此SQL Server认为该页已经被损坏。</p>< p>825错误,也就是所谓Retry错误。</p>< p>其中, 上述823和824错误都是错误等级为24的严重错误,因此会被记录在Windows应用程序日志和SQL Server的错误日志中,而引起该错误的页会被记录在msdb.dbo.suspect_pages中。SQL Server错误日志中也会记录到出错页的编号,如图2所示。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/201392220459732.png" /><br /> 图2.824错误在SQL Server错误记录中的描述</p>< p>因此,如果我们存在完善的备份的话,我们可以通过备份进行页还原(在此再次强调一下对于DBA来说,有&rdquo;备&rdquo;无患),一个简单的页还原代码如代码清单1所示。</p>< pre> USE [master]</pre>< pre> RESTORE DATABASE [Corrupt_DB] PAGE='1:155'< /pre>< pre> FROM DISK = N'C:\xxx.bak'< /pre>< pre> WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5</pre>< p>代码清单1.一个简单的页还原代码,从备份中还原文件ID1中的第155页</p>< p>记得我们前面说的,在读取页计算校验和时出错,这既可能是被写入持久化存储的页本身出错,也可能是在页被读取的过程中出错,此时SQL Server会尝试从IO子系统中再次读取该页,最多可能是4次尝试,如果在4次尝试过程中校验和通过,则会是825错误,否则是824错误。这里要注意,与823和824错误不同的是,825错误是一个等级仅为10的信息。</p>< p>因此,由于有固定的错误编号,因此可以在SQL Server Agent中对823和824设置警报。</p>< p><span style="color: rgb(255,0,0)">备份CheckSum</span></p>< p>上述页CheckSum只有在页被使用时才会被校验页的正确性。在备份数据库时,可以指定CheckSum选项来使得备份读取的页也计算校验和,从而保证了被备份的数据库是没有损坏的。在图3的备份选项我们可以注意到这两条:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/201392220459478.png" /><br /> 图3.CheckSum和Continue_After_Error选项</p>< p>如果启用了CheckSum,当备份过程中发现了页校验和错误时,就会终止备份,而启用了Continue_After_Error选项的话,在检测到校验和错误时,仍然继续从而使得备份成功。</p>< p>备份如果启用了CheckSum选项,除去检测每一页的校验和之外,还会在备份完成后,对整个备份计算校验和并存储于备份头中。</p>< p>此外,对于备份,我们还可以通过Restore Verifyonly with CheckSum来验证备份,来保证备份的数据没有被损坏。</p>< p><strong>DBCC CheckDB</strong></p>< p>前面提到SQL Server发现错误的方法有两种,分别为在读取页时和在备份时(本质上也是读取页)。但如果我们希望对于数据一致性的检查更加的激进,那我们应该定期使用CheckDB来检查数据的一致性,而不至于在生产时间数据被读取时才能发现错误。</p>< p>CheckDB命令会对整个数据库做所有的一致性检查。当检查对象是Master数据库时,CheckDB还会检查ResourceDB。</p>< p>CheckDB最简单的用法如代码清单2所示,在当前数据库上下文中直接执行CheckDB,将会检查当前数据库中所有的一切。</p>< pre> DBCC CHECKDB</pre>< p>代码清单2.CheckDB最简单的用法</p>< p>CheckDB命令在企业版中会使用多线程来进行,会对整个数据库进行一致性检查,在该过程中,使用了内建数据库快照的方式进行,因此不会造成阻塞,但CheckDB会消耗大量的CPU、内存和IO。因此CheckDB要选择在维护窗口时间或是系统闲时进行。</p>< p>默认情况下,CheckDB命令会将输出所有的信息,但通常我们并不关心这些信息,而是只关心错误信息,因此实际中通常给DBCC指定不显式信息的参数,如代码清单3所示。</p>< pre> DBCC CHECKDB WITH NO_INFOMSGS;</pre>< p>代码清单3.CheckDB通常搭配No_InfoMsgs参数</p>< p>实际上,CheckDB是一套命令的汇总,CheckDB会依次检查下述内容:</p>< p>初次检查系统表</p>< p>分配单元检查(DBCC CHECKALLOC)</p>< p><strong>完整检查系统表</strong></p>< p>对所有表进行一致性逻辑检查(DBCC CHECKTABLE)</p>< p>元数据检查(DBCC CHECKCATALOG)</p>< p>SSB检查</p>< p>索引视图、XML索引等检查</p>< p>首先,当发现系统表损坏时,只能通过备份进行恢复(这也是为什么备份除TempDB之外的系统表非常重要)。其次,在一个大数据库中,做一次CheckDB时间会非常长,维护窗口时间或系统闲时的时间可能无法Cover这段时间,那么我们可以将CheckDB的任务分散到CHECKALLOC、DBCC CHECKTABLE、DBCC CHECKCATALOG这三个命令中。</p>< p>更多关于CheckDB的详细信息,请参阅:http://technet.microsoft.com/en-us/library/ms176064.aspx。</p>< p><strong><span style="color: #ff0000">数据库损坏的修复</span></strong></p>< p>数据库损坏最http://www.downcc.com/tech/5051.htmlSQL Server2013/09/21 18:59:36<p>今天在做项目的时候,在附加数据库的时候遇到了问题,因为也不知道之前的库的那个,2000,还是05?不太清楚,目前我自己用的库的08,在附加的时候果然出现了问题。可以看到如下错误,我截图!<br />< br /> 下面我们就来解决此问题!<br /> 附加数据库出错提示:<br /> 执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/201392119148500.jpg" /></p>< p>------------------------------<br /> 未能在 sysindexes 中找到数据库 ID 7 中对象 ID 1 的索引 ID 1 对应的行。请对 sysindexes 运行 DBCC CHECKTABLE。<br /> Could not find row in sysindexes for database ID 7, object ID 1, index ID 1. Run DBCC CHECKTABLE on sysindexes.<br /> 未能打开新数据库 'xiaoche'。CREATE DATABASE 将终止。 (Microsoft SQL Server,错误: 602)<br /> 解决方法:<br /> 一、<br /> .select @@version看当前的数据库实例版本,是不是SQL2000在附加SQL2005的数据库。<br /> 二、<br /> SQL2000附加SQL2005数据具体方法<br /> 如题,若使用SQL2000附加SQL2005的数据库时在附加时会出现了错误602,提示&ldquo;对sysindexes运行DBCC CHECKTABLE&rdquo;因为数据库附加到2005的时候, 数据库文件已经自动升级到2005, 所以在2000下是无法再附加的(没有向上兼容的)<br />< br />< br /> 直接restore或附加是不行的, 用脚本+导数据肯定没有问题。<br /> 2005转到2000的步骤步骤<br /> 1. 生成for 2000版本的数据库脚本<br /> 2005 的manger studio<br /> -- 打开&quot;对象资源管理器&quot;(没有的话按F8), 连接到你的实例<br /> -- 右键要转到2000的库<br /> -- 任务<br /> -- 生成脚本<br /> -- 在&quot;脚本向导&quot;的&quot;选择数据库&quot;中, 确定选择的是要转到2000的库<br /> -- 勾选&quot;为所选数据库中的所有对象编写脚本&quot;<br /> -- 在接下来的&quot;选择脚本选项&quot;中, 找到&quot;为服务器版本编写脚本&quot;项, 选择&quot;SQL Server 2000&quot;<br /> -- 其他选项根据需要设置<br /> -- 最后把脚本保存到一个 .sql 脚本文件<br />< br /> 2. 在2000中创建目标数据库<br /> 在查询分析器(或2005的manger studio在打开脚本文件), 连接到SQL Server 2000,执行上面生成的脚本.以创建一个新的数据库<br />< br /> 3. 将数据从2005导到2000<br /> 2005 的manger studio<br /> -- 打开&quot;对象资源管理器&quot;(没有的话按F8), 连接到你的实例<br /> -- 右键要转到2000的库<br /> -- 任务<br /> -- 导出数据<br /> -- 在&quot;SQL Server 导入和导出向导&quot;的&quot;选择数据源&quot;步骤中, 确定选择的是要导出的数据库<br /> -- 在&quot;选择目标&quot;步骤中, 连接到 2000, 并选择步骤2新建的库<br /> -- 在&quot;选择源表和源视图&quot;中, 选择所有的表<br /> -- 最后完成</p>http://www.downcc.com/tech/5050.htmlSQL Server2013/09/21 18:55:24<p>以前开发使用的都是WIN7+VS +<a target="_blank" href="http://www.downcc.com/soft/7639.html">SQL2005< /a>现在要做个项目,他们使用的数据库是<a target="_blank" href="http://www.downcc.com/soft/18685.html">SQL2000</a>,所以没办法就只能装个SQL2000了呗!</p>< p>正确安装SQL2000(我安装的时候我安装的是新实例,最好不要默认安装,因为已经装了SQL2005。这是网上找到的,我不想重装系统,我就没有试试默认实例安装,有兴趣的朋友可以试试)。&nbsp;</p>< p>这样装好以后,你直接打开查询分析器 是会报错的!应该先打开企业管理器,打开后你可能看到几个实例,你刚建的SQl2000的实例也在里面,</p>< p><strong>你会发现它默认是没有启动,手动开启。</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013921185816537.jpg" /></p>< p>现在你就可以打开查询分析器了,但是你会发现,它连的是SQL2005 的服务器。要让它正确连接到SQl2000 的服务器</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013921185816292.jpg" /></p>< p>而这个服务器的名字怎么找呢??&mdash;&mdash;&gt;打开<span style="color: #ff0000">SQL server 服务器管理器选择你的数据库实例</span> 把整个名字复制下来 填到上面图里的SQL server里就OK</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013921185816515.jpg" /></p>< p>这就实现了连接查询</p>< p>下面的是实现在数据库里建表&mdash;&mdash;&gt;其实这个网上已经有好多关于这个的解决方法</p>< p>下面我就复制一段别人的!!</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013921185816505.jpg" /></p>< p>如果上面的步骤你可以建表成功,你就可以不用往下看了!!!!!!</p>< p><strong>下面是都很对上面建表可以 当是不能保存的问题</strong></p>< p>建好了表却不能保存,相信大家觉得很肯跌吧!!</p>< p>&mdash;&mdash;&gt;解决方案</p>< p>&nbsp; 在设计表里的头单击任意一行的列名,并右键 点属性</p>< p>你会看到这样的一个框</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013921185816984.jpg" /></p>< p>只要在表名里修改成你要的表名,就可以保存好了!(默认上面填的是Table1之类的)</p>< p>这就可以在win7 在安装了SQL2005 后安装SQL2000的安装方法和使用方法。!</p>http://www.downcc.com/tech/5042.htmlSQL Server2013/09/17 21:46:09<p>这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库</p>< p>定期执行数据库备份任务,取代SSMS的维护计划,上传数据库备份文件到FTP服务器、其他网络硬盘等</p>< p>软件有免费和付费两种模式,不过本人觉得免费版本的功能已经足够了。</p>< p>支持SQLSERVER版本:SQLSERVER2000、SQLSERVER2005、SQLSERVER2008、SQLSERVER2008 R2、SQLSERVER2012</p>< p>当你的电脑是&nbsp;SQL Server Express 2005 and SQL Server Express 2008版本的时候特别有用。</p>< p>因为SQLSERVER Express版本没有维护计划,使用SQLBackupAndFTP可以解决这个问题。</p>< p><a target="_blank" href="http://www.downcc.com/soft/10827.html"><strong>免费SQL数据库备份软件下载|SQLBackupAndFTP V9.0.28 官方正式版_支持FTP上传</strong></a></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214852696.jpg" /></p>< p>安装路径:C:\Program Files\Pranas.NET\SQLBackupAndFTP<br />& nbsp;</p>< p>安装目录下主要都是一些DLL</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214852397.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853995.jpg" /></p>< p>SQLBackupAndFTP会新建一个Windows服务,用来定时备份数据库,取代SSMS的维护计划,</p>< p>我们公司开发的数据库备份软件也是使用Windows服务的方式来定时备份数据库的,其实这些软件的原理差不多</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853592.jpg" /></p>< p>看到上面这些图片,我相信想破解这款软件的人开始蠢蠢欲动了,不过最好不要破解,尊重一下别人</p>< p>大家使用免费版本就行了,最好不要破解他的付费功能</p>< p>一些设置选项</p>< p><span style="color: #ff0000">首先设置数据库连接</span></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853369.jpg" /></p>< p><span style="color: #ff0000">勾选中要备份的数据库</span></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853516.jpg" /></p>< p>设置邮件,把备份报告发到邮箱</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853644.jpg" /></p>< p><span style="color: #ff0000">设置定时任务,可以设置完整备份,差异备份,事务日志备份</span>,</p>< p>还可以设置使用系统任务计划来运行定时任务还是使用软件的Windows服务来运行</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853711.jpg" /></p>< p>软件本身也预设了一些定时选项,用鼠标点击一下就可以应用了</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853779.jpg" /></p>< p>设置备份选项,包括大型数据库临时文件存放路径,压缩备份文件选项,是否校验备份文件,备份数据库日志存放路径,加密备份文件(收费)</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853968.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853579.jpg" /></p>< p>我把备份数据库日志和大型数据库临时文件的路径都设置在D:\MSSQL\Databackup</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214853791.jpg" /></p>< p>设置了上面的备份路径之后还需要回到主界面设置备份路径,备份数据库文件可以上传到FTP服务器,DROPBOX,SKYDRIVE(要付费)等</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214854535.jpg" /></p>< p>我把备份文件放到与备份数据库日志同一路径下 D:\MSSQL\Databackup</p>< p>软件还可以设置自动删除多久以前的备份文件,还可以备份到远程路径,NAS存储上,</p>< p>如果是网络路径,可以点击&ldquo;Test&rdquo;按钮测试是否连通</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214854220.jpg" /></p>< p>设置FTP</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855811.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855525.jpg" /></p>< p>全部设置完毕之后可以把配置保存起来,当重装软件,或者换了机器之后就不用再设置了</p>< p>导出配置文件</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855991.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855225.jpg" /></p>< p>设置好之后可以点击&ldquo;run now&rdquo;按钮手动执行备份,以后就会按照定时任务设置里的设置计划去执行数据库备份操作了</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855232.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855191.jpg" /></p>< p>打开邮箱就能看到邮件了</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855583.jpg" /></p>< p>在路径下可以看到日志和已经压缩了的备份文件</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855150.jpg" /></p>< p>日志</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" />&nbsp;View Code</p>< p>可以看到备份文件大小为5.1MB,压缩之后是886KB,压缩比例挺高的<br />& nbsp;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855198.jpg" /></p>< p>一键还原数据库</p>< p>点击还原按钮</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855822.jpg" /></p>< p>选择数据库备份文件的路径</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855180.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214855996.jpg" /></p>< p>如果数据库正在使用中,他会问你是否终止数据库的所有进程</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214856624.jpg" /></p>< p>点击&quot;是&quot;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-9/2013917214856516.jpg" /></p>< p>还原http://www.downcc.com/tech/5036.htmlOracle2013/09/10 12:33:09<p>在平时的开发中,我们经常遇到数据表中出现重复的数据,那么该如何解决呢?这里介绍两种情况下的数据去重方法,一、完全重复数据去重;二、部分字段数据重复去重。</p>< p><strong>一、完全重复数据去重方法</strong></p>< p>对于表中完全重复数据去重,可以采用以下SQL语句。</p>< p>Code</p>< p>CREATETABLE&quot;#temp&quot;AS&nbsp;(SELECTDISTINCT&nbsp;*&nbsp;FROM&nbsp;表名);--创建临时表,并把DISTINCT 去重后的数据插入到临时表中</p>< p>truncateTABLE&nbsp;表名;--清空原表数据</p>< p>INSERTINTO&nbsp;表名(SELECT&nbsp;*&nbsp;FROM&quot;#temp&quot;);--将临时表数据插入到原表中</p>< p>DROPTABLE&quot;#temp&quot;;--删除临时表</p>< p>具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表。</p>< p><strong>二、部分数据去重方法</strong></p>< p>首先查找重复数据</p>< p>select&nbsp;字段1,字段2,count(*)&nbsp;from&nbsp;表名&nbsp;groupby&nbsp;字段1,字段2&nbsp;havingcount(*)& gt; 1</p>< p>将上面的&gt;号改为=号就可以查询出没有重复的数据了。</p>< p>想要删除这些重复的数据,可以使用下面语句进行删除:</p>< p>deletefrom&nbsp;表名 a&nbsp;where&nbsp;字段1,字段2&nbsp;in</p>< p>(select&nbsp;字段1,字段2,count(*)&nbsp;from&nbsp;表名&nbsp;groupby&nbsp;字段1,字段2&nbsp;havingcount(*)& gt; 1)</p>< p>上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库卡死。</p>< p>基于上述情况,可以先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:</p>< p>CREATETABLE&nbsp;临时表&nbsp;AS</p>< p>(select&nbsp;字段1,字段2,count(*)&nbsp;from&nbsp;表名&nbsp;groupby&nbsp;字段1,字段2&nbsp;havingcount(*)& gt; 1)</p>< p><span style="color: #ff0000">下面就可以进行这样的删除操作了:</span></p>< p>deletefrom&nbsp;表名 a&nbsp;where&nbsp;字段1,字段2&nbsp;in&nbsp;(select&nbsp;字段1,字段2&nbsp;from&nbsp;临时表);</p>< p>先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。</p>< p>上面的语句会把所有重复的全都删除,在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。</p>< p>下面是查询重复数据的一个例子:</p>< p>select&nbsp;a.rowid,a.*&nbsp;from&nbsp;表名 a</p>< p>where&nbsp;a.rowid !=</p>< p>(</p>< p>selectmax(b.rowid)&nbsp;from&nbsp;表名 b</p>< p>where&nbsp;a.字段1 = b.字段1&nbsp;and</p>< p>a.字段2 = b.字段2</p>< p>)</p>< p>上面括号中的语句是查询出重复数据中rowid最大的一条记录。而外面就是查询出除了rowid最大之外的其他重复的数据了。</p>< p>由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:</p>< p>deletefrom&nbsp;表名 a</p>< p>where&nbsp;a.rowid !=</p>< p>(</p>< p>selectmax(b.rowid)&nbsp;from&nbsp;表名 b</p>< p>where&nbsp;a.字段1 = b.字段1&nbsp;and</p>< p>a.字段2 = b.字段2</p>< p>)</p>< p>同理,上述代码的执行效率毕竟低,所以我们可以考虑建立临时表,将需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。</p>< p>createtable&nbsp;临时表&nbsp;as</p>< p>select&nbsp;a.字段1,a.字段2,MAX(a.ROWID) dataid&nbsp;from&nbsp;正式表 a&nbsp;GROUPBY&nbsp;a.字段1,a.字段2;</p>< p>deletefrom&nbsp;表名 a</p>< p>where&nbsp;a.rowid !=</p>< p>(</p>< p>select&nbsp;b.dataid&nbsp;from&nbsp;临时表 b</p>< p>where&nbsp;a.字段1 = b.字段1&nbsp;and</p>< p>a.字段2 = b.字段2</p>< p>);</p>< p>commit;</p>http://www.downcc.com/tech/5033.htmlMySQL2013/09/02 17:15:52<p>1、首先下载MySQL的安装文件,我这里安装的是MySQL5.1.7版本的,</p>< p>下载链接:<font size="3" face="Verdana"><a target="_blank" href="http://www.downcc.com/soft/19854.html">MySQL-client-5.1.7-0.i386.rpm下载</a></font></p>< p>     <font size="3" face="Verdana"><a target="_blank" href="http://www.downcc.com/soft/19855.html">MySQL-server-5.1.7-0.i386.rpm下载</a></font></p>< p>2、安装MySQL数据库服务器</p>< p>  进入安装包所在文件夹,执行命令 rpm -ivh MySQL-server-5.1.7-0.i386.rpm 安装MySQL服务器。</p>< p>  如果报了与原先版本冲突的话,就执行rpm -qa|grep -i mysql命令,会显示已安装的Mysql版本,我的显示mysql-libs-5.1.61-4.el6.i686<br /> 这时如果有的话就强制删除:rpm -e --nodeps mysql-libs-5.1.61-4.el6.i686(因为有包依赖,所以要强制删除)</p>< p>我的报错提示如下:</p>< pre> MySQL-server-5.1.7-0.i386.rpm Preparing... ########################################### [100%] file /usr/share/mysql/charsets/README from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/Index.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/armscii8.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/ascii.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/cp1250.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/cp1251.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/cp1256.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/cp1257.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/cp850.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/cp852.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/cp866.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/dec8.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/geostd8.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/greek.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/hebrew.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/hp8.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/keybcs2.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/koi8r.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/koi8u.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/latin1.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/latin2.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/latin5.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/latin7.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/macce.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/macroman.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/charsets/swe7.xml from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/czech/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/danish/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/dutch/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/english/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/estonian/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/french/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/german/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/greek/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/hungarian/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/italian/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/japanese/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/korean/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/norwegian-ny/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/norwegian/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/polish/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/portuguese/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/romanian/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/russian/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/serbian/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm conflicts with file from package mysql-libs-5.1.61-4.el6.i686 file /usr/share/mysql/slovak/errmsg.sys from install of MySQL-server-5.1.7-0.i386.rpm chttp://www.downcc.com/tech/5000.htmlSQL Server2013/08/22 21:31:57<p>由于工作需要,今天要在电脑上安装<a target="_blank" href="http://www.downcc.com/soft/13332.html">SQL Server 2005</a>。以往的项目都是使用Oracle,MS的数据库还真的没怎么用过,安装Oracle已经轻车熟路,但装SQL Server好像还有点小麻烦,所以记录下来,以留备用。</p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif">-------------------------------------------------------------------------------------------------< br /> 操作系统:Microsoft Windows 7 旗舰版(32位)< br /> 数据库版本:SQL Server 2005 简体中文开发板< br /> -------------------------------------------------------------------------------------------------< br />< br /> 安装过SQL Server的人可能知道,它的有些服务要依赖于IIS,所以为了保证数据库的顺利安装,先启用IIS服务吧!Win7比XP好的一点是:启用IIS功能无需借助系统安装盘了,只要在控制面板里启用即可,如图:</span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213448269.png" /></span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif">step1</span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213448587.png" /></span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif">step2</span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213448444.png" /></span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif">第三步需要注意的是,选中红框中的复选项,分别为&ldquo;Internet Information Services 可承载的 Web 核心&rdquo;、&ldquo;Web 管理工具&rdquo;和&ldquo;万维网服务&rdquo;,这里我不确定&ldquo;Web 管理工具&rdquo;是否需要,因为我选中它们的父节点&ldquo;Internet 信息服务&rdquo;后选中了它的一些子项,多选总比少选全面,需要将它们的子项全部选中才显示为&ldquo;&radic;&rdquo;,否则显示为&ldquo;■&rdquo;,记住,一定要显示为&ldquo;&radic;&rdquo;才行,效果就和step3一样就可以了!点击确定后会出现线面的框框</span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213448576.png" /></span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif">如果我们不启用IIS功能,在后续安装SQL Server时会遇见如图画面</span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449980.png" /></span></p>< p style="text-align: left"><span style="font-family: tahoma, arial, helvetica, sans-serif">到此,IIS功能就算启用完成了,下面开始安装SQL Server</span></p>< p style="text-align: left">&nbsp;</p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">安装文件解压后是一个ISO的镜像,其实是一个DVD文件,将两张光盘合并到一起了,所以你的电脑需要安装虚拟光驱,虚拟光驱不会用请先百度一下,我就不在这里赘述了。</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">首先启动虚拟光驱软件,把SQL Server的镜像加载进来,如图</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449313.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">此时我们可以在我的电脑里看到这张虚拟的安装盘了,如图</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449636.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">如果没有自动运行,那么我们就点双击H盘图标,进入安装</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449505.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">紧接着进入如下画面</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449883.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">我的系统是32位的,我自然选择基于x86的,之后点击&ldquo;服务器组件、工具、联机丛书和示例(C)&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449960.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">紧接着弹出对话框,点击&ldquo;运行程序(R)&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449570.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">接着出现,勾选,下一步</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213449868.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">安装程序会检查所需组件,点击&ldquo;安装&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450532.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">点击&ldquo;安装&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450553.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450180.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">点击&ldquo;下一步&rdquo;后,安装程序会监测计算机配置</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450511.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">紧接着跳转为安装向导</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450780.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">点击&ldquo;下一步&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450267.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">我们看到,所有的项目都成功,如果之前没有启用IIS功能的话,出现的画面就是之前的那个样子,点击&ldquo;下一步&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450136.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">输入公司名后,点击&ldquo;下一步&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450289.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">这里需要注意,如果你的界面只有最后一个复选框可选,其他都为灰色不可选,那说明你的版本有问题,不是开发版,请马上放弃安装,从上面我给的下载地址下载开发板进行安装。全部选中后点击&ldquo;下一步&rdquo;</span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/2013822213450372.png" /></span></p>< p><span style="font-family: tahoma, arial, helvetica, sans-serif">默认安装到系统盘下,我们可以点击高级进行修改,点击&ldquo;浏览(R)&rdquo;</span></p>< p><span style=http://www.downcc.com/tech/4999.htmlSQL Server2013/08/22 20:42:30<p>最近从绿色资源网下载sql2005的部分朋友反应无法安装sql2005,今天在安装SQL Server2005时碰到了这个错误,到网上搜了一下,找到了解决办法,特记在这里,以备以后需要。</p>< p>1、sql2005下载地址&nbsp;&nbsp;注意了,要下载947M的那个文件,不对的注意下<br /> 一般情况下安装的时候如果提示com+有问题就事先解决下,不要等安装到最后了,再来,我是通过第二种方法解决的,而且是中止以后重新安装的,一切正常。<br />< br />< strong>第一种错误显示:</strong>< br />< br /> 无法在com+目录中安装和配置程序集 错误:-2146233087< br /> 无法在com+目录中安装和配置程序集c:\program files\Microsoft SQL Server\90\DTS\tasks\microsoft.sqlserver.MSMQTASK.DLL.< br /> 错误:-2146233087< br /> sql server 安装时&quot;无法在COM+目录中安装和配置程序&quot;的解决办法:< br /> 无法在COM+目录中安装和配置程序集,C:\program files\microsoft SQL Server\90< br /> \NotificationServices\9.0.242\Bin\microsoft.sqlserver,notificationservices.dll。< br /> 错误:-2146233087< br /> 错误消息:Unknown error 0x80131501< br /> 错误说明:事务管理器可用。(异常来自HRESULT:0x8004D01B)< br />< br />< strong>【解决办法】</strong>< br />< br /> 这时候可以暂停安装,不要点击中止、忽略,也不要点击取消< br />< br /> 按以下步骤< br /> 1.删除注册表中的键:< br /> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC< br /> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC< br /> HKEY_CLASSES_ROOT\CID< br /> 2、使用cmd执行 停止MSDTC服务:net stop msdtc< br /> 3、使用cmd执行 卸载MSDTC服务:msdtc -uninstall< br /> 4、使用cmd执行 重新安装MSDTC服务:msdtc -install< br /> 点击重试就可以继续安装了。< br /> 如何处理 SQL Server 安装过程中的 COM+ 检查失败问题< br />< br />< strong>第二种错误显示:< br />< /strong><br /> COM+ 目录要求 (警告)< br /> 消息: COM+ 目录要求 如果 SQL Server 安装程序失败,安装程序将回滚所安装的系统,但可能不会删除所有 .manifest 文件。解决方法是重命名这些文件,然后重新运行安装程序。有关详细信息,请参阅&ldquo;如何处理 SQL Server 安装过程中的 COM+ 检查失败问题&rdquo;。< br /> 在装SQL Server 2005到系统检查配置时遇到上面的问题,我的解决思路是:< br /> 先把以COM+开头的服务全部启用,接着是把DTC这个服务启动(注意:这个服务是一定要启动的哦,如果有启动不了的可参考:Distributed Transaction Coordinator 服务不能启动解决办法。之后再重新安装,这个错就解决掉了。其实可以略过第一步(以COM+开头的服务全部启用)的,只要能把DTC这个服务启动就没什么问题的。< br /> 以下是微软官方提供的解决方案:&lt;如何解决 SQL Server 安装程序中的 COM+ 系统配置检查失败问题&gt;:< br /> Microsoft SQL Server 2005 安装程序检查 COM+ 是否已正确配置。如果发现配置错误,安装程序仍将继续,但是在系统配置检查 (SCC) 报告中显示以下警告:< br />& ldquo;如果 SQL Server 安装程序失败,安装程序将回滚所进行的安装,但可能不会删除所有的 .manifest 文件。解决方法是重命名这些文件,然后重新运行安装程序。&rdquo;< br /> 如果未运行 Microsoft 分布式事务处理协调器 (MS DTC),或者,在使用 Microsoft 群集服务器的情况下,如果 MS DTC 不是群集资源,则可能会发生 COM+ 错误。COM+ 依赖于 MS DTC,而 Integration Services 中的消息队列任务依赖于 COM +。如果出现 COM+ 错误,则只有将 COM+ 系统正确配置后,Integration Services 中的消息队列任务才可用。< br /> 若要使用消息队列(亦称 MSMQ),请确保 MS DTC 正在运行并且已正确配置。如果 SQL Server 安装在群集上,则 MS DTC 必须是群集资源。< br />< br />< strong>按照下列过程重新安装 COM+ :</strong>< br />< br />< strong>一:安装组件服务管理单元</strong>< br />< br /> 1&gt;在 Windows 桌面上,单击&ldquo;开始&rdquo;,然后单击&ldquo;运行&rdquo;。< br /> 2&gt;在&ldquo;打开&rdquo;框中,键入 MMC,然后单击&ldquo;确定&rdquo;。< br /> 3&gt;在&ldquo;控制台&rdquo;窗口中,单击菜单栏上的&ldquo;文件&rdquo;,然后单击&ldquo;添加/删除管理单元&rdquo;。< br /> 4&gt;在&ldquo;添加/删除管理单元&rdquo;窗口,单击&ldquo;添加&rdquo;。< br /> 5&gt;在&ldquo;添加独立管理单元&rdquo;窗口,从管理单元列表中选择&ldquo;组件服务&rdquo;,然后单击&ldquo;添加&rdquo;。< br /> 6&gt;单击&ldquo;关闭&rdquo;以关闭&ldquo;添加独立管理单元&rdquo;窗口,然后单击&ldquo;确定&rdquo;以关闭&ldquo;添加/删除管理单元&rdquo;窗口。< br /> 在&ldquo;控制台根节点\组件服务&rdquo;窗口,展开&ldquo;组件服务&rdquo;树。这就是当 COM+ 出现问题时,错误消息可能发生的地方。< br /> 再次运行 SQL Server 2005 安装程序。如果收到错误消息,请重新安装 COM+。< br />< br />< strong>二:重新安装 COM+< br />< br />< /strong>1&gt;从控制面板的&ldquo;添加或删除程序&rdquo;中,单击&ldquo;添加/删除 Windows 组件&rdquo;。< br /> 2&gt;在&ldquo;Windows 组件向导&rdquo;中,不对选择做任何更改,单击&ldquo;下一步&rdquo;。< br /> 3&gt;一直单击以完成向导,然后再次运行 SQL Server 2005 安装程序。< br />< br />< strong>无法在 COM+ 目录中安装和配置程序集 microsoft.sqlserver.notificationservices.dll< br />< /strong><br /> 安装SQL Server 2005的时候,出现错误,错误对话框的内容没有记录下来,不过Summary.txt(Summary.txt 位于%ProgramFiles%\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Hotfix)文件中有如下信息。< br /> Machine : ServerName< br /> Product : Client Components< br /> Error : Failed to install and configure assemblies C:\Program Files\Microsoft SQL Server\90\NotificationServices\9.0.242\Bin\microsoft.sqlserver.notificationservices.dll in the COM+ catalog.< br /> Error: -2146233087< br /> Error message: Unknown error 0x80131501< br /> Error description: The Transaction Manager is not available. (Exception from HRESULT: 0x8004D01B)< br />< br /> 微软提供的解决办法如下:< br /> To work around this problem, make sure that the Distributed Transaction Coordinator service runs under the NT AUTHORITY\NetworkService account. To do this, follow these steps:1. Click Start, click Run, type Services.msc, and then click OK.< br /> 2. In the Services window, double-click the Distributed Transaction Coordinator service.< br /> 3. In the Distributed Transaction Coordinator Properties dialog box, click the Log On tab.< br /> 4. On the Log On tab, specify the NT AUTHORITY\NetworkService account to be the logon account if the logon account is not the NT AUTHORITY\NetworkService account.< br />< br /> Note You are prompted to restart the Distributed Transaction Coordinator service if the following conditions are true:&bull; You change the logon account of the Distributed Transaction Coordinator service.< br />& bull; The Distributed Transaction Coordinator service is running before you change the logon account.< br />< br /> 5. Start the Distributed Transaction Coordinator service if it is not started.< br />< br /> 但是在启动时如果出错,错误代码为1073337669 的话,在命令提示符里输入< br /> msdtc -resetlog< br />< br /> 注:这种错误我只有在安装VS2005时不选择SQL Server组件,后来再安装SQL Server时才出现。< !--NEWSZW_HZH_END--></p>http://www.downcc.com/tech/4988.htmlSQL Server2013/08/16 20:27:59<p>刚刚在一台win2003的机器上安装一个<a target="_blank" href="http://www.downcc.com/soft/18685.html">SQL Server 2000< /a>的时候弹出一个窗口要我输入序列号...</p>< p>见鬼了这个SQL明明是已经集成了序列号的</p>< p>默认是</p>< p>M4FMF-7FBWJ-QW39C-4HDXR-MWHMD<br />& nbsp;在点确定的时候提示序列号不正确,在网上找了一些序列号输入进去也都不正确</p>< p>我的系统是Windows 2003 Server with SP2,以前都是在XP、2000系统下安装的,没有问题,会不会是系统差异导致的?</p>< p>微软也发布了相关的KB。解决方法如下:<br /> 打开注册表的< strong><span style="color: red">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager</span>,</strong>将<span style="color: red">SafeDLLSearchMode</span>这个DWORD 的键值改为< span style="color: red">0</span></p>< p>如果没有的话就创建这个DWORD类型的键值 然后生新安装就OK了<br />< br /> 附:SQL Server 2000中文版的安装序列号<br /> M4FMF-7FBWJ-QW39C-4HDXR-MWHMD<br /> JCYFH-BYJMR-C4PVV-VD9G3-VXDYG</p>< p>附两个小工具,如果在安装的时候提示挂起需要重启的话可以用这个小工具清一下注册表:</p>< p><a target="_blank" href="http://www.downcc.com/soft/18684.html">http://www.downcc.com/soft/18684.html</a></p>< p>见意大家下载这个版本的SQL< a target="_blank" href="http://www.downcc.com/soft/18685.html">http://www.downcc.com/soft/18685.html</a></p>http://www.downcc.com/tech/4980.htmlMySQL2013/08/14 21:26:38<p>以下的文章主要介绍的是实现<a target="_blank" href="http://www.downcc.com/soft/5690.html">MySQL</a>远程连接的实际操作流程,本文主要是由其相关的实际应用代码来引出MySQL远程连接的具体操作步骤,以下就是文章的主要内容描述,希望会给你带来一些帮助在此方面。</p>< p>1、进入MySQL,创建一个新用户root,密码为root:</p>< p>格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by& quot;用户密码&quot;;</p>< p>grant select,update,insert,delete on *.* to root@192.168.1.12 identified by& quot;root&quot;;<br />& nbsp;<br /> 原先数据表结构</p>< p>MySQL&gt; use MySQL;< br /> Database changed< br /> MySQL&gt; select host,user,password from user;< br /> +-----------+------+-------------------------------------------+< br /> | host | user | password |< br /> +-----------+------+-------------------------------------------+< br /> | localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |< br /> +-----------+------+-------------------------------------------+&nbsp;</p>< p>执行上述语句后结果</p>< p>MySQL&gt; use MySQL;< br /> Database changed< br /> MySQL&gt; select host,user,password from user;< br /> +--------------+------+-------------------------------------------+< br /> | host | user | password |< br /> +--------------+------+-------------------------------------------+< br /> | localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |< br /> | 192.168.1.12 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |< br /> +--------------+------+-------------------------------------------+< br /> 2 rows in set (0.00 sec)&nbsp;</p>< p>可以看到在user表中已有刚才创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,</p>< p>(1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。</p>< p>2、实现MySQL远程连接(授权法)</p>< p>将host字段的值改为%就表示在任何客户端机器上能以root用户登录到MySQL服务器,建议在开发时设为%。</p>< p>update user set host =& rsquo;%&rsquo; where user =& rsquo;root&rsquo;;</p>< p>将权限改为ALL PRIVILEGES</p>< p>MySQL&gt; use MySQL;< br /> Database changed< br /> MySQL&gt; grant all privileges on *.* to root@'%' identified by& quot;root&quot;;< br /> Query OK, 0 rows affected (0.00 sec)< br /> MySQL&gt; select host,user,password from user;< br /> +--------------+------+-------------------------------------------+< br /> | host | user | password |< br /> +--------------+------+-------------------------------------------+< br /> | localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |< br /> | 192.168.1.12 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |< br /> | % | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |< br /> +--------------+------+-------------------------------------------+</p>< p>3 rows in set (0.00 sec)</p>< p>这样机器就可以以用户名root密码root远程访问该机器上的MySQL.</p>< p>3、实现MySQL远程连接(改表法)</p>< p>use MySQL;< br /> update user set host = '%' where user = 'root';&nbsp;</p>< p>这样在远端就可以通过root用户访问MySQL.</p>http://www.downcc.com/tech/4950.htmlMySQL2013/08/03 23:12:04<p>我的是CentOS6.3+MySQL5.1.57。重启了一次服务器后,使用&gt; mysql -u root -p登陆是出现下面的错误:</p>< p>ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)</p>< p>于是,我检察mysql状态:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;&gt;&nbsp;/etc/rc.d/init.d/mysqld& nbsp;status& nbsp;</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp; 显示stop,未运行。</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;&gt;/etc/rc.d/init.d/mysqld& nbsp;restart</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;Stopping mysqld: [ OK ]</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MySQL Daemon failed to start.</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;Starting mysqld: [ FAILED]</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;&gt;ps -ef | grep mysql</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;root 28221 27474 0 14:18 pts/0 00:00:00 grep mysql& nbsp; 只有这一条</p>< p>至此,我可以确定,mysql无法启动。</p>< p>我开始排错,首先发现/tmp/mysql.sock不存在</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& gt;vim /etc/my.cnf</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;&nbsp;socket=/var/lib/mysql/mysql .sock</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;&nbsp;/var/lib/mysql/mysql .sock同样不存在</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& gt;find / -name mysql.sock</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp; 显示为空,未查询到mysql.sock文件,mysql.sock文件丢失了。</p>< p>我看网上有人说mysql.sock套接字文件可以简单地通过重启服务器重新创建得到它,</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;&gt;init 6& nbsp;& nbsp;& nbsp;重启命令</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;重启后发现错误还是那样,没有任何改变,mysql.sock重启服务器未自动生成。</p>< p>接下来了解到mysql.sock是一个临时文件,在<a target="_blank" href="http://www.downcc.com/soft/13295.html">mysql</a>启动时会自动生成,我的服务器未启动,自然就没有mysql.sock文件。</p>< p>我尝试安全启动模式,mysqld_safe试图通过工作目录找到服务器和数据库,但mysqld_safe还是失败。</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;&gt;mysqld_safe& amp;<br />& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;Starting mysqld daemon with databases from ....../mysql/var&nbsp;<br />& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;STOPPING server from&nbsp;pid file& nbsp;&nbsp;.......pid<br />& nbsp;</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;130802 15:17:11 mysqld ended</p>< p>各种命令尝试无效的情况下,我开始了本次最大的收获----学会看错误日志。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/201383231244612.png" /></p>< p>在错误日志中,启动失败的原因极为明显,file& lsquo;./mysql-bin。000004&rsquo; not found,failed to open!</p>< p>&nbsp;mysql开启了bin日志功能,到数据库根目录查看该文件是存在的,可能是文件权限的问题。</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;&gt;chown -R mysql:mysql /....../mysql/var</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;&gt;mysqld_safe& amp;</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;&gt;/etc/rc.d/init.d/mysqld& nbsp;restart</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;Stopping mysqld: [ OK ]</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;Starting mysqld: [&nbsp;OK]</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/201383231244652.png" /></p>< p>成功启动了!~</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/201383231244510.png" /></p>< p>此时mysql.sock文件出现了,在/var/lib/mysql/mysql .sock。如下图所示,以&rdquo;s&rdquo;开头的文件都是socket文件。</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/201383231244500.png" /></p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& gt; mysql -u root -p</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)</p>< p>/tmp/mysql.sock</p>< p>解决这个错误很简单,因为/tmp/mysql.sock不存在,用这样的方法:</p>< p>&gt;ln -s /var/lib/mysql/mysql .sock& nbsp; /tmp/mysql .sock</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/201383231244389.png" /></p>< p>以&rdquo;l&rdquo;开头的文件是软链接文件。或者可以通过修改/etc/my.cnf文件来修正它。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/201383231244285.png" /></p>< p>成功解决了!~</p>< p>就是这样一个问题折腾了我这么久,错误日志让它无所遁形。查看错误日志可以明确问题所在,而不是像我之前那样盲目的找错。</p>< p>俗话说授人以鱼不如授人以渔,学会查看日志,你也可以方便快捷的解决问题了。</p>< p>错误使人进步,我与这个错误斗争了四个多小时,对linux的&ldquo;一切皆文件&rdquo;这句话有了更深的了解,对我学习文件系统管理(目录树)有很大的帮助,让我的思维真正的从windows操作系统转向成linux系统。并最终解决问题,很有成就感,我喜欢这种感觉。</p>http://www.downcc.com/tech/4949.htmlOracle2013/08/03 23:09:34<p>SQL Turning 是Quest公司出品的Quest Central软件中的一个工具。Quest Central是一款集成化、图形化、跨平台的数据库管理解决方案,可以同时管理 Oracle、DB2 和 SQL server 数据库。</p>< p>一、SQL Tuning for SQL Server简介</p>< p>SQL语句的优化对发挥数据库的最佳性能非常关键。然而不幸的是,应用优化通常由于时间和资源的因素而被忽略。SQL Tuning (SQL优化)模块可以对比和评测特定应用中SQL语句的运行性能,提出智能化的优化建议,帮助用户改善应用的响应时间。SQL优化模块具有非介入式SQL采集、自动优化和专家建议等功能,全面改善SQL优化工作。</p>< p>二、SQL Tuning for SQL Server的使用</p>< p>1、打开Quest Database Management Solutions弹出窗口如图1所示</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/20138323116771.jpg" /></p>< p>图1&nbsp;&nbsp;</p>< p>2、在红色标记处打开SQL Tuning&nbsp;优化SQL&nbsp;&nbsp;&nbsp;&nbsp;</p>< p>&nbsp;&nbsp;(1)建立连接。</p>< p>在Quest Central主界面上的&ldquo;Database&rdquo;树上选择&ldquo;SQL Server&rdquo;,然后在下方出现的&ldquo;Tools&rdquo;框中选择&ldquo;SQL Tuning&rdquo;选项,打开&ldquo;Lanch SQL Tuning for SQL Server Connections&rdquo;对话框(图2、图3)。我们在这里建立数据库服务器的连接,以后的分析工作都会在它上面完成。&nbsp;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/20138323117734.jpg" /></p>< p>图2&nbsp;&ldquo;建立连接&rdquo;对话框&nbsp;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/20138323117591.jpg" /></p>< p>图3</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;双击&ldquo;New Connection&rdquo;图标,在弹出窗口中输入数据库的信息,单击&ldquo;OK&rdquo;,然后单击&ldquo;Connect&rdquo;即可。</p>< p>&nbsp;&nbsp;&nbsp;(2)分析原始SQL语句&nbsp;,在单击&ldquo;Connect&rdquo;后将弹出一个新窗口,如图4&nbsp;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/20138323117103.jpg" /></p>< p>图4</p>< p>在打开窗口的&ldquo;Oriangal SQL&rdquo;文本框内输入需要分析的原始SQL语句,红色标记处选择对应的数据库名,SQL语句代码如下:</p>< p>图5&nbsp;分析原始SQL语句</p>< p>原始SQL语句</p>< p>然后点击工具栏上的&ldquo;Execute&rdquo;按钮,执行原始的SQL语句,SQL Tuning会自动分析SQL的执行计划,并把分析结果显示到界面上(图5)。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/20138323117161.jpg" /></p>< p>(3)优化SQL。</p>< p>现在我们点击工具栏上的&ldquo;Optimize Statement&rdquo;按钮,让SQL Tuning开始优化SQL,完成后,可以看到SQL Tuning产生了19条与原始SQL等价的优化方案(图6)。&nbsp;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/20138323117757.jpg" /></p>< p>图6 SQL优化方案</p>< p>(4)获得最优SQL。</p>< p>接下来,我们来执行上面产生的优化方案,以选出性能最佳的等效SQL语句。在列表中选择需要执行的优化方案(默认已全部选中),然后点击工具栏上的&ldquo;Execute&rdquo;按钮旁边的下拉菜单,选择&ldquo;Execute Selected&rdquo;。等到所有SQL运行完成后,点击界面左方的&ldquo;Tuning Resolution&rdquo;按钮,<br /> 可以看到最优的SQL已经出来啦,运行时间竟然可以提高21%!(图7)</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-8/20138323117914.jpg" /></p>< p>图7&nbsp;&ldquo;Tuning Resolution&rdquo;界面&nbsp;</p>< p>最优的SQL语句如下:</p>< p>5)学习书写专家级的SQL语句&nbsp;。</p>< p>优化后的SQL语句<br />& nbsp;</p>< p>SELECT&nbsp;dbo.Person_BasicInfo.*,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_GraduaterRegist.RegistNO&nbsp;AS&nbsp;RegistNO,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_GraduaterRegist.RegistTime&nbsp;AS&nbsp;BaoDaoTime,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_GraduaterRegist.RegistMan&nbsp;AS&nbsp;RegistMan,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.ComeFrom&nbsp;AS&nbsp;ComeFrom,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.Code&nbsp;AS&nbsp;Code,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.Status&nbsp;AS&nbsp;Status,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.ApproveResult&nbsp;AS&nbsp;ApproveResult,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.NewCorp&nbsp;AS&nbsp;NewCorp,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.CommendNumber&nbsp;AS&nbsp;CommendNumber,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.EmployStatus&nbsp;AS&nbsp;EmployStatus,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.NewCommendTime&nbsp;AS&nbsp;NewCommendTime,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.GetSource&nbsp;AS&nbsp;GetSource,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.EmployTime&nbsp;AS&nbsp;EmployTime,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.Job&nbsp;AS&nbsp;Job,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.FillMan&nbsp;AS&nbsp;FillMan,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.FillTime&nbsp;AS&nbsp;FillTime,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.IsCommendOK&nbsp;AS&nbsp;IsCommendOK,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.ApproveUser&nbsp;AS&nbsp;ApproveUser,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.ApproveTime&nbsp;AS&nbsp;ApproveTime,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.RegistTime&nbsp;AS&nbsp;RegistTime,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.EmployCorp&nbsp;AS&nbsp;EmployCorp,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Graduater_Business.JobRemark&nbsp;AS&nbsp;JobRemark,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASE&nbsp;WHEN&nbsp;dbo.Graduater_Business.ComeFrom&nbsp;=&nbsp;'WS'&nbsp;THEN&nbsp;'网上登记'&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN&nbsp;dbo.Graduater_Business.ComeFrom&nbsp;=&nbsp;'HP'&nbsp;THEN&nbsp;'华普大厦'&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN&nbsp;dbo.Graduater_Business.ComeFrom&nbsp;=&nbsp;'JD'&nbsp;THEN&nbsp;'精典大厦'&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN&nbsp;dbo.Graduater_Business.ComeFrom&nbsp;=&nbsp;'MC'&nbsp;THEN&nbsp;'赛马场'&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN&nbsp;ComeFrom&nbsp;=&nbsp;'ZX'&nbsp;THEN&nbsp;'高指中心'&nbsp;END&nbsp;AS&nbsp;ComeFromName,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Contact.Address&nbsp;AS&nbsp;Address,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Contact.Zip&nbsp;AS&nbsp;Zip,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Contact.Telephone&nbsp;AS&nbsp;Telephone,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Contact.Mobile&nbsp;AS&nbsp;Mobile,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Contact.Email&nbsp;AS&nbsp;Email,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Contact.IM&nbsp;AS&nbsp;IM,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Skill.ForeignLanguage&nbsp;AS&nbsp;ForeignLanguage,&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbo.Person_Skill.ForeignLanguageLevel&nbshttp://www.downcc.com/tech/4945.htmlSQL Server2013/07/31 17:23:24<p>使用MS数据库的朋友就会知道一个问题,C盘的空间很容易被占满了。因为本来系统盘就分区比较小,这是由于数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间。SQL&nbsp;Server数据库都有log文件,log文件记录用户对数据库修改的操作。可以通过直接删除log文件和清空日志在清除数据库日志。<br />< br />< strong>一、删除LOG</strong><br /> 1、分离数据库。分离数据库之前一定要做好数据库的全备份,选择数据库&mdash;&mdash;右键&mdash;&mdash;任务&mdash;&mdash;分离。</p>< p><img title="点击查看大图" alt="" width="486" height="289" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-7/2013731172427176.png" /></p>< p>勾选删除连接</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" height="526" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-7/2013731172428625.png" /></p>< p>分离后在数据库列表将看不到已分离的数据库。</p>< p>2、删除LOG文件</p>< p>3、附加数据库,附加的时候会提醒找不到log文件。</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="244" height="225" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-7/2013731172428135.png" /></p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="575" height="463" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-7/2013731172428886.png" /></p>< p>删除数据库信息信息的ldf文件:</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="520" height="140" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-7/2013731172428834.png" /></p>< p>附加数据库之后将生成新的日志文件log,新的日志文件的大小事504K。</p>< p>也可以通过命令才完成以上的操作:</p>< pre> use master;</pre>< pre> exec&nbsp;sp_detach_db&nbsp;@dbname='TestDB';</pre>< pre> exec&nbsp;sp_attach_single_file_db&nbsp;@dbname='TestDB',@physname='D:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\TestDB.mdf'</pre>< p>二<strong>、清空日志</strong></p>< p>该命令在SQL Server 2005和2000支持,SQL Server 2008不支持该命令。</p>< pre> DUMP TRANSACTION&nbsp;TestDB&nbsp;WITH&nbsp;NO_LOG</pre>< p><strong>三、收缩数据库文件</strong></p>< pre> DBCC&nbsp;SHRINKFILE&nbsp;('TestDB_log',1)</pre>< p><strong>四、截断事务日志</strong></p>< pre> BACKUP&nbsp;LOG&nbsp;TestDB&nbsp;WITH&nbsp;NO_LOG</pre>< p>该命令在SQL Server 2008也是不支持,在SQL Server 2005和2000可以使用。</p>< p>清除SQLServer2005的LOG文件&nbsp;&nbsp;</p>< pre> --最好备份日志,以后可通过日志恢复数据。。。 以下为日志处理方法 一般不建议做第4,6两步 第4步不安全,有可能损坏数据库或丢失数据 第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复. --*/ --下面的所有库名都指你要处理的数据库的库名< strong>1</strong>.清空日志 DUMP&nbsp;TRANSACTION&nbsp;库名&nbsp;WITH&nbsp;NO_LOG< strong>2</strong>.截断事务日志: BACKUP&nbsp;LOG&nbsp;库名&nbsp;WITH&nbsp;NO_LOG< strong>3</strong>.收缩数据库文件(如果不压缩,数据库的文件不会减小 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成&nbsp; --收缩数据库 DBCC&nbsp;SHRINKDATABASE(库名) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC&nbsp;SHRINKFILE(<strong>1</strong>)< strong>4</strong>.为了最大化的缩小日志文件(如果是sql&nbsp;<strong>7.0</strong>,这步只能在查询分析器中进行) a.分离数据库: 企业管理器--服务器--数据库--右键--分离数据库 b.在我的电脑中删除LOG文件 c.附加数据库: 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K 或用代码:&nbsp; 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 a.分离 EXEC&nbsp;sp_detach_db&nbsp;@dbname&nbsp;=&nbsp;'库名' b.删除日志文件 c.再附加 EXEC&nbsp;sp_attach_single_file_db&nbsp;@dbname&nbsp;=&nbsp;'库名',&nbsp; @physname&nbsp;=&nbsp;'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'< strong>5</strong>.为了以后能自动收缩,做如下设置: 企业管理器--服务器--右键数据库--属性--选项--选择&quot;自动收缩&quot; --SQL语句设置方式: EXEC&nbsp;sp_dboption&nbsp;'库名',&nbsp;'autoshrink',&nbsp;'TRUE'< strong>6</strong>.如果想以后不让它日志增长得太大 企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式: alter&nbsp;database&nbsp;库名 modify&nbsp;file(name=逻辑文件名,maxsize=<strong>20</strong>)< /pre>< p>SQL Server 数据库使用时间一长就会导致Log文件逐渐变的庞大, 想备份一下数据库, 想发给谁都很困难<br /> 运行下面的语句就可以 清到Log文件只剩下1M左右的空间.</p>< p>DUMP TRANSACTION 数据库名 WITH NO_LOG<br /> DBCC SHRINKDATABASE('数据库名',TRUNCATEONLY)</p>< p><span style="color: #ff0000">不重启SQL服务,删除SQLServer系统日志</span></p>< p>&nbsp;SQLServer的系统日志过大,就会引起SQLServer服务器无法启动等一系列问题。今天我遇到了这个问题,在网上搜索了一下,解决方法是删除就 可以了,可是当前的ErrorLog正在被SQL使用无法删除啊,要删除只能停止SQL服务器,难道就没有别得办法了吗?<br />& nbsp;回答是肯定的:使用以下存储过程:<strong>EXEC& nbsp;&nbsp;sp_cycle_errorlog</strong></p>< p>注释&nbsp;&nbsp;<br />& nbsp;&nbsp;每次启动&nbsp;&nbsp;&nbsp;SQL& nbsp;&nbsp;Server& nbsp;&nbsp;时,当前错误日志重新命名为&nbsp;&nbsp;&nbsp;errorlog.1;errorlog.1& nbsp;&nbsp;成为&nbsp;&nbsp;errorlog.2,errorlog.2& nbsp;&nbsp;成为&nbsp;&nbsp;&nbsp;errorlog.3,依次类推。sp_cycle_errorlog& nbsp;&nbsp;使您得以循环错误日志文件,而不必停止而后再启动服务器。</p>http://www.downcc.com/tech/4915.htmlOracle2013/07/16 15:40:20<p>Oracle有三种表连接技术,分别是嵌套连接、合并连接和哈希连接。</p>< p><strong>1. 嵌套循环连接 (NESTED LOOP Join)</strong></p>< p>嵌套连接把要处理的数据集分为外循环(驱动数据源)和内循环(被驱动数据源),外循环只执行一次(先执行),内循环执行的次数等于外循环执行的数据集个数。<br /> 这种连接的好处是内存使用非常少。<br /> 如果驱动数据源有限,且被驱动表在连接列上有相应的索引,则这种连接方式才是高效的。<br /> 在OLTP系统上常见到这种连接方式。</p>< p><strong>2. 排序合并连接 (Sort Merge Join)</strong></p>< p>顾名思义,排序合并就是先分别对待连接的数据集进行排序,然后再合并,其执行过程大致为:对表A的数据集进行排序,排序结果保存的工作区A中;对表B的数据集进行排序,排序结果保存在工作区B中;最后合并工作区A和B中的数据。<br /> 对这种连接方法,排序的开销是非常大的,和排序工作区相关的内存参数有:sort_area_size和sort_area_retained_size,都在在PGA中。</p>< p><strong>3. 哈希连接 (Hash Join)</strong></p>< p>哈希连接处理的两个数据集分别称为构造输入(build input)和探测输入(probe input),构造输入的每行记录用于构造哈希表,探测输入的每行记录对哈希表进行探测,以找出符合连接条件的记录。<br /> 将较小的表作为构造输入,较大的表作为探测输入,这样哈希连接的效率才比较高,在执行计划中,较小的输入表在前面,较大的探测表在后面。<br /> 哈希连接只有在相等连接的条件下才能进行。<br /> 和哈希表工作区相关的内存参数有:hash_area_size,也在PGA中。</p>http://www.downcc.com/tech/4911.htmlSQL Server2013/07/09 22:28:11<p>安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具。 失败,已安装 SQL Server 2005 Express 工具。若要继续,请删除 SQL Server 2005 Express 工具。sql server 2005 management和sql server 2008 management不是兼容吗?为什么会有这样的提示?</p>< p>答案是SQL Server 2005 Express 工具不是sql server 2005 management,不用卸载sql server 2005 management,用一个小技巧就行:</p>< p><span style="color: #ff0000">修改注册表!HKEYLocalMachine/Software/Microsoft/Microsoft SQL Server/90/Tools/ShellSEM</span>。</p>< p>网上有的讲把这个文件夹删了,我怕删了sql server 2005 management不能用了,重命名一下,把ShellSEM改成ShellSEM1试试,结果继续安装sql server 2008 management的时候显示安装成功!</p>< p>打开也没问题。只是因为前面修改了注册表,导致sql server 2005 management启动不了,双击打开界面闪一下就没有了。</p>< p>接着再<span style="color: #ff0000">打开注册表把ShellSEM1改回ShellSEM,就可以打开sql server 2005 management</span>,OK。搞定sql server 2008 management、 sql server 2005 management同时安装的问题!</p>< p><strong>SQL Server Management Studio2008连接不上?</strong></p>< p>开始--&gt;程序--&gt;sql server2008--&gt;配置工具--&gt;SQL Server配置管理器--&gt;SQLServer服务<br /> 在打开的窗口中执行以下操作:<br /> 1、对SQLServer(MSSSQLSERVER)右键、属性,内置账号设为localsystem--&gt;应用<br /> 2、对SQLServer(MSSSQLSERVER)右键、启动</p>http://www.downcc.com/tech/4907.htmlSQL Server2013/07/04 22:09:42<p>最近的项目主要做数据的归档,把数据从一个数据库拉到另一个数据库,造成新数据库的日志文件非常大;或者数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间。于是想把日志文件删除。最简单就是先分离数据库-》删除日志文件-》最后附加数据,我这里需要在SSIS中调用,所以已sql脚本为主。</p>< p>两种简单的清除日志的方法:</p>< p><span style="color: #ff0000">一分离附加法:</span><br /> 1、首先把数据库分离,分离数据库之前一定要做好数据库的全备份,选择数据库&mdash;&mdash;右键&mdash;&mdash;任务&mdash;&mdash;分离,其中药勾选删除连接!</p>< p>分离后在数据库列表将看不到已分离的数据库。<br />< br /> 2、删除数据库的LOG文件数据库文件夹下的对应数据库的 ldf文件<br />< br /> 3、附加数据库,附加的时候会提醒找不到log文件。到时附加上后会自动创建一个新的日志文件,从而达到清理数据库的目的</p>< p><span style="color: #ff0000">二、sql语句清除mssql日志</span><br />< br /> DUMP TRANSACTION TestDB WITH NO_LOG 清除日志<br />< br /> DBCC SHRINKFILE ('TestDB_log',1) 收缩数据库文件<br />< br /> BACKUP LOG TestDB WITH NO_LOG 截断事务日志<br />< br /> 该命令在SQL Server 2008也是不支持,在SQL Server 2005和2000可以使用。</p>< p><strong>首先我们需要获取数据库文件的路径:</strong></p>< p>&nbsp;declare @logfilename varchar(100)<br />& nbsp;declare @datafilename varchar(100)<br /> select @logfilename=physical_name from sys.database_files where type=1<br /> select @datafilename=physical_name from sys.database_files where type=0</p>< p>然后切换到master下,分离数据库</p>< p>use master<br /> exec sp_detach_db @dbname='TestVFA';</p>< p><strong>紧接下来就是删除数据库 日志文件</strong><br /> ----Remove file<br /> DECLARE @Result int<br /> DECLARE @FSO_Token int<br /> EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT<br /> EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile', NULL, @logfilename<br /> EXEC @Result = sp_OADestroy @FSO_Token<br /> 最后就是附加数据库<br /> exec sp_attach_single_file_db @dbname='TestVFA',@physname=@datafilename</p>< p>注意:默认Ole Automation Procedures 是禁用的我们需要启用它</p>< p>exec sp_configure 'show advanced options', 1;<br /> RECONFIGURE;<br /> exec sp_configure 'Ole Automation Procedures',1;<br /> RECONFIGURE;</p>http://www.downcc.com/tech/4874.htmlOracle2013/06/07 13:54:55<p>自己对oracle sql的一些优化总结,自己也记录下来,也希望对大家有帮助:</p>< p>一:使用where少使用having;</p>< p>二:查两张以上表时,把记录少的放在右边;</p>< p><strong>三:减少对表的访问次数;</strong></p>< p>四:有where子查询时,子查询放在最前;</p>< p>五:select语句中尽量避免使用*(执行时会把*依次转换为列名);</p>< p>六:尽量多的使用commit;</p>< p>七:Decode可以避免重复扫描相同的记录或重复连接相同的表;</p>< p><strong>八:通过内部函数也可提高sql效率;</strong></p>< p>九:连接多个表时,使用别名并把别名前缀于每个字段上;</p>< p>十:用exists代替in</p>< p>十一:not exists代替 not in(not in 字句将执行一个内部的排序和合并,任何情况下,not in是最低效的,子查询中全表扫描了。为了避免使用not in,可以改写成outer joins或not exists);</p>< p>十二:表连接比exists更高效;</p>< p><strong>十三:用exists替换distinct</strong></p>< p>&nbsp;& nbsp;& nbsp;& nbsp;例:&nbsp;</p>< p>&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;高:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;select distinct dept_no, dept_name& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;select dept_no, dept_name</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;from dept d, emp e& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; from dept d</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; where d.dept_no = e.dept_no;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; where exists (select 1 from emp e where e.dept_no = d.dept_no);</p>< p>十四:使用TKPROF工具来查询sql性能状态;</p>< p>十五:用索引提高效率(代价是:索引需要空间,而且定期重构索引很有必要:ALTER INDEX&lt;INDEXNAME&gt; REBUILD&lt;TABLESPACENAME);</p>< p>先介绍下索引的原理,方便接下来对索引的优化的理解:</p>< p>通过索引找到rowid,然后通过rowid访问表。但如果查询的列包括在index中,将不在执行第二部操作,因为检索数据保存在索引中,单单访问索引就可以完全满足查询要求。</p>< p>前提提要:在十六例中,LODGING列有唯一索引;MANAGER列上有非唯一性索引。</p>< p>十六:索引范围查询(INDEX RANGE SACEN):</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 适用于两种情况:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 1)基于一个范围的查询:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; SELECT LODGING FROM LODGING WHERE LODGING LIKE 'M%'</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; (where字句条件包括一系列的值,oracle将通过索引范围查询方式查询LODGING_PK)</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 2) 基于非唯一性索引的检索:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; SELECT LODGING FROM LODGING WHERE MANAGER = 'LI';</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;(此查询分两步:LODGING$MANAGER的索引范围查询得到所有符合条件记录的rowid,然后通过rowid访问表得到LODGING列的值。该索引为非唯一性索引,数据库不能对它执行索引唯一扫描)</p>< p>where字句中,如果索引列所对应的值的第一个字符由通配符开始,索引将不被采用,而会全表扫描,如 SELECT..... WHERE MANAGER LIKE '%LI'</p>< p>十七:基础表的选择:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 基础表:最先访问的表(通常以全表扫描的方式被访问)。</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 根据优化器的不同,SQL语句中基础表的选择是不一样的:</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果使用CBO,优化器会检查SQL语句中的每个表的物理大小,索引的状态,然后选用话费最低的路径。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果使用RBO,并且所有的连接条件都有索引对应,这种情况下基础表就是FROM字句中列在最后的表</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 例:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;SELECT A.NAME, B.MANAGER FROM WOKER A, LODGING B WHERE A.LODGING = B.LODGING;</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;由于LODGING列上有一个索引,而且WORKER表中没有相比较的索引,WORKER表将被作为查询基础表。</p>< p><strong>十八:多个平等的索引:</strong></p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 当SQL语句的执行路径可以使用分布在多个表上的多个索引时,oracle会同事使用多个索引并在运行时对它们的记录合并,检索仅对全部索引有效的记录。</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; oracle选择执行路径是,唯一索引等级高于非唯一索引,只有当where字句中索引列和常量比较才有效。如果索引列和其它表的索引列相比较,这种字句在优化器中等级非常低;</p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 如果不同表中两个相同等级的索引将被引用,根据FROM字句中表的顺序决定哪个先被使用。FROM字句中最后的表索引优先级高。如果相同表中两个相同等级的索引将被引用,where字句中最先被引用的索引将有最高的优先级。</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;例:DEPTNO上有非唯一性索引,EMP_CAT也有非唯一性索引</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; SELECT ENAME FROM EMP WHERE DEPT_NO = 20 AND EMP_CAT = 'A';&nbsp;</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; DEPTNO索引将被先检索,然后同EMP_CAT索引检索出的结果合并,执行路径如下:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; TABLE ACCESS BY ROWID ON EMP</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; AND _EQUAL</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; INDEX RANGE SCAN ON& nbsp;DEPT_IDX</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; INDEX RANGE SCAN ON CAT_IDX</p>< p>十九:等式比较与范围比较:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;先上例子:</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;SELECT ENAME FROM EMP WHERE DEPT_NO& gt; 20 AND EMP_CAT = 'A';</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;(在两个非唯一性索引前提下)此时范围索引不被使用,通过EMP_CAT索引查询出记录再与DEPT_NO条件进行比较</p>< p>&nbsp;& nbsp;& nbsp; 注意:唯一性所以做范围比较时,等级要比非唯一性索引的等式比较低;</p>< p><strong>二十:强制索引失效:</strong></p>< p>&nbsp;& nbsp;& nbsp;& nbsp; 如果两个或两个以上索引具有相同的等级,可以强制命令oracle优化器使用其中的一个。 那何时使用此种策略呢?如果一个索引已接近于唯一,而另一索引有很多重复的值,排序与合并反而会成为负担,此时可以屏蔽后者使其索引失效。</p>< p>&nbsp;& nbsp;& nbsp;& nbsp;(失效方式:对索引列加入计算'+0'或'||&quot;&quot;');</p>http://www.downcc.com/tech/4851.htmlOracle2013/05/22 13:52:29<p>Oracle 数据库备份:</p>< p><strong>--保留最近一周的备份记录;</strong></p>< p>====正文:&nbsp;</p>< p>====开始==============<br /> echo 设置备份文件存放文件夹...&nbsp;&nbsp;<br /> set& quot;tbuf=E:\Cway\backup&quot;&nbsp;</p>< p>echo 设置备份文件名(以星期几命名,即备份文件只保存最近一周)...&nbsp;&nbsp;<br /> set name=%date%&nbsp;&nbsp;<br /> set name=%name:~-3%&nbsp;&nbsp;<br /> set name=ORCL_backup_%name%&nbsp;&nbsp;<br />& nbsp;<br /> echo 是否存在同名文件,若存在则删除同名文件...&nbsp;&nbsp;<br /> if exist %tbuf%\%name%.dmp del %tbuf%\%name%.dmp&nbsp;&nbsp;<br /> if exist %tbuf%\%name%.log del %tbuf%\%name%.log&nbsp;&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> echo 开始备份XX项目 Oracle 数据库.....&nbsp;&nbsp;&nbsp;&nbsp;<br />& nbsp;<br /> exp&nbsp;User1/PassWord1@Orcl&nbsp;file=%tbuf%\%name%.dmp log='%tbuf%\%name%.log'&nbsp;&nbsp;<br />& nbsp;<br /> echo 备份完毕!</p>< p>===结束=======</p>< p>==将&ldquo;开始&rdquo;,&ldquo;结束&rdquo;之间的内容复制到txt文件中,修改相应的参数如:路径、数据库名称等;<br />& nbsp;</p>< p><strong>另存为bat格式,创建任务计划,设置每天运行即可实现数据库备份。&nbsp;&nbsp;</strong></p>< p>注:</p>< p>(1)User:要备份数据的用户名;</p>< p>(2)PassWord:口令;</p>< p>(3)Orcl:数据库名称;</p>http://www.downcc.com/tech/4850.htmlMySQL2013/05/20 10:26:43<p>有人可能会问,为什么9号出现的补丁,到现在才发现问题?大家都知道,服务器不是每天都重启的,有的服务器可能一个月或者一年半载重启一次,有的可能在9月9日以后重启过服务器,所以补丁生效了(我个人这么认为)。</p>< p><strong>症状: Can't connect to MySQL server on& lsquo;localhost' (10061)</strong></p>< p><strong>解决方案:</strong></p>< p>老方法:卸载KB967723补丁:登录服务器,进入控制面板& mdash; 添加和删除程序& mdash; (勾选上方的&ldquo;显示更新&rdquo;)在里面可以看到更新的KB967723这个补丁,然后就想卸载普通软件一样卸载,卸载中会提示你,如果卸载可能导致程序运行出错,没关系,选择&ldquo;是&rdquo;,继续卸载。卸载完成后程序服务器,一切正常!</p>< p>新方法:微软给出&hellip;重要 此部分、 方法,或任务包含告诉您如何修改注册表的步骤。 但是,如果错误地修改注册表,就可能发生严重的问题。 因此,请确保认真执行这些步骤。 添加的保护注册表之前先备份您修改它。 然后,发生问题时可以还原注册表。 有关如何备份和还原在注册表的详细信息,单击下面的文章编号,以查看 Microsoft 知识库中相应:</p>< p>322756 (<a href="http://support.microsoft.com/kb/322756/">http://support.microsoft.com/kb/322756/</a> ) 如何备份和还原在 Windows 注册表</p>< p>默认最大的临时 TCP 端口的数是 5000 适用于一节中包含的产品中。 在这些产品中添加一个新参数。 要提高临时端口的上限,请按照下列步骤操作:</p>< p>启动注册表编辑器。(开始&mdash;运行&mdash;REGEDIT)< br /> 在的注册表中找到以下子项,然后单击 参数 :HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters< br /> 在 编辑 菜单上单击 新建 ,,,然后添加下面的注册表项:数值名称: MaxUserPort< br /> 值类型: DWORD<br /> 值数据: 65534 (注意是十进制)<br /> 有效范围: 5000-65534 (十进制)<br /> 默认值: 0&times;1388 (5000 十进制)<br /> 说明: 此参数将控制程序从系统请求任何可用的用户端口时使用的最大端口数。 通常,1024 的值和包含的 5000 之间分配临时的 (短) 端口。< br /> 退出注册表编辑器,并重新启动计算机。<br /> 请注意 其他的 TCPTimedWaitDelay 注册表参数确定在多长时间关闭的端口等可重复使用已关闭的端口。 微软原文链接:<a href="http://support.microsoft.com/kb/q196271">http://support.microsoft.com/kb/q196271</a></p>http://www.downcc.com/tech/4842.htmlMySQL2013/05/13 11:49:43<p>突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程,下次遇到就不会这么手忙脚乱了。</p>< p><strong>处理过程:</strong><br />& nbsp;一遇到报警之后,直接打开错误日志,里面的信息:</p>< pre> InnoDB: Database page corruption on disk or a failed InnoDB: file read of page 30506. InnoDB: You may have to recover from a backup. 130509 20:33:48 InnoDB: Page dump in ascii and hex (16384 bytes): ##很多十六进制的代码& hellip;&hellip;& hellip;&hellip; InnoDB: End of page dump 130509 20:37:34 InnoDB: Page checksum 1958578898, prior-to-4.0.14-form checksum 3765017239 InnoDB: stored checksum 3904709694, prior-to-4.0.14-form stored checksum 3765017239 InnoDB: Page lsn 5 614270220, low 4 bytes of lsn at page end 614270220 InnoDB: Page number (if stored to page already) 30506, InnoDB: space id (if created with& gt;= MySQL-4.1.1 and stored already) 19 InnoDB: Page may be an index page where index id is 54 InnoDB: (index& quot;PRIMARY&quot; of table& quot;maitem&quot;.&quot;email_status&quot;) InnoDB: Database page corruption on disk or a failed InnoDB: file read of page 30506. InnoDB: You may have to recover from a backup. InnoDB: It is also possible that your operating InnoDB: system has corrupted its own file cache InnoDB: and rebooting your computer removes the InnoDB: error. InnoDB: If the corrupt page is an index page InnoDB: you can also try to fix the corruption InnoDB: by dumping, dropping, and reimporting InnoDB: the corrupt table. You can use CHECK InnoDB: TABLE to scan your table for corruption. InnoDB: See also http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html InnoDB: about forcing recovery. InnoDB: A new raw disk partition was initialized or InnoDB: innodb_force_recovery is on: we do not allow InnoDB: database modifications by the user. Shut down InnoDB: mysqld and edit my.cnf so that newraw is replaced InnoDB: with raw, and innodb_force_... is removed. 130509 20:39:35 [Warning] Invalid (old?) table or database name '#sql2-19c4-5'</pre>< p>从错误日志里面很清楚的知道哪里出现了问题,该怎么处理。这时候数据库隔几s就重启,所以差不多可以说你是访问不了数据库的。所以马上想到要修复innodb表了。<br /> 以前在Performance的blog上看过类似文章。</p>< p>当时想到的是在修复之前保证数据库正常,不是这么异常的无休止的重启。所以就修改了配置文件的一个参数:<strong>innodb_force_recovery</strong></p>< pre> innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的 innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。< strong>1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。 2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。 3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。 4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。 5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。 6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。</strong></pre>< p>因为错误日志里面提示出现了坏页,导致数据库崩溃,所以这里把innodb_force_recovery 设置为1,忽略检查到的坏页。重启数据库之后,正常了,没有出现上面的错误信息。找到错误信息出现的表:<br /> (index&nbsp;&quot;PRIMARY&quot;&nbsp;of table&nbsp;&quot;maitem&quot;.&quot;email_status&quot;)</p>< p>数据页面的主键索引(clustered key index)被损坏。这种情况和数据的二级索引(secondary indexes)被损坏相比要糟很多,因为后者可以通过使用OPTIMIZE TABLE命令来修复,但这和更难以恢复的表格目录(table dictionary)被破坏的情况来说要好一些。</p>< p><strong>操作步骤:</strong><br /> 因为被破坏的地方只在索引的部分,所以当使用innodb_force_recovery = 1运行InnoDB时,操作如下:</p>< pre> 执行check,repair table 都无效 alter table email_status engine =myisam; #也报错了,因为模式是innodb_force_recovery =<strong>1</strong>。 ERROR 1025 (HY000): Error on rename of '...' to '....' (errno: -1)< /pre>< pre><strong>建立一张表:< /strong>create table email_status_bak #和原表结构一样,只是把INNODB改成了MYISAM。<strong> 把数据导进去< /strong>insert into email_status_bak select * from email_status; 删除掉原表: drop table email_status; 注释掉innodb_force_recovery 之后,重启。 重命名: rename table edm_email_status_bak to email_status; 最后该回存储引擎 alter table edm_email_status engine = innodb</pre>< p><strong>总结:</strong><br /> 这里的一个重要知识点就是 对&nbsp;innodb_force_recovery&nbsp;参数的理解了,要是遇到数据损坏甚至是其他的损坏。可能上面的方法不行了,需要尝试另一个方法:insert into tb select * from ta limit X;甚至是dump出去,再load回来。</p>http://www.downcc.com/tech/4840.htmlSQL Server2013/05/13 11:09:34<p>SQL Server 2000数据库移植到SQL Server 2008R2数据库服务器中碰到的&rdquo;3145错误&rdquo;及解决办法</p>< p>辛苦忙碌了一个星期终于安装配置好了TFS服务器,给每个团队成员分配了账户和邮箱。不过,老机器中的部分数据需要备份到新机器中,其中在移植一个使用DVBBS架设的论坛的时候,出了点问题,记录如下,以备查找,也希望能帮助到其他人。</p>< p>由于论坛已经运行了一段时间,包括公司注册用户、相关讨论共享等重要资料,需要将其移植到新安装TFS服务器的机器上,并对外公开访问权限。旧的机器上安装的是SQL Server 2000,在将论坛数据库备份之后,在SQL Server 2008R2的数据库上还原的过程中,出现了如下的3145错误:</p>< p>备份集中的数据库备份与现有的 'xxx' 数据库不同。</p>< p>一直以为SQL Server数据库是向前后兼容的,怎么可能存在这样的问题呢?不过检查一番之后,确定两台数据库服务器都没有问题,且论坛的备份在原数据库服务器上可以正常还原。没办法,改之,把在SQL Server 2008R2上新建的数据库更改为 SQL Server 2000格式的,再尝试还原,仍然是同样的错误。在网上找了下,说到的办法,尝试了不少,其中有一篇是&ldquo;备份集中的数据库备份与现有的数据库不同 SQL 2005 ERROR:3145 解决办法& rdquo;,提供了如下命令方法:</p>< p>1.新建一个与现有数据库重名的数据库</p>< p>2.在查询窗口运行如下语句:</p>< p>use master< br /> restore database AdventureWorks from disk = 'E:\databasebackup\AdventureWorks.bak'< br /> with replace, MOVE N'AdventureWorks_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.5\MSSQL\Data\AdventureWorks.mdf', MOVE N'AdventureWorks_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.5\MSSQL\Data\AdventureWorks_log.ldf'</p>< p>从语句上来看,和在图形界面的操作是一样的,但是结果却是语句运行成功,图形界面怎么过不去。</p>< p>在其他网页上也看到了类似的方法,也有不少成功解决这个错误的,不过,在SQL Server 2008R2服务器上,还是无法正确备份,也没有找到有其它人在SQL Server 2008R2上,用其它方法解决还原备份的问题。</p>< p><strong>不过,将论坛数据库从旧的SQL Server 2000上分离出来,再附加上SQL Server 2008R2上,成功,数据完整的恢复了!</strong></p>< p>不清楚为什么在SQL Server 2005上可以,在SQL Server 2008R2却不能恢复备份。不过,好在使用分离和附加的方法,成功将论坛迁移。在此记下,做为参考吧。</p>http://www.downcc.com/tech/4839.htmlSQL Server2013/05/13 10:59:17<p><strong>远程连接SQL Server 2008,服务器端和客户端配置</strong></p>< p><strong>关键设置:</strong></p>< p>第一步(SQL2005、SQL2008):</p>< p>开始--&gt;程序--&gt;Microsoft SQL Server 2008(或2005)--&gt;配置工具--&gt;SQL Server 配置管理器--&gt;SQL Server网络配置--&gt;MSSQLSERVER(这个名称以具体实例名为准) 的协议--&gt;TCP/IP--&gt;右键--&gt;启用</p>< p>第二步:</p>< p>SQL2005:</p>< p>开始--&gt;程序--&gt;Microsoft SQL Server 2005--&gt;配置工具--&gt;SQL Server 2005外围应用配置器--&gt;服务和连接的外围应用配置器 --&gt;Database Engine --&gt;远程连接,选择本地连接和远程连接并选上同时使用Tcp/Ip和named pipes.</p>< p>(附:如何配置 SQL Server 2005 以允许远程连接:http://support.microsoft.com/kb/914277/zh-cn&nbsp;)</p>< p>SQL2008:</p>< p>打开SQL Server Management Studio--&gt;在左边[对象资源管理器]中选择第一项(主数据库引擎)--&gt;右键--&gt;方面--&gt;在方面的下拉列表中选择[外围应用配置器]--&gt;将RemoteDacEnable置为True.(<strong>这一步很关键</strong>)</p>< p>Express:</p>< p>如果XP有开防火墙,在例外里面要加入以下两个程序:<br /> C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Binn/sqlservr.exe,<br /> C:/Program Files/Microsoft SQL Server/90/Shared/sqlbrowser.exe</p>< p>第三步:</p>< p>开始--&gt;程序--&gt;Microsoft SQL Server 2008(或2005)--&gt;配置工具--&gt;SQL Server 配置管理器--&gt;SQL Server 服务--&gt;右击SQL Server(MSSQLSERVER) (注:括号内以具体实例名为准)--&gt;重新启动</p>< p>第四步:</p>< p>服务器端开启sa用户。开始 -&gt; 程序 -&gt; Microsoft SQL Server 2008 -&gt; Microsoft SQL Server Management Studio -&gt; 主数据库引擎 -&gt; 安全性 -&gt; 登录名 -&gt; sa,设置密码。</p>< p>第五步:</p>< p>在客户端登陆服务器端数据库。如下图所示:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023476.gif" /></p>< p>第六步:</p>< p>C#工程更改数据库连接字符串。打开C#工程 -&gt; 解决方案资源管理器 -&gt; app.config -&gt; 更改。示例如下:</p>< p><strong>[c-sharp]</strong>&nbsp;</p>< p>connectionString=&quot;data source=服务器IP/实例名;initial catalog=数据库名;User ID=用户名;password=密码&quot;&nbsp;</p>< p>第七步:</p>< p>Good Luck! Enjoy&hellip;&hellip;</p>< p><em><strong>用户在使用SQL Server 2008远程链接时</strong></em>,可能会弹出如下对话框:</p>< p>在链接SQL服务器时发生网络链接错误或特定实例错误。SQL服务器不存在或者链接不成功。请验证用户名是否正确或SQL服务器是否已经配置远程链接功能。(错误发现方:命名管道供应方。错误代号:40---无法和SQL服务器进行链接)</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023287.jpg" /></p>< p><strong>如何处理这一问题?</strong></p>< p>用户如果发现这个错误提醒,需要检查三个方面的配置,并做出相关修改。(以下所标注的配置措施均以SQL 2008服务器为模板)</p>< p>(一)用户需要做的第一件事是检查SQL数据库服务器中是否允许远程链接。在SQL 2008服务器中可以通过打开SQL Server 2008管理项目(SQL Server 2008 Management Studio,)来完成这项检查。其具体操作为:</p>< p>(1)右击SQL Server 2008选项,选择SQL Server 2008 Management Studio:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023818.jpg" /></p>< p>(2)打开&ldquo;服务器属性(Server Properties)&rdquo; (右键连接名称-属性)</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023893.jpg" /></p>< p>选择&ldquo;允许用户对该服务器进行远程链接&rdquo;选项后,检查是否问题已经排除。如果远程链接已经成功,该过程已经完成。若用户发现&ldquo;提醒错误对话框&rdquo;依然弹出,那么还需要做的是:</p>< p>(二)为微软SQL服务器(MSSQLServer)配置相应协议。</p>< p>&nbsp; 此时用户要做的是检查SQL网络链接配置。打开&ldquo;SQL服务器配置管理&rdquo;选项&gt;打开&ldquo;该节点的SQL服务器网络配置选项&rdquo;&gt;选择&ldquo;微软SQL服务器网络协议&rdquo;选项(或用户的SQL服务器中为SQL服务器配置网络协议的选项,不同版本的SQL名称可能不同):</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023499.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023283.jpg" /></p>< p>确定&ldquo;微软SQL服务器网络选项协议&rdquo;中的TCP/IP协议对服务器来说是有效的。再次检查是否已经可以执行远程链接。若&ldquo;错误提醒对话框&rdquo;依然弹出,我们需要进一步检查SQL服务器防火墙选项。</p>< p>(三)检查SQL服务器防火墙设置 (快捷步骤-直接关闭防火墙(不安全))</p>< p>如果在进行完上两步操作后,用户端计算机仍然无法远程链接到SQL服务器,用户需要做的是对SQL服务器防火墙进行重新配置。在进行这一步操作时,首先找到SQL服务器上那个端口支持TCP/IP协议。用户可以在SQL服务器防火墙已经处于运行状态下,点击&ldquo;TCP/IP协议&rdquo;选择&ldquo;属性&rdquo;:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023240.jpg" /></p>< p>&nbsp; 从上图中我们可以看出,这台SQL服务器上支持TCP/IP协议的是1433端口。下一步要做的是在防火墙的配置中允许1433端口支持TCP/IP协议即可。如果服务器上运行的是Windows 7操作系统,其配置步骤为(其他微软操作系统的做法类似),打开&ldquo;控制面板&rdquo;选择&ldquo;Windows防火墙&rdquo;选项:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023195.jpg" /></p>< p>&nbsp; 选择&ldquo;高级设置&rdquo;后,在右边菜单栏中找出&ldquo;具有高级安全选项的Windows防火墙&rdquo;并将其打开。打开后会发现在左边菜单栏中有&ldquo;入站规则(Inboud Rules)&rdquo;选项。将该选项打开,并在右边菜单栏中选择&ldquo;新建规则(New Rule)&rdquo;选项:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023741.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023340.jpg" /></p>< p>打开&ldquo;新建规则&rdquo;选项后,利用&ldquo;新内置绑定规则向导&rdquo;为1433端口配置&ldquo;内部绑定协议&rdquo;配置为适用于TCP/IP协议即可。(前提是,需要完成该步骤以前所述的所有步骤),根据下面的几幅图为1433端口配置适用于1433端口即可:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311023962.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311024295.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311024710.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-5/201351311024814.jpg" /></p>< p>完成上述的三大步骤,并确认每一步都操作正确后,用户的SQL服务器即可支持远程链接,一切万事ok了。</p>< p>(注意:完成第二步骤的时候,必须先重启sql服务才可以)(net stop mssqlserver&nbsp;&nbsp; net start mssqlserver)。</p>http://www.downcc.com/tech/4820.htmlMySQL2013/05/05 12:57:28<p>解决方法一:</p>< p>mysql安装时候的编码,</p>< p>看下my.ini,有无&nbsp;</p>< pre> [mysql] default-character-set=utf8 [client] default-character-set=utf8 [mysqld] default-character-set=utf8</pre>< p>创建表的时候设置:</p>< pre> DROP TABLE IF EXISTS `Company`; CREATE TABLE IF NOT EXISTS `Company` ( `Cname` VARCHAR(<strong>10</strong>) NOT NULL, `Caddr` VARCHAR(<strong>100</strong>), `Ctel` VARCHAR(<strong>16</strong>) )ENGINE=InnoDB DEFAULT CHARSET=UTF8;< /pre>< p>jsp标头:</p>< pre>& lt;%@ page language=&quot;java&quot; import=&quot;java.util.*&quot; pageEncoding=&quot;UTF-<strong>8</strong>&quot;%&gt;</pre>< p>不行的话就尝试:</p>< pre> contentType=&quot;text/html;charset=gb2312&quot;< /pre>< p><strong>解决方法二:&nbsp;</strong><br />< br /> 连接mysql时(无论在从mysql读还是取数据的情况),指定使用的编码方式为utf-8,具体代码如下&nbsp;</p>< pre> //装载mysql-jdbc驱动 Class.forName(&quot;com.mysql.jdbc.Driver&quot;).newInstance(); //连接数据库 Connection sqlCon = DriverManager.getConnection(& quot;jdbc:mysql://localhost:3306/test?user=root&amp;password=1&amp;useUnicode=true&amp;characterEncoding=utf-8&quot; );< /pre>< p><strong>解决方法三:&nbsp;</strong><br />< br /> 如果方法一不行那么在方法一的基础上对读入的字符串进行强制编码方式转换。&nbsp;</p>< pre> String name = request.getParameter(&quot;name&quot;); name= new String(name.getBytes(&quot;ISO-8859-1&quot;),&quot;utf-8&quot;);< /pre>< p>或者:</p>< pre> String name =new String( rst.getString(&quot;name&quot;).getBytes(&quot;ISO-8859-1&quot;),&quot;utf-8&quot;));</pre>< p><strong>解决方法四:&nbsp;</strong></p>< p>这个方法在有些文章里是首推的,我首先也是试了这个方法,但是好像不行。这里还是说一下,不知是不是我操作错误。还是先贴原文吧:&nbsp;<br />< br />& quot;如果数据库中有中文的话而mysql默认的语言不是中文时要在配置文件C:winntmy.ini 中的 [mysqld] 里添加一行:&nbsp;<br />< br /> default-character-set=utf-8&nbsp;<br />< br /> 然后重起mysql&nbsp;<br />< br />< strong>方法五:</strong>在tomca或者web项目下的web.xml里面更改:</p>< pre>& lt;filter&gt;& lt;filter-name&gt;UTFEncoding&lt;/filter-name&gt;& lt;filter-class&gt;com.founder.chenph.Util.EncodingFilter_UTF8& lt;/filter-class&gt;& lt;init-param&gt;& lt;param-name&gt;encoding&lt;/param-name&gt;& lt;param-value&gt;UTF-8&lt;/param-value&gt;& lt;/init-param&gt;& lt;/filter&gt;& lt;filter-mapping&gt;& lt;filter-name&gt;UTFEncoding&lt;/filter-name&gt;& lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;& lt;/filter-mapping&gt;& lt;filter-mapping&gt;& lt;filter-name&gt;UTFEncoding&lt;/filter-name&gt;& lt;url-pattern&gt;*.do&lt;/url-pattern&gt;& lt;/filter-mapping&gt;< /pre>http://www.downcc.com/tech/4815.htmlSQL Server2013/04/30 21:21:18<p><strong>--数据操作</strong><br /> SELECT --从数据库表中检索数据行和列<br /> INSERT --向数据库表添加新数据行<br /> DELETE --从数据库表中删除数据行<br /> UPDATE --更新数据库表中的数据<br /> --数据定义<br /> CREATE TABLE --创建一个数据库表<br /> DROP TABLE --从数据库中删除表<br /> ALTER TABLE --修改数据库表结构<br /> CREATE VIEW --创建一个视图<br /> DROP VIEW --从数据库中删除视图<br /> CREATE INDEX --为数据库表创建一个索引<br /> DROP INDEX --从数据库中删除索引<br /> CREATE PROCEDURE --创建一个存储过程<br /> DROP PROCEDURE --从数据库中删除存储过程<br /> CREATE TRIGGER --创建一个触发器<br /> DROP TRIGGER --从数据库中删除触发器<br /> CREATE SCHEMA --向数据库添加一个新模式<br /> DROP SCHEMA --从数据库中删除一个模式<br /> CREATE DOMAIN --创建一个数据值域<br /> ALTER DOMAIN --改变域定义<br /> DROP DOMAIN --从数据库中删除一个域</p>< p><strong>--数据控制</strong><br /> GRANT --授予用户访问权限<br /> DENY --拒绝用户访问<br /> REVOKE --解除用户访问权限<br /> --事务控制<br /> COMMIT --结束当前事务<br /> ROLLBACK --中止当前事务<br /> SET TRANSACTION --定义当前事务数据访问特征<br />< strong>--程序化SQL</strong><br /> DECLARE --为查询设定游标<br /> EXPLAN --为查询描述数据访问计划<br /> OPEN --检索查询结果打开一个游标<br /> FETCH --检索一行查询结果<br /> CLOSE --关闭游标<br /> PREPARE --为动态执行准备SQL 语句<br /> EXECUTE --动态地执行SQL 语句<br /> DESCRIBE --描述准备好的查询<br /> ---局部变量<br /> declare @id char(10)<br /> --set @id = '10010001'<br /> select @id = '10010001'</p>< p><strong>---全局变量</strong><br /> ---必须以@@开头&nbsp;</p>< pre> --IF ELSE declare @x int @y int @z int select @x =< strong>1</strong> @y =< strong>2</strong> @z=<strong>3</strong> if @x& gt; @y print 'x& gt; y' --打印字符串'x& gt; y' else if @y& gt; @z print 'y& gt; z' else print 'z& gt; y'</pre>< pre> --CASE use pangu update employee set e_wage = case when job_level =& rsquo;<strong>1</strong>&rsquo; then e_wage*<strong>1.08</strong> when job_level =& rsquo;<strong>2</strong>&rsquo; then e_wage*<strong>1.07</strong> when job_level =& rsquo;<strong>3</strong>&rsquo; then e_wage*<strong>1.06</strong> else e_wage*<strong>1.05</strong> end</pre>< pre> --WHILE CONTINUE BREAK declare @x int @y int @c int select @x =< strong>1</strong> @y=<strong>1</strong> while @x& lt;< strong>3</strong> begin print @x --打印变量x 的值 while @y& lt;< strong>3</strong> begin select @c =< strong>100</strong>*@x + @y print @c --打印变量c 的值 select @y = @y +< strong>1</strong> end select @x = @x +< strong>1</strong> select @y =< strong>1</strong> end</pre>< pre> --WAITFOR --例 等待1 小时2 分零3 秒后才执行SELECT 语句 waitfor delay& rsquo;<strong>01</strong>:<strong>02</strong>:<strong>03</strong>&rsquo; select * from employee --例 等到晚上11 点零8 分后才执行SELECT 语句 waitfor time& rsquo;<strong>23</strong>:<strong>08</strong>:<strong>00</strong>&rsquo; select * from employee</pre>< p>***SELECT***</p>< pre> select *(列名) from table_name(表名) where column_name operator value ex:(宿主) select * from stock_information where stockid = str(nid) stockname = 'str_name' stockname like '% find this %' stockname like '[a-zA-Z]%' --------- ([]指定值的范围) stockname like '[^F-M]%' --------- (^排除指定范围) --------- 只能在使用like关键字的where子句中使用通配符) or stockpath = 'stock_path' or stocknumber& lt;< strong>1000</strong> and stockindex =< strong>24</strong> not stock*** = 'man' stocknumber between< strong>20</strong> and< strong>100</strong> stocknumber in(<strong>10</strong>,<strong>20</strong>,<strong>30</strong>) order by stockid desc(asc) --------- 排序,desc-降序,asc-升序 order by< strong>1</strong>,<strong>2</strong> --------- by列号 stockname = (select stockname from stock_information where stockid =< strong>4</strong>)</pre>< p>--------- 子查询<br /> --------- 除非能确保内层select只返回一个行的值,<br /> --------- 否则应在外层where子句中用一个in限定符</p>< pre> select *from table1, table2 where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示 table1.id =* table2.id -------- 右外部连接 select stockname from table1 union [all] ----- union合并查询结果集,all-保留重复行 select stockname from table2</pre>< p>***insert***</p>< pre> insert into table_name (Stock_name,Stock_number) value (&quot;xxx&quot;,&quot;xxxx&quot;) value (select Stockname , Stocknumber from Stock_table2)---value为select语句</pre>< p>***update***</p>< pre> update table_name set Stockname =& quot;xxx&quot; [where Stockid = 3] Stockname = default Stockname = null Stocknumber = Stockname +< strong>4</strong></pre>< p>***delete***</p>< pre> delete fromtable_name where Stockid =< strong>3</strong> truncate table_name ----------- 删除表中所有行,仍保持表的完整性 drop table table_name --------------- 完全删除表</pre>< p>***alter table*** --- 修改数据库表结构</p>< pre> alter table database.owner.table_name add column_name char(<strong>2</strong>) null ..... sp_help table_name ---- 显示表已有特征 create table table_name (name char(<strong>20</strong>), age smallint, lname varchar(<strong>30</strong>)) insert into table_name select ......... ----- 实现删除列的方法(创建新表) alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束</pre>< p><strong>----统计函数----</strong></p>< p>AVG --求平均值<br /> COUNT --统计数目<br /> MAX --求最大值<br /> MIN --求最小值<br /> SUM --求和</p>< pre> --AVG use pangu select avg(e_wage) as dept_avgWage from employee group by dept_id --MAX --求工资最高的员工姓名 use pangu select e_name from employee where e_wage = (select max(e_wage) from employee)</pre>< p><strong>----日期函数----</strong></p>< pre> DAY() --函数返回date_expression_r 中的日期值 MONTH() --函数返回date_expression_r 中的月份值 YEAR() --函数返回date_expression_r 中的年份值 DATEADD( , ,) --函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期 DATEDIFF( , ,) --函数返回两个指定日期在datepart 方面的不同之处 DATENAME( , ) --函数以字符串的形式返回日期的指定部分 DATEPART( , ) --函数以整数值的形式返回日期的指定部分 GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间</pre>< p><strong>----系统函数----</strong></p>< pre> APP_NAME() --函数返回当前执行的应用程序的名称 COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值 COL_LENGTH(&lt;'table_name'&gt;,& lt;'column_name'&gt;) --函数返回表中指定字段的长度值 COL_NAME(, ) --函数返回表中指定字段的名称即列名 DATALENGTH() --函数返回数据表达式的数据的实际长度 DB_ID(['database_name']) --函数返回数据库的编号 DB_NAME(database_id) --函数返回数据库的名称 HOST_ID() --函数返回服务器端计算机的名称 HOST_NAME() --函数返回服务器端计算机的名称 IDENTITY([, seed increment]) [AS column_name]) --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中 ISDATE() --函数判断所给定的表达式是否为合理日期 ISNULL(, ) --函数将表达式中的NULL 值用指定值替换 ISNUMERIC() --函数判断所给定的表达式是否为合理的数值 NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值 NULLIF(, ) --NULLIF 函数在expression_r1 与expression_r2 相等时返回NULL 值若不相等时则返回expression_r1</pre>http://www.downcc.com/tech/4799.htmlOracle2013/04/26 11:40:56<p>当索引的碎片过多时,会影响执行查询的速度,从而影响到我们的工作效率。这时候采取的最有利的措施莫过于重建索引了。本文主要介绍了Oracle数据库中检查索引碎片并重建索引的过程,接下来我们就开始介绍这一过程。<br />< br />< strong>重建索引的步骤如下:<br />< br /> 1. 确认基本信息<br />< /strong><br /> 登入数据库,找到专门存放index 的tablespace,并且这个tablespace下所有index的owner都是tax.将index专门存放在一个独立的tablespace, 与数据表的tablespace分离,是常用的数据库设计方法。<br />< br />< strong>2. 查找哪些index需要重建</strong><br />< br /> 通过anlyze index .... validate structure命令可以分析单个指定的index,并且将单个index 分析的结果存放到 index_stats试图下。一般判断的依据是:<br />< br /> height& gt;4 pct_used& lt; 50% del_lf_rows / lf_rows +0.001& gt; 0.03 g )<br />< br />< strong>3. google上下载了遍历所有index脚本</strong><br />< br /> 发现anlyze index .... validate structure只能填充单个index分析信息,于是google了下,从网上下了个Loop 脚本,遍历索引空间下所有的索引名字,并且可以把所有index的分析信息存放到自己建立的一个用户表中。<br />< br />< strong>4. anlyze index 锁定index</strong><br />< br /> 发现下载的脚本不好用,应为anlyze index在分析索引前要争取独占锁,锁住index,很明显有些index正在被应用系统的使用,所以运行anlyze失败。这里吸取的教训是,尽量晚上做这种事。但是本人比较喜欢准时回家,所以在语句中添加Exception Handler,抛出anlyze index执行失败的那些index 名称,使脚本正常运行完毕。并且根据打印到前台的index name手动执行那些index分析。<br />< br />< strong>5. 总结</strong><br />< br /> 虽然发现522个index中有160个符合上面的判断的依据。但是发现索引都不大,而那些拥有百万leaf的索引又没有符合上面的判断条件,所以结论是无需index rebuild online. 没有啥碎片。<br />< br />< strong>6.什么时候可以rebuild index呢?<br />< /strong><br /> rebuild index online,对那些有大量DML操作的大索引是有益的。可以每个月季度做一次针对较大索引的rebuild。通常哪怕rebuild index online也会造成I/O争用,所以有无online意义不大,可以放到3-5个晚上,分批执行rebuild index,锁定index,不让用户用(没有用户等入的时候),并且加上paralle 8关键字,应为发现数据库服务器有8个cpu processors.<br />< br /> 关于Oracle数据库检查索引碎片和重建索引的知识就介绍到这里,希望能够对您有所帮助。</p>http://www.downcc.com/tech/4767.htmlSQL Server2013/04/10 13:51:37<p>SQL 2008日志文件占了23G硬盘空间,而事务日志已经截断(Truncate),实际日志内容很小,1G都不到,想要释放日志文件霸占的多余空间。</p>< p>但是,无论怎么收缩(Shrink)日志文件,空间就是不能释放,总是出现错误:</p>< pre><strong>Cannot shrink log file 2</strong> (CNBlogsText_log) because of minimum log space required.</pre>< p>之前解决过类似的问题,也写过一篇博客-SQL Server 2008事务日志清理,当时采用的最终解决方法是:</p>< p>将恢复模式由完整(Full)改为简单(Simple)</p>< p><strong>收缩(Shrink)日志文件</strong></p>< p>将恢复模式由简单(Simple)改为完整(Full)</p>< p>一直以为这就是终极方法,但是竟然没能终结这次遇到的问题。</p>< p>经过不懈的努力,终于找到真正的终极方法:</p>< p>1. Detach数据库(<strong>Detach之前一定要屏蔽所有对这个数据库的写入操作</strong>)</p>< p>2. 删除或重命名日志文件</p>< p>3. Attach数据库,这时会提示找不到日志文件</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/2013410135220821.png" /></p>< p>4. 移除(Remove)这个找不到的日志文件,然后点击Ok进行Attach,SQL Server会在数据文件所在的文件夹自动创建一个新的日志文件完成Attach。</p>< p>5. 如果日志文件需要存放在另外的路径,要再通过Detach/Attach进行日志文件的移动操作。</p>< p><strong>Detach数据库</strong></p>< p>将日志文件移动至新的位置</p>< p>Attach数据库,修改日志文件的路径并完成Attach</p>< p>该终极方法的弊端是在操作期间,被操作的数据库不能被正常访问。</p>http://www.downcc.com/tech/4750.htmlSQL Server2013/04/08 16:35:30<p>之前在UAT环境搭建的SQL SERVER 2008 R2数据库一直用得比较正常,但最近发现在Sharepoint中不能进行任何操作了,开始以为是什么配置出了问题(因为一直在研究一些新的应用和集成,需要不断地测试),但后来发现是数据库硬盘没用一点空间了,那么自然是不能存任何数据了,所以最先开始清理一些无用的数据库日志,磁盘空间多了几个G的容量,但是等到第二天情况依然如此,数据库硬盘还是满了,问题依旧存在,后台仔细检查了一下所有数据库的容量(因为最初以为是数据库空间每天增长太快了把硬盘占满了),发现才十几个G的,而硬盘总空间有126G,因此进一步检查了这个磁盘空间,发现才三十多个G,一开始感觉很纳闷,为什么会缺少将近90G呢?后来发现是原来windows账号的关系,之前用的登录账号权限有限,无法获取磁盘的所有空间容量,因此换了管理员的账号登录后,发现原来是SQL SERVER有一个错误日志的容量将近90G,总算找到磁盘满的原因了,下一步就是如何去解决它。</p>< p>一开始听了同事的建议,直接通过文件剪贴的方式把这个SQL SERVER 错误日志文件直接移动到另外一个硬盘上,折腾了好几个小时最终以失败告终,说明错误日志被系统进程占用着,并不能通过这个暴力方式进行,因此走回正轨,通过SQL SERVER维护命令进行操作,最终成功清除了90G的错误日志文件,具体过程如下:</p>< p>由于默认情况下,<strong>SQL Server 保存 7 个 ErrorLog 文件</strong>,名为:</p>< p>ErrorLog</p>< p>ErrorLog.1</p>< p>ErrorLog.2</p>< p>ErrorLog.3</p>< p>ErrorLog.4</p>< p>ErrorLog.5</p>< p>ErrorLog.6</p>< p>--清除 SQL Server 错误日志文件 存档</p>< p><span style="color: #6600cc">EXEC sp_cycle_errorlog<br /> GO</span></p>< p>执行一次EXEC sp_cycle_errorlog就会产生一个新的errorlog,然后把errorlog.6给删掉。就是先进先出(队列类似的情况)这样循环6次就可以把errorlog都刷新一遍。</p>< p>&nbsp;<span style="color: #cc0000">当查询窗口中,出现以下错误信息时:</span></p>< p><span style="color: #cc0000">消息 17049,级别 16,状态 1,过程 sp_cycle_errorlog,第 9 行<br />& nbsp;由于出现操作系统错误 '5(拒绝访问。)',无法将错误日志文件从 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG.5' 循环到 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG.6'。SQL Server 外部的进程可能会阻止 SQL Server 读取这些文件。因此,错误日志条目可能已丢失,并且或许不可能查看某些 SQL Server 错误日志</span>。请确保任何其他进程都未将该文件锁定为只写访问。&quot;<br /> DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。</p>< p>手工删除那个90G的错误日志文件即可。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>< p>通过本次的经历,适当掌握一些SQL SERVER维护命令在实际工作上也非常有必要的,而且相对于ORACEL数据库,SQL SERVER的维护要相对简单一些。</p>http://www.downcc.com/tech/4748.htmlMySQL2013/04/07 11:38:21<p>就像Windows server 2003,2008中一般安装的是Sql Server 数据库,在linux系统中一般安装的是mysql数据库,而且Mysql数据库的第一个版本就是发行在Linux系统上的。<br />< br />< strong>一、mysql简介</strong></p>< p>MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条&ldquo;授权政策&rdquo;),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。</p>< p>在Linux上安装mysql数据库,我们可以去其官网上下载mysql数据库的rpm包,http://dev.mysql.com/downloads/mysql/5.6.html#downloads,大家可以根据自己的操作系统去下载对应的数据库文件,目前最新的版本是5.6.10了。</p>< p>在这里我是通过yum来进行mysql数据库的安装的,通过这种方式进行安装,可以将跟mysql相关的一些服务、jar包都给我们安装好,所以省去了很多不必要的麻烦!!!</p>< p><strong>二、卸载掉原有mysql</strong></p>< p>因为mysql数据库在Linux上实在是太流行了,所以目前下载的主流Linux系统版本基本上都集成了mysql数据库在里面,我们可以通过如下命令来查看我们的操作系统上是否已经安装了mysql数据库</p>< pre> [root@xiaoluo ~]# rpm -qa | grep mysql  // 这个命令就会查看该操作系统上是否已经安装了mysql数据库</pre>< p>有的话,我们就通过 rpm -e 命令 或者 rpm -e --nodeps 命令来卸载掉</p>< pre> [root@xiaoluo ~]# rpm -e mysql  // 普通删除模式 [root@xiaoluo ~]# rpm -e --nodeps mysql  // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除</pre>< p>在删除完以后我们可以通过 rpm -qa | grep mysql 命令来查看mysql是否已经卸载成功!!</p>< p><strong>三、通过yum来进行mysql的安装</strong></p>< p>我是通过yum的方式来进行mysql的数据库安装,首先我们可以输入 yum list | grep mysql 命令来查看yum上提供的mysql数据库可下载的版本:</p>< pre><span style="color: #6600cc">[root@xiaoluo ~]# yum list | grep mysql</span></pre>< p>就可以得到yum服务器上mysql数据库的可下载版本信息:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/201347113922825.jpg" /></p>< p>然后我们可以通过输入&nbsp;yum install -y mysql-server mysql mysql-devel&nbsp;命令将mysql mysql-server mysql-devel都安装好(注意:安装mysql时我们并不是安装了mysql客户端就相当于安装好了mysql数据库了,我们还需要安装mysql-server服务端才行)</p>< pre><span style="color: #cc0000">[root@xiaoluo ~]# yum install -y mysql-server mysql mysql-deve</span></pre>< p>在等待了一番时间后,yum会帮我们选择好安装mysql数据库所需要的软件以及其它附属的一些软件</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/201347113922300.jpg" /></p>< p>我们发现,通过yum方式安装mysql数据库省去了很多没必要的麻烦,当出现下面的结果时,就代表mysql数据库安装成功了</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/201347113923568.jpg" /></p>< p>此时我们可以通过如下命令,查看刚安装好的mysql-server的版本</p>< pre><span style="color: #006600">[root@xiaoluo ~]# rpm -qi mysql-server</span></pre>< p>我们安装的mysql-server并不是最新版本,如果你想尝试最新版本,那就去mysql官网下载rpm包安装就行了,至此我们的mysql数据库已经安装完成了。</p>< p><strong>四、mysql数据库的初始化及相关配置</strong></p>< p>我们在安装完mysql数据库以后,会发现会多出一个mysqld的服务,这个就是咱们的数据库服务,我们通过输入&nbsp;service mysqld start&nbsp;命令就可以启动我们的mysql服务。</p>< p>注意:如果我们是第一次启动mysql服务,mysql服务器首先会进行初始化的配置,如:</p>< p>[root@xiaoluo ~]# service mysqld start<br />& nbsp;</p>< pre> 初始化 MySQL 数据库: WARNING: The host 'xiaoluo' could not be looked up with resolveip. This probably means that your libc libraries are not 100 % compatible with this binary MySQL version. The MySQL daemon, mysqld, should work normally with the exception that host name resolving will not work. This means that you should use IP addresses instead of hostnames when specifying MySQL privileges ! Installing MySQL system tables... OK Filling help tables... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h xiaoluo password 'new-password' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe& amp; You can test the MySQL daemon with mysql-test-run.pl cd /usr/mysql-test ; perl mysql-test-run.pl Please report any problems with the /usr/bin/mysqlbug script! [确定] 正在启动 mysqld: [确定]</pre>< p><br />& nbsp;</p>< p>这时我们会看到第一次启动mysql服务器以后会提示非常多的信息,目的就是对mysql数据库进行初始化操作,当我们再次重新启动mysql服务时,就不会提示这么多信息了,如:</p>< pre><strong>[root@xiaoluo ~]# service mysqld restart</strong> 停止 mysqld: [确定] 正在启动 mysqld: [确定]</pre>< p>我们在使用mysql数据库时,都得首先启动mysqld服务,我们可以 通过&nbsp;&nbsp;chkconfig --list | grep mysqld&nbsp;命令来查看mysql服务是不是开机自动启动,如:</p>< pre> [root@xiaoluo ~]# chkconfig --list | grep mysqld mysqld 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭</pre>< p>我们发现mysqld服务并没有开机自动启动,我们当然可以通过&nbsp;chkconfig mysqld on&nbsp;命令来将其设置成开机启动,这样就不用每次都去手动启动了</p>< pre> [root@xiaoluo ~]# chkconfig mysqld on [root@xiaoluo ~]# chkconfig --list | grep mysql mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭</pre>< p>mysql数据库安装完以后只会有一个root管理员账号,但是此时的root账号还并没有为其设置密码,在第一次启动mysql服务时,会进行数据库的一些初始化工作,在输出的一大串信息中,我们看到有这样一行信息 :</p>< pre> /usr/bin/mysqladmin -u root password 'new-password'  // 为root账号设置密码< /pre>< p>所以我们可以通过 该命令来给我们的root账号设置密码(注意:这个root账号是mysql的root账号,非Linux的root账号)</p>< pre> [root@xiaoluo ~]# mysqladmin -u root password 'root'  // 通过该命令给root账号设置密码为 root</pre>< p>此时我们就可以通过&nbsp;mysql -u root -p&nbsp;命令来登录我们的mysql数据库了</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/201347113923475.jpg" /></p>< p><strong>五、mysql数据库的主要配置文件</strong></p>< p><span style="color: #ff0000">1./etc/my.cnf&nbsp;这是mysql的主配置文件</span></p>< p>我们可以查看一下这个文件的一些信息</p>< p>[root@xiaoluo etc]# ls my.cnf&nbsp;<br />& nbsp;</p>< pre> my.cnf [root@xiaoluo etc]# cat my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid</pre>< p><span style="color: #ff0000">2./ver/lib/mysql&nbsp;&nbsp; mysql数据库的数据库文件存放位置</span><br />& nbsp;</p>< p>我们的mysql数据库的数据库文件通常是存放在了/ver/lib/mysql这个目录下</p>< p>[roohttp://www.downcc.com/tech/4746.htmlSQL Server2013/04/06 12:54:09<p>SQL2005无法启动SQL&nbsp;Server&nbsp;请求失败或服务未及时响应</p>< p>停用&ldquo;VIA协议&rdquo;问题解决。&quot;VIA协议&quot;停用方法:开始-&gt;程序-&gt;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005-&gt;配置工具-&gt;SQL&nbsp;Server&nbsp;Configuration&nbsp;Manager&nbsp;-&gt;打开后找到&quot;SQL&nbsp;Server&nbsp;2005&nbsp;网络配置&quot;-&gt;MSSQLSERVER&nbsp;属性的协议&nbsp;&nbsp;&nbsp;在右边的属性框中把&ldquo;VIA协议&rdquo;禁用即可!</p>< p>为什么启动sql&nbsp;server&nbsp;配置管理器出现请求失败或服务未及时响应</p>< p><img alt="" small="0" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/201346125558900.jpg" /><br />< br /> 解决方案:</p>< p>停用&ldquo;VIA协议&rdquo;问题解决。&quot;VIA协议&quot;停用方法:开始-&gt;程序-&gt;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005-&gt;配置工具-&gt;SQL&nbsp;Server&nbsp;Configuration&nbsp;Manager&nbsp;-&gt;打开后找到&quot;SQL&nbsp;Server&nbsp;2005&nbsp;网络配置&quot;-&gt;MSSQLSERVER&nbsp;属性的协议&nbsp;在右边的属性框中把&ldquo;VIA协议&rdquo;禁用即可!</p>< p>你查看它的日志,看看是否中间存在这样的一句类似的话,</p>< p>文件&nbsp;&quot;C:\Program&nbsp;Files\Microsoft&nbsp;SQL&nbsp;Server\MSSQL.1\MSSQL\DATA\mastlog.ldf&quot;&nbsp;已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。</p>< p>如果是的话,你将sql的文件夹右键属性,选择高级,在出现的界面里&ldquo;压缩内容以便节省磁盘空间&rdquo;的选项,确定就行了</p>< p><img alt="" small="0" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/201346125559444.jpg" /><img alt="" small="0" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/201346125559753.jpg" /><br /> 解决SQL&nbsp;Server不允许进行远程连接问题</p>< p> 刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:&quot;在连接到&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;时,在默认的设置下&nbsp;SQL&nbsp;Server&nbsp;不允许进行远程连接可能会导致此失败。&nbsp;(provider:&nbsp;命名管道提供程序,&nbsp;error:&nbsp;40&nbsp;-&nbsp;无法打开到&nbsp;SQL&nbsp;Server的连接)&nbsp;&quot;,现在针对此问题总结如下:</p>< p>  明白了SQL&nbsp;Server是个网络数据库就可迎刃而解了,简单的分为下面的几种情况。</p>< p>  ◆1.数据库引擎没有启动。有两种启动方式:</p>< p>  (1)开始-&gt;程序-&gt;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005-&gt;SQL&nbsp;Server&nbsp;2005外围应用配置器,在打开的界面单击&quot;服务的连接的外围应用配置器&quot;,在打开的界面中找到Database&nbsp;Engine,单击&quot;服务&quot;,在右侧查看是否已启动,如果没有启动可单击&quot;启动&quot;,并确保&quot;启动类型&quot;为自动,不要为手动,否则下次开机时又要手动启动;</p>< p>  (2)可打开:开始-&gt;程序-&gt;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005-&gt;配置工具-&gt;SQL&nbsp;Server&nbsp;Configuration&nbsp;Manager,选中SQL&nbsp;Server&nbsp;2005服务中SQL&nbsp;Server(MSSQLSERVER)&nbsp;,并单击工具栏中的&quot;启动服务&quot;按钮把服务状态改为启动;</p>< p>  使用上面两种方式时,有时候在启动的时候可能会出现错误,不能启动,这时就要查看&quot;SQL&nbsp;Server&nbsp;2005配置管理器&quot;中的SQL&nbsp;Server&nbsp;2005网络配置-&gt;MSSQLSERVER协议中的VIA是否已启用,如果已启用,则把它禁止.然后再执行上述一种方式操作就可以了.</p>< p>  ◆2.是否已经允许远程连接。这个部分可以简单的分为4个方面,分别是在&nbsp;SQL&nbsp;Server上启用远程连接、启用SQL&nbsp;Server&nbsp;浏览服务、在Windows&nbsp;防火墙中为SQL&nbsp;Server&nbsp;2005&nbsp;创建例外和在Windows&nbsp;防火墙中为&ldquo;SQLBrowser&rdquo;创建例外。下面是几个具体的操作方式:</p>< p>  在SQLServer&nbsp;实例上启用远程连接</p>< p>  ◆1.指向&ldquo;开始-&gt;程序-&gt;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005-&gt;配置工具-&gt;SQL&nbsp;Server&nbsp;外围应用配置器&rdquo;</p>< p>  ◆2.在&ldquo;SQL&nbsp;Server&nbsp;2005&nbsp;外围应用配置器&rdquo;页,&nbsp;单击&ldquo;服务和连接的外围应用配置器&rdquo;</p>< p>  ◆3.然后单击展开&ldquo;数据库引擎&rdquo;,&nbsp;选中&ldquo;远程连接&rdquo;,在右边选中&ldquo;本地连接和远程连接&rdquo;,</p>< p>  再选择要使用的协议,(&nbsp;这个地方应当启用TCP/IP&nbsp;和命名管道服务!)单击&ldquo;应用&rdquo;,您会看到下消息:</p>< p>  &ldquo;直到重新启动数据库引擎服务后,对连接设置所做的更改才会生效。&rdquo;,单击&ldquo;确定&rdquo;按钮返回</p>< p>  ◆4.展开&ldquo;数据库引擎&rdquo;,&nbsp;选中&ldquo;服务&rdquo;,在右边单击&ldquo;停止&rdquo;,等到&nbsp;MSSQLSERVER&nbsp;服务停止,</p>< p>  然后单击&ldquo;启动&rdquo;,重新启动MSSQLSERVER&nbsp;服务。</p>< p>  启用SQLServer&nbsp;浏览器服务</p>< p>  ◆1.指向&ldquo;开始-&gt;程序-&gt;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005-&gt;配置工具-&gt;SQL&nbsp;Server&nbsp;外围应用配置器&rdquo;</p>< p>  ◆2.在&ldquo;SQL&nbsp;Server&nbsp;2005&nbsp;外围应用配置器&rdquo;页,&nbsp;单击&ldquo;服务和连接的外围应用配置器&rdquo;</p>< p>  ◆3.然后单击展开&ldquo;SQL&nbsp;Server&nbsp;Browser&rdquo;,&nbsp;选中&ldquo;服务&rdquo;,在右边&ldquo;启动类型&rdquo;选择&ldquo;自动&rdquo;,</p>< p>  再单击&ldquo;启动&rdquo;,单击&ldquo;确定&rdquo;按钮返回</p>< p>  在Windows&nbsp;防火墙中为&ldquo;SQL&nbsp;Server&nbsp;2005&rdquo;创建例外</p>< p>  ◆1.在&nbsp;Windows&nbsp;防火墙设置界面中,选择&ldquo;&nbsp;例外&rdquo;&nbsp;选项卡,然后单击&ldquo;添加程序&rdquo;</p>< p>  ◆2.在&ldquo;添加程序窗口&rdquo;中单击&ldquo;浏览&rdquo;</p>< p>  ◆3.然后找到&ldquo;C:\ProgramFiles\Microsoft&nbsp;Files\Microsoft&nbsp;SQL&nbsp;Server\&nbsp;MSSQL.1&nbsp;\MSSQL\Binn\sqlservr.exe&rdquo;,</p>< p>  单击&ldquo;确定&rdquo;返回</p>< p>  注意&nbsp;:&nbsp;路径可能会根据&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;安装不同而不同。&nbsp;MSSQL.1&nbsp;是占位符,对应数据库实例ID。</p>< p>  ◆4.对每个需要打开远程访问的SQL&nbsp;Server&nbsp;2005&nbsp;实例,重复步骤&nbsp;1&nbsp;至&nbsp;3。</p>< p>  在Windows&nbsp;防火墙中为&ldquo;SQLBrowser&rdquo;创建例外</p>< p>  ◆1.在&nbsp;Windows&nbsp;防火墙设置界面中,选择&ldquo;&nbsp;例外&rdquo;&nbsp;选项卡,然后单击&ldquo;添加程序&rdquo;</p>< p>  ◆2.在&ldquo;添加程序窗口&rdquo;中单击&ldquo;浏览&rdquo;</p>< p>  ◆3.然后找到&ldquo;C:\ProgramFiles\Microsoft&nbsp;Files\Microsoft&nbsp;SQL&nbsp;Server\90\Shared\sqlbrowser.exe&rdquo;,</p>< p>  单击&ldquo;确定&rdquo;返回</p>< p>  注意&nbsp;:路径可能会根据&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;安装不同而不同。在使用.NET开发进行时,会遇到使用连接字符串连接SQL&nbsp;Server&nbsp;2005数据库使用机器名称和localhost都能连接,但是使用IP地址却不能连接的问题,解决的办法是在SQL&nbsp;Server实例上启用本地和远程连接,并且在选择协议的时候使用TCP/IP和命名管道服务即可解决。</p>< p>在尝试从远程计算机连接到&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;实例时,可能会接收到错误消息。在使用任何程序连接到&nbsp;SQL&nbsp;Server&nbsp;时都可能会发生此问题。例如,在使用&nbsp;SQLCMD&nbsp;实用工具连接到&nbsp;SQL&nbsp;Server&nbsp;时收到以下错误消息:&nbsp;</p>< p>Sqlcmd:错误:Microsoft&nbsp;SQL&nbsp;Native&nbsp;Client:建立到服务器的连接时发生错误。连接到&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;时,默认设置&nbsp;SQL&nbsp;Server&nbsp;不允许远程连接这个事实可能会导致失败。</p>< p>如果没有将&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;配置为接受远程连接,则可能会发生此问题。默认情况下,SQL&nbsp;Server&nbsp;2005&nbsp;Express&nbsp;Edition&nbsp;和&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;Developer&nbsp;Edition&nbsp;不允许远程连接。若要配置&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;以允许远程连接,请完成以下所有步骤:&nbsp;</p>< p>&middot;&nbsp;在您要从远程计算机连接到的&nbsp;SQL&nbsp;Server&nbsp;实例上启用远程连接。&nbsp;</p>< p>&middot;&nbsp;打开&nbsp;SQL&nbsp;Server&nbsp;Browser&nbsp;服务。&nbsp;</p>< p>&middot;&nbsp;配置防火墙以允许与&nbsp;SQL&nbsp;Server&nbsp;和&nbsp;SQL&nbsp;Server&nbsp;Browser&nbsp;服务相关的网络通讯。</p>< p>本文介绍如何完成这些步骤中的每一步。&nbsp;</p>< p>若要在&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;实例上启用远程连接并打开&nbsp;SQL&nbsp;Server&nbsp;Browser&nbsp;服务,请使用&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;外围应用配置器工具。在安装&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;时会安装外围应用配置器工具。&nbsp;为&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;Express&nbsp;Edition&nbsp;或&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;Developer&nbsp;Edition&nbsp;启用远程连接</p>< p>必须为要从远程计算机连接到的每个&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;实例启用远程连接。为此,请按照下列步骤操作:&nbshttp://www.downcc.com/tech/4743.htmlSQL Server2013/04/04 23:02:08<p>在连接SQL Server 2000数据库的时候,出现以下错误:</p><p>在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)&nbsp;</p><p>在连接SQL Server 2005数据库的时候,提示一个错误!错误信息如下!<br/><span style="font-family:Courier New">在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error:</span><span style="font-family:Courier New">40 - 无法打开到 SQL Server 的连接)<br/>我是先装了SQL Server2000 后 在装SQL Server2005的,网上有很多解决方法!<br/>下面一一列举下:<br/>1,在开始菜单,程序里面的 SQL Server2005下有个SQL Server2005外围程序配置器 选择服务和连接的外围配置器,在database engine里选择远程控制,把本地连接和远程连接改成同时使用TCP/IP和named pipes!保存.关闭数据库服务器链接,重新链接!</span><span style="font-family:Courier New"><br/><img border="0" alt="" width="670" height="514" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/20134423455617.jpg"/><br/><br/>2,配置文件web.config里面的数据库连接字符串里面的Data Source用本地服务器名字,不要用Ip或者loacl或者.<br/>例:&lt;add key=&quot;Statdb.Connectstring&quot; value =&quot;Data Source=<span style="font-family:Courier New;color: red">MICROSOF-9D13DF</span>;Initial Catalog=Users;User ID=sa;Password=SA&quot;/&gt;< br/><br/>3,IIS配置里面删除默认的数据库链接字符串,因为装了SQL Server2005后,默认连接是2005<br/>我的电脑,管理,iis配置里面的默认网站,右键查看属性,asp.net版本选择你使用的版本,然后把编辑配置和编辑全局配置里面的默认的字符串链接删除!<br/><img border="0" alt="" width="472" height="441" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/20134423455515.jpg"/><br/>修改编辑全局配置和编辑配置<br/><img border="0" alt="" width="795" height="622" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/20134423455485.jpg"/><br/>红圈部分原来有默认的数据库连接字符串的,把它移除!</span></p><p><span style="font-family:Courier New">4,打SQL Server补丁<br/>在查看数据库日志的时候,发现了这样的提示!<br/><span style="color: red">您运行的 Microsoft SQL Server 2000 版本或 Microsoft SQL Server 2000 Desktop Engine (也称为 MSDE) 和 Microsoft Windows Server 2003 家族使用时存在已知的 安全弱点。为了减少计算机被某些病毒的攻击,Microsoft SQL Server 2000,MSDE 或 两者的 TCP/IP 和 UDP 网络端口被禁用。要启用这些端口,您必须从安装一个修补程序, 或 Microsoft SQL Server 2000 或 MSDE 的最新服务包。< br/></span><span style="color: #000000"><strong>SQL Server 2000 要打SP4的补丁</strong></span></span></p><p><span style="font-family:Courier New">下载补丁,打上!<br/><br/>5,修改SQL Server2000的远程连接端口<br/>在现装了SQL Server2000后装SQL Server2005的时候,后者会把前者的远程连接端口修改了,原先的端口为1433。在我查看的时候果然被改成1058端口了<br/>把它改过来,改成1433即可!<br/>开始菜单,程序里面的SQL Server2000下有个服务器网络使用工具。选择TCP/IP然后点击属性编辑它的端口<br/><img border="0" alt="" width="554" height="367" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/20134423455107.jpg"/><br/>选择TCP/IP修改其属性<br/><img border="0" alt="" width="441" height="200" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-4/20134423455418.jpg"/><br/>把默认端口设置为1433</span></p>http://www.downcc.com/tech/4735.htmlSQL Server2013/04/01 18:40:36<p>SQL Server 2012已经发布一段时间了,最近在新的机器上安装了最新的SQL Server 2012 SP1,体检下感觉良好。官方给出了一大堆SQL2012相对于SQL2008R2的新特性,但是大多数对于普通开发人员来说都是浮云,根本用不到,下面就说说一些对于开发人员来说比较有用的新特性。</p>< p><strong>一、增加了Sequence对象:</strong></p>< p>这个对于Oracle用户来说是最熟悉不过的数据库对象了,现在在SQL Server中终于也看到了类似的对象,只是在使用的语法上有一点点不一样。创建语法也是CREATE SEQUENCE,使用的时候需要使用NEXT VALUE FOR来取下一个值:</p>< pre> CREATE SEQUENCE [dbo].[SQ_1] AS [bigint] START WITH 1 INCREMENT BY 1; SELECT NEXT VALUE FOR [SQ_1] AS FirstUse;</pre>< p>如果要插入一个值,那么就是:</p>< pre> INSERT INTO t1(c1,c2) VALUES (NEXT VALUE FOR SQ_1, 'Test') ;</pre>< p>但是好像没有提供获得当前值的语法,难道必须取下一个值?</p>< p><strong>二、新的分页查询语法:</strong></p>< p>以前在SQL Server中分页,最早是用top或者临时表,后来出现了ROW_NUMBER函数实现分页,现在最新的SQL2012可以在order by子句后跟offset和fetch来分页,感觉有点像是LINQ的语法。比如查询1W行之后的20条有效项目信息,那么ROW_NUMBER分页查询的SQL是:</p>< pre> select * from ( select *,ROW_NUMBER() over(order by p.PROJECT_ID) R from PROJECT p where p.IS_DELETED=0 ) x where x.R between 10001 and 10020</pre>< p>而是有了新的语法,那么查询语句就是:</p>< pre> SELECT * FROM PROJECT p where p.IS_DELETED=0 ORDER BY p.PROJECT_ID OFFSET 10001 ROWS FETCH NEXT 20 ROWS ONLY;</pre>< p>显然使用了新的语法后代码看起来更简洁,意思表达也更明确。从执行效率上来讲,试了一下,是一样的。</p>< p><strong>三、一些新的系统函数:</strong></p>< p>3.1相当于C#中三目运算符的IIF函数</p>< p>这个函数和VBA中的IIF函数相同,判断第一个参数的表达式是否为真,真则返回第二个参数,假则返回第三个参数。</p>< p>有了这个函数很多时候我们可以不用再使用复杂的case when语法了。比如我们判断项目的大小以显示对应的字符串,那么老的写法是:</p>< pre> select p.CODE,case when p.SIZE&gt;100 then 'Big' else 'Small' end as SIZE_STRING from PROJECT p where SIZE is not null</pre>< p>现在,我们可以简单的写成:</p>< pre> select p.CODE,IIF(p.SIZE&gt;100,'Big','Small') as SIZE_STRING from PROJECT p where SIZE is not null</pre>< p>3.2不用判断类型和NULL的字符串连接CONCAT函数</p>< p>SQL Server本来对字符串的连接很简单,直接使用&ldquo;+&rdquo;号,但是需要注意两个问题,一是必须类型都是字符串类型,如果是数字类型那么会报语法错误,所以必须把数字类型转换为字符串。二是如果其中的某个值为null,那么整个连接的结果就是一个null字符串,所以还需要判断null,所以本来只是一个连接字符串的查询就会写的很复杂:</p>< pre> select p.PROJECT_ID, p.CODE+','+p.NAME+','+ISNULL(p.NICK_NAME,'')+','+ISNULL(CONVERT(varchar(50),p.SIZE),'') from PROJECT p</pre>< p>现在使用CONCAT函数,直接忽略其中的类型,忽略对NULL的检查,直接连接成一个非空的字符串:</p>< pre> select p.PROJECT_ID,CONCAT( p.CODE,',',p.NAME,',',p.NICK_NAME,',',p.SIZE) from PROJECT p</pre>< p>可以明显感觉到简洁了很多。</p>< p>3.3转换成字符串时设置格式的FORMAT函数。</p>< p>以前要把数字或者日期转换成字符串,可以使用CONVERT函数并带人第三个整数类型的参数指定转换的格式,不过这种方法太麻烦,整数参数不容易理解和记忆,而且也不灵活。现在的FORMAT函数相当于C#中的String.Format函数,在第二个参数中可以想要输出的格式。</p>< pre> select p.PROJECT_ID,FORMAT(p.CREATED_TIME,'yyyy-MM-dd'),CONVERT(varchar(50),p.CREATED_TIME,112) from PROJECT p</pre>< p>3.4让枚举显示更方便的CHOOSE函数。</p>< p>在程序中经常使用枚举值,在数据库中使用tinyint来保存枚举值,但是在查看时却不是很容易理解枚举值的含义,必须查看代码看1对应什么,2对应什么才知道。在显示的时候如果要显示成字符串,那么就需要使用case when进行判断。现在可以使用CHOOSE函数,让枚举转换成字符串变得很简单。比如要显示项目的状态,那么我们的查询就是:</p>< pre> select p.CODE,CHOOSE( p.STATUS,'Plan','Exec','Complete','Abort','Fail') from PROJECT p</pre>< p>CHOSSE函数比case when有几个缺点,1是不支持0和负数,所以如果枚举的值是0那么就没办法显示,2是枚举值必须连续而且比较小,不能使用100、200等值,那要是用CHOOSE那得写死人了。没有default值,使用case when的时候,如果不匹配还有个else值可以显示,而使用CHOOSE后如果没有匹配的,那么就是NULL值。所以个人觉得这个函数的使用面非常</p>< p>3.5各种日期时间函数。</p>< p>除了一个EOMONTH函数是返回给定日期的最后一天外,其他的新函数,都是把年月日作为参数传进去,返回指定数据类型的对象,相当于就是CONVERT函数的变形。总体使用不多,在此不多介绍。</p>< p><strong>四、OVER子句的增强和新增一些分析函数:</strong></p>< p>之前OVER子句是用于RANK,ROW_NUMBER等排名函数,现在OVER子句得到了大大的增强, 可以将OVER子句应用到聚合函数中,也增加了一些分析函数。</p>< p>比如我有一个项目和客户表,一个客户对于多个项目,现在需要知道客户的信息和每个客户的最新项目Code,这个要是以前还不好实现,现在我们有了分析函数,可以使用FIRST_VALUE或者LAST_VALUE再配合OVER子句,得到我们想要的结果:</p>< pre> select distinct c.*,FIRST_VALUE(p.CODE) over(PARTITION BY c.CLIENT_ID order by p.[CREATED_TIME] desc) as LAST_PROJECT_CODE from PROJECT p inner join CLIENT c on p.CLIENT_ID=c.CLIENT_ID</pre>http://www.downcc.com/tech/4708.htmlSQL Server2013/03/26 14:44:20<p><span style="font-family: 宋体">一台服务器重装系统后,用附加表再配置同步复制的时候出错:</span></p>< p><span style="font-family: 宋体; color: #ff0000; font-size: 16px">sql server 无法创建发布 找不到存储过程 错误 2812</span></p>< p>在SQL SERVER 2005中,有数据库DB1,在A服务器上。由于要更换服务器,要把数据库DB1迁移到B服务器上。而DB1是用于同步复制的。粗心的你没有把同步复制(发布和订阅)删掉,就直接把DB1.mdf和DB1_log.ldf两个文件到B服务器上附加。附加成功了,原来的程序都能连接上,你以为大功告成。但是,几天过后,当你想把服务器重新同步复制,以作实时备份时,你发现自己的倒霉时刻到了。SQL SERVER 2005 像病了一样,只提示:&ldquo;找不到存储过程&rsquo;&rsquo;&hellip;错误:2812&rdquo;。</p>< p>如果你的经历与以下的不完全一致,那么这篇文章可能也值得你参考。</p>< p>但如果你的经历恰好一样,而且你在Google或Baidu上苦寻答案而不觅,那么,这篇文章或者能帮你一把。</p>< p>如果数据库迁移后,数据并没有更新过。那么你的想法是把这个该死的数据库分离,然后再重新把去掉同步复制的干净的数据库迁移过来。但是,如果你的新数据库已经投入生产,那么,请参考我的方法:</p>< p>打开B服务器上的DB1数据库的系统表,你会发现有12个表在里面。这12个表就是因同步复制而产生的,包括:&nbsp;<span style="color: #000000; font-size: 16px">&nbsp;&nbsp;</span></p>< table border="1" cellspacing="0" cellpadding="0">< tbody>< tr>< td style="width: 180pt">< p>表/视图</p>< /td>< td>< p>有记录</p>< /td>< td>< p>复制必需</p>< /td>< /tr>< tr>< td>< p>Mspeer_lsns</p>< /td>< td>< /td>< td>< /td>< /tr>< tr>< td>< p>Mspeer_request</p>< /td>< td>< /td>< td>< /td>< /tr>< tr>< td>< p>Mspeer_response</p>< /td>< td>< /td>< td>< /td>< /tr>< tr>< td>< p>Mspub_identity_range</p>< /td>< td>< /td>< td>< /td>< /tr>< tr>< td>< p>Sysarticlecolumns</p>< /td>< td>< p>有</p>< /td>< td>< p>是</p>< /td>< /tr>< tr>< td>< p>Sysarticles</p>< /td>< td>< p>有</p>< /td>< td>< p>是</p>< /td>< /tr>< tr>< td>< p>Sysarticlesupdates</p>< /td>< td>< /td>< td>< p>是</p>< /td>< /tr>< tr>< td>< p>syspublications</p>< /td>< td>< p>有</p>< /td>< td>< p>是</p>< /td>< /tr>< tr>< td>< p>Sysreplservers</p>< /td>< td>< p>有</p>< /td>< td>< /td>< /tr>< tr>< td>< p>Sysschemaarticles</p>< /td>< td>< /td>< td>< p>是</p>< /td>< /tr>< tr>< td>< p>Syssubscriptions</p>< /td>< td>< p>有</p>< /td>< td>< p>是</p>< /td>< /tr>< tr>< td>< p>systranschemas</p>< /td>< td>< /td>< td>< /td>< /tr>< tr>< td>< p>sysextendedarticlesview</p>< /td>< td>< /td>< td>< p>是</p>< /td>< /tr>< /tbody>< /table>< p>问题就出现在这里了。这12 个系统表和1个视图是因同步复制而生的,如果没有发生同步复制,他们是不会出现的。我们把mdf和ldf文件直接迁移过来,数据库里面的这些系统表和视图也随之而来了。</p>< p>不能简单的把这12个系统表和1个视图删掉,这样同样不行。在经过了长时间的摸索后,我发现了问题的真正所在。</p>< p>我们看一下系统表 sysreplservers的内容,有两列:</p>< table border="1" cellspacing="0" cellpadding="0">< tbody>< tr>< td>< p>Srvname</p>< /td>< td>< p>Srvid</p>< /td>< /tr>< tr>< td>< p>旧服务器名称</p>< /td>< td>< p>0</p>< /td>< /tr>< /tbody>< /table>< p>终于找到了问题所在了。我们把该表的记录删除。</p>< p>然后随便发布一次。</p>< p>再把该发布删除。</p>< p>至此,该数据库中的陈旧同步复制信息已经去除,数据库重新变得洁净可爱。</p>http://www.downcc.com/tech/4688.htmlMySQL2013/03/09 15:29:54<p>环境:CentOS 6.3 最小化缺省安装,配置好网卡。</p>< p><strong>安装MySQL前,确认Internet连接正常,以便下载安装文件</strong>。</p>< p>先使用 yum -y update 指令升级系统到最新版本。</p>< p>本安装将MySQL的数据文件与执行文件分离,如果你打算设置到不同的路径,注意修改对应的执行命令和数据库初始化脚本。</p>< p><strong># 修改防火墙设置,打开3306端口</strong><br /> vi /etc/sysconfig/iptables<br /> -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT</p>< p># 重启防火墙使新设置生效<br /> service iptables restart</p>< p># 新增用户组<br /> groupadd&nbsp;mysql</p>< p># 新增用户<br /> useradd mysql&nbsp;-g&nbsp;mysql</p>< p># 新建数据库执行文件目录<br /> mkdir -p /usr/local/mysql</p>< p># 新建数据库数据文件目录<br /> mkdir -p /db/mysql/data</p>< p><strong># 修改目录拥有者</strong></p>< p>chown -R mysql:mysql /usr/local/mysql<br /> chown -R mysql:mysql /db/mysql/data<br /> chown -R mysql:mysql /usr/local/mysql/.<br /> chown -R mysql:mysql /db/mysql/data/.</p>< p><strong># 编辑PATH搜索路径</strong><br /> vi /etc/profile<br /> Append these 2 lines to the end of the file:<br /> PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH<br /> export PATH</p>< p><strong># 生效PATH搜索路径</strong><br /> source /etc/profile</p>< p># 编辑hosts文件,加入本机IP和主机名<br /> 192.168.211.100& nbsp;& nbsp;& nbsp;centhost.centdomain</p>< p># 安装编译源码所需的工具和库<br /> yum -y install wget gcc-c++ ncurses-devel cmake make perl</p>< p># 进入源码压缩包下载目录<br /> cd /usr/src</p>< p># 下载源码压缩包<br /> wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.10.tar.gz/from/http://cdn.mysql.com/</p>< p><strong># 解压缩源码包</strong><br /> tar -zxv -f mysql-5.6.10.tar.gz</p>< p># 进入解压缩源码目录<br /> cd mysql-5.6.10</p>< p>#&nbsp;从mysql5.5起,<strong>mysql源码安装开始使用cmake了,执行源码编译配置脚本</strong>。</p>< p>cmake \<br /> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \<br /> -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \<br /> -DDEFAULT_CHARSET=utf8 \<br /> -DDEFAULT_COLLATION=utf8_general_ci \<br /> -DWITH_MYISAM_STORAGE_ENGINE=1 \<br /> -DWITH_INNOBASE_STORAGE_ENGINE=1 \<br /> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \<br /> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \<br /> -DWITH_MEMORY_STORAGE_ENGINE=1 \<br /> -DWITH_READLINE=1 \<br /> -DENABLED_LOCAL_INFILE=1 \<br /> -DMYSQL_DATADIR=/db/mysql/data \<br /> -DMYSQL_USER=mysql \<br /> -DMYSQL_TCP_PORT=3306</p>< p># 编译源码,这一步时间会较长,耐心等待。<br /> make</p>< p># 安装<br /> make install</p>< p># 复制配置文件<br /> cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf</p>< p># 进入安装路径<br /> cd /usr/local/mysql</p>< p># 执行配置脚本<br /> scripts/mysql_install_db --user=mysql --datadir=/db/mysql/data</p>< p># 复制服务启动脚本<br /> cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql</p>< p># 启动MySQL服务<br /> service mysql start</p>< p># 设置开机自动启动服务<br /> chkconfig mysql on</p>< p>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;完成</p>< p><strong>修改MySQL的root用户的密码以及打开远程连接</strong><br />& nbsp;</p>< p>mysql&gt; use mysql;<br />& nbsp;</p>< pre> mysql&gt; desc user; mysql&gt; GRANT ALL PRIVILEGES ON *.* TO root@&quot;%&quot; IDENTIFIED BY& quot;root&quot;; //为root添加远程连接的能力 mysql&gt; update user set Password = password('123456') where User='root'; //设置root用户密码 mysql&gt; select Host,User,Password from user where User='root'; mysql&gt; flush privileges; mysql&gt; exit</pre>http://www.downcc.com/tech/4685.htmlOracle2013/03/09 11:47:29<p><strong>一、硬件要求</strong></p>< p>1、内存& amp; swap</p>< p>Minimum: 1 GB of RAM<br /> Recommended: 2 GB of RAM or more</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115014531.jpg" /></p>< p>检查内存情况</p>< p># grep MemTotal /proc/meminfo</p>< p># grep SwapTotal /proc/meminfo</p>< p>2、硬盘</p>< p>由于CentOS安装后差不多有4~5G,再加上Oracle等等的安装,所以请准备至少10G的硬盘空间。</p>< p>检查磁盘情况</p>< p># df -h</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115014176.jpg" /></p>< p><strong>二、软件</strong></p>< p>系统平台:CentOS 6.3(x86_64)</p>< p>CentOS-6.3-x86_64-bin-DVD1.iso</p>< p>Oracle版本:Oracle 10g R2</p>< p>10201_database_linux_x86_64.cpio</p>< p>补丁:p6810189_10204</p>< p>p6810189_10204_Linux-x86-64.zip</p>< p><strong>三、系统安装注意</strong></p>< p>系统安装时一定要安装桌面模式,否则无法安装oracle,另外请勿开启SELinux,oracle官方不建议使用SELinux,CentOS的防火墙也请暂时关闭,减少安装时的困扰。为防止Oracle安装过程中出现乱码,建议使用英文作为系统语言,进行Oracle的安装工作。</p>< p>本文中所描述的系统命令,未经特殊标示,均为&ldquo;#&rdquo;代表root权限,&ldquo;$&rdquo;代表oracle权限。</p>< p><strong>四、安装Oracle前的系统准备工作</strong></p>< p>首先,请先以root账号登入作一些前置设定作业。</p>< p><span style="color: #6600cc">1、关闭防火墙、禁用SELinux</span><br />& nbsp;</p>< p># setup</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115014255.jpg" /></p>< p>#&nbsp;vi /etc/selinux/config<br />& nbsp;</p>< p>修改SELINUX=disabled,然后重启。<br /> 如果不想重启系统,使用命令setenforce 0<br />& nbsp;</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115014162.jpg" /></p>< p><span style="color: #6600cc">2、安装依赖包</span></p>< p>Oracle官方文档要求的安装包:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115015631.jpg" /></p>< p>查看Oracle相关包是否已经安装:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115015466.jpg" /></p>< p>用yum方式安装所需的包:</p>< p># yum -y install binutils compat-libstdc++-33 compat-libstdc++-33.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make sysstat</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115015816.jpg" /></p>< p>最后还需要安装libXp这个Library,这个一定要安装,否则安装Oracle时会出现java Exception。</p>< p># yum install libXp</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115016564.jpg" /></p>< p><strong>3、创建Oracle用户与组</strong></p>< p>在这里只讨论单主机环境,不考虑RAC环境的配置。</p>< p>执行以下指令以新增oracle安装时所需要的使用者与群组。</p>< p>(1) 建立群组oinstall&nbsp;<br /> # groupadd oinstall</p>< p>(2) 建立群组dba<br /> # groupadd dba</p>< p>(3) 新增使用者oracle并将其加入oinstall和dba群组<br /> # useradd -m -g oinstall -G dba oracle</p>< p>(4) 测试oracle账号是否建立完成<br /> # id oracle</p>< p>(5) 建立oracle的新密码<br /> # passwd oracle</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115016998.jpg" /></p>< p><strong>4、将oracle使用者加入到sudo群组中</strong></p>< p># vi /etc/sudoers</p>< p>找到<br /> root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALL=(ALL)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALL&nbsp;<br /> 这行,并且在底下再加入<br /> oracle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALL=(ALL)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALL<br /> 输入wq!(由于这是一份只读文档所以需要再加上!)并且按下Enter</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115016538.jpg" /></p>< p><strong>5、配置系统内核参数</strong></p>< p># vi /etc/sysctl.conf</p>< p>修改和添加以下内容:</p>< p>kernel.shmall = 4294967296&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;//表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改<br /> kernel.shmmax = 68719476736&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; //定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G<br /> kernel.shmmni = 4096&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; //用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改<br /> kernel.sem = 250 32000 100 128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //表示设置的信号量<br /> net.ipv4.ip_local_port_range = 1024 65000<br /> net.core.rmem_default=4194304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //默认的接收窗口大小<br /> net.core.rmem_max=4194304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //接收窗口的最大大小<br /> net.core.wmem_default=262144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //默认的发送窗口大小<br /> net.core.wmem_max=262144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp; //发送窗口的最大大小</p>< p>会有一些与目前的参数重复的,就修改成文件上提供的。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115016712.jpg" /></p>< p>编辑完之后,储存,然后执行:</p>< p># sysctl& ndash;p</p>< p>启用刚刚所做的变更。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115016304.jpg" /></p>< p><strong>6、编辑/etc/security/limits.conf</strong></p>< p># vi /etc/security/limits.conf</p>< p>添加以下四行<br /> oracle&nbsp; soft&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nproc&nbsp;&nbsp; 2047<br /> oracle&nbsp; hard&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nproc&nbsp;&nbsp; 16384<br /> oracle&nbsp; soft&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nofile&nbsp; 1024<br /> oracle&nbsp; hard&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nofile&nbsp; 65536</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-3/201339115016434.jpg" /></p>< p><strong>7、编辑/etc/pam.d/login</strong></p>< p># vi /etc/pam.d/login</p>< p>添加以下两行<br /> session required /lib64/security/pam_limits.so<br /> session required pam_limits.so</p>< p align="center" style="text-indent: 0px"><img title="点击查看http://www.downcc.com/tech/4681.htmlMySQL2013/03/07 09:53:26<p>今天发现Mysql的主从数据库没有同步</p>< p>先上Master库:</p>< p>mysql&gt;show processlist;& nbsp; 查看下进程是否Sleep太多。发现很正常。</p>< p>show master status; 也正常。</p>< p>mysql&gt; show master status;<br /> +-------------------+----------+--------------+-------------------------------+<br /> | File& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;| Position | Binlog_Do_DB | Binlog_Ignore_DB& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|<br /> +-------------------+----------+--------------+-------------------------------+<br /> | mysqld-bin.000001 |& nbsp;& nbsp; 3260 |& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;| mysql,test,information_schema |<br /> +-------------------+----------+--------------+-------------------------------+<br /> 1 row in set (0.00 sec)</p>< p>再到Slave上查看</p>< p>mysql&gt; show slave status\G& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;</p>< p>Slave_IO_Running: Yes</p>< p>Slave_SQL_Running: No</p>< p>可见是Slave不同步</p>< p>下面介绍两种解决方法:</p>< p><strong>方法一:忽略错误后,继续同步</strong></p>< p>该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况</p>< p>解决:&nbsp;</p>< p>stop slave;</p>< p>#表示跳过一步错误,后面的数字可变</p>< p>set global sql_slave_skip_counter =1;</p>< p>start slave;</p>< p>之后再用mysql&gt; show slave status\G& nbsp;查看:</p>< p>Slave_IO_Running: Yes</p>< p>Slave_SQL_Running: Yes</p>< p>ok,现在主从同步状态正常了。。。</p>< p><strong>方式二:重新做主从,完全同步</strong></p>< p>该方法适用于主从库数据相差较大,或者要求数据完全统一的情况</p>< p>解决步骤如下:</p>< p>1.先进入主库,进行锁表,防止数据写入</p>< p>使用命令:</p>< p>mysql&gt; flush tables with read lock;</p>< p>注意:该处是锁定为只读状态,语句不区分大小写</p>< p>2.进行数据备份&nbsp;</p>< p>#把数据备份到mysql.bak.sql文件</p>< p>[root@server01 mysql]#mysqldump -uroot -p -hlocalhost& gt; mysql.bak.sql</p>< p>这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失</p>< p>3.查看master 状态</p>< p>mysql&gt; show master status;<br /> +-------------------+----------+--------------+-------------------------------+<br /> | File& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;| Position | Binlog_Do_DB | Binlog_Ignore_DB& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|<br /> +-------------------+----------+--------------+-------------------------------+<br /> | mysqld-bin.000001 |& nbsp;& nbsp; 3260 |& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;| mysql,test,information_schema |<br /> +-------------------+----------+--------------+-------------------------------+<br /> 1 row in set (0.00 sec)</p>< p>4.把mysql备份文件传到从库机器,进行数据恢复</p>< p>#使用scp命令</p>< p>[root@server01 mysql]# scp mysql.bak.sql root@192.168.128.101:/tmp/</p>< p>5.停止从库的状态</p>< p>mysql&gt; stop slave;</p>< p>6.然后到从库执行mysql命令,导入数据备份</p>< p>mysql&gt; source /tmp/mysql.bak.sql</p>< p>7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项</p>< p>change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;</p>< p>8.重新开启从同步</p>< p>mysql&gt; start slave;</p>< p>9.查看同步状态</p>< p>mysql&gt; show slave status\G& nbsp;查看:</p>< p>Slave_IO_Running: Yes</p>< p>Slave_SQL_Running: Yes</p>< p>好了,同步完成啦。</p>http://www.downcc.com/tech/4678.htmlSQL Server2013/03/05 13:24:56<p><strong>现象:</strong>---------------------------------------------------</p>< p><strong>1、连接SQL Server数据库提示:Login failed for user 'sa'. Reason:</strong> Not associated with a trusted SQL Server connection 错误</p>< p><strong>问题:-------------------------------------------------</strong></p>< p>初步分析应该与用户权限有关,查阅帮助文件,微软官方给出的原因:</p>< p>当 SQL Server 2000 安全身份验证设置为&ldquo;仅 Windows&rdquo;, 并且存在下列情况之一时,就会发生此问题:</p>< p>您正在尝试使用 SQL Server 登录连接到 SQL Server 2000 数据库。</p>< p>您正在尝试使用信任的 SQL Server 连接来连接到安装在基于 Microsoft Windows 98 的计算机上的 SQL Server 2000 桌面引擎(也称为 MSDE 2000)数据库。</p>< p>您正在尝试从某 Windows 帐户连接到 SQL Server 2000 数据库,而该帐户没有足够的权限连接到服务器。</p>< p><strong>解决:--------------------------------------------</strong></p>< p><strong>官方给出的解决办法:</strong></p>< p>SQL Server 登录</p>< p>使用有效的 Windows 登录连接到 SQL Server。如果必须继续使用 SQL Server 登录,您可以将在 SQL Server 2000 中的安全身份验证模式更改为&ldquo;SQL Server 和 Windows&rdquo;。为此,请按照下列步骤操作:</p>< p>启动企业管理器。</p>< p>展开&ldquo;Microsoft SQL Servers&rdquo;,然后展开&ldquo;SQL Server 组&rdquo;。</p>< p>右键单击要更改为&ldquo;SQL Server 和 Windows&rdquo;身份验证的服务器,然后单击&ldquo;属性&rdquo;。</p>< p>在&ldquo;SQL Server 属性&rdquo;对话框中,单击&ldquo;安全&rdquo;选项卡,单击&ldquo;SQL Server 和 Windows&rdquo;,然后单击&ldquo;确定&rdquo;。</p>< p>当提示您重新启动 SQL Server 服务时,单击&ldquo;是&rdquo;。</p>< p>SQL Server 2000 桌面引擎 (MSDE 2000) 安装在基于 Microsoft Windows 98 的计算机上</p>< p>当 SQL Server 2000 桌面引擎安装在基于 Windows 98 的计算机上时,必须使用标准的 SQL Server 登录连接到数据库。当您在基于 Windows 98 的计算机上安装 SQL Server 2000 桌面引擎时,不支持&ldquo;仅 Windows&rdquo;身份验证模式。</p>< p>Windows 帐户权限不足</p>< p>要解决此问题,必须将 Windows 帐户添加到 SQL Server,然后为用户需要访问的每个数据库授予适当的权限。为此,请按照下列步骤操作:</p>< p>启动企业管理器。</p>< p>展开&ldquo;Microsoft SQL Server&rdquo;,然后展开&ldquo;SQL Server 组&rdquo;。</p>< p>展开您的服务器,然后展开&ldquo;安全&rdquo;。</p>< p>右键单击&ldquo;登录&rdquo;,然后单击&ldquo;新建登录&rdquo;。</p>< p>在&ldquo;SQL Server 登录属性&rdquo;对话框中,在&ldquo;名称&rdquo;框中输入 Windows 帐户名。在&ldquo;域&rdquo;列表中,选择该 Windows 帐户所属的域。</p>< p>单击&ldquo;数据库访问&rdquo;选项卡,为客户端设置适当的权限,然后单击&ldquo;确定&rdquo;</p>< p>注意:在添加帐户后,您仍然必须为用户需要访问的各个数据库对象授予访问权限。</p>< p><strong>2、刚装完SQL Server 2008 Express,尝试使用sa账号登录,但总是出现Login failed for user 'sa' 错误</strong>。觉得应该是SQL Server的认证模式没设对,SQL Server Express默认是Windows Authentication模式,我必须设成Mixed Authentication Mode才可以。<br />< br /> 所以查了一下文档,微软的官方文档说只要把sa账号enable就可以了,但试过后同样的错误。后来截取了SQL Server Management Studio的脚本才发现还必须要改一个注册表键值才行。<br />< br /> 在我的机器上该键值是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer\LoginMode<br />< br /> 1 - Windows Authentication Mode<br />< br /> 2 - Mixed Authentication Mode<br />< br /> 改成2以后就能用sa账号登录了。<br />< br /> *补充一下,必须得重启SQL Server的服务改动才能有效。</p>< p><strong>3、在 SQL Server 2005 中,您将收到&quot;登录错误: 18456&quot;</strong>错误消息在您尝试登录到 SQL Server 2005 实例并且下列条件都为真时:<br />& bull;您尝试使用 SQL Server 身份验证的登录来登录到该实例。<br />& bull;在 SQL Server 服务配置服务的启动帐户使用域帐户。<br />& bull;SQL 身份验证登录接收&quot;登录错误: 18456&quot;错误消息被配置为使用 Windows 域密码策略实施。<br />< br /> 注意默认情况下,除非您显式设置创建登录语句的 CHECK_POLICY 子句为 OFF 时创建给定的登录启用 SQL 身份验证登录的 Windows 域密码策略实施。<br />& bull;SQL Server 启动服务的服务帐户已锁定或禁用域控制器上。<br /> 如果配置登录审核失败登录事件写入错误日志的 SQL Server 实例,以下消息将写入 SQL Server 错误日志文件:<br /> 错误消息 1<br /> 日期时间登录错误: 18456,严重: 14 日状态: 10。</p>< p><strong>解决方案<br />< /strong>可以从 Microsoft 获得支持的热修复补丁程序。但是,此修补程序仅能用于解决本文中描述的问题。此热修复补丁程序仅适用于正出现此特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个软件更新。<br />< br /> 如果此修补程序已可供下载,则此知识库文章顶部&quot;提供修补程序下载&quot;部分。如果未显示此节,请联系 Microsoft 客户服务和支持,以获取此修复程序。<br />< br /> 注意如果出现其他问题或需要任何故障诊断,您可能需要创建单独的服务请求。其他支持问题和事项,不适合于此特定的修补程序将收取照常收取支持费用。Microsoft 客户服务和支持电话号码,或创建单独的服务请求的完整列表,请访问下面的 Microsoft Web 站点:<br /> http://support.microsoft.com/contactus/?ws=support<br /> () http://support.microsoft.com/contactus/?ws=support<br /> 注意&quot;可用的热修补程序下载&quot;表格显示此热修复补丁程序适用的语言。如果您看不到您的语言,这是因为热修复补丁程序不适用于该语言。<br /> 先决条件<br /> 您必须具有要应用此修补程序安装的 SQL 服务器 2005 Service Pack 1。</p>http://www.downcc.com/tech/4664.htmlSQL Server2013/02/18 09:08:56<p><strong>Master</strong></p>< p>Master数据库保存有放在SQLSERVER实体上的所有数据库,它还是将引擎固定起来的粘合剂。由于如果不使用主数据库,SQLSERVER就不能启动,所以你必须要小心地管理好这个数据库。因此,对这个数据库进行常规备份是十分必要的。</p>< p>这个数据库包括了诸如系统登录、配置设置、已连接的SERVER等信息,以及用于该实体的其他系统和用户数据库的一般信息。主数据库还存有扩展存储过程,它能够访问外部进程,从而让你能够与磁盘子系统和系统API调用等特性交互。这些过程一般都用像C++这样的现代编程语言。</p>< p>如果不幸碰到系统崩溃而必须恢复主数据库的情况,你可以参看MCSE/MCDBA Steven Warren在TechRepublic上发表的文章。这篇文章讲得十分透彻,它解释了恢复这一重要数据库所需要的一些特殊步骤。</p>< p><strong>Model</strong></p>< p>Model是一个用来在实体上创建新用户数据库的模版数据库。你可以把任何存储过程、视图、用户等放在模型数据库里,这样在创建新数据库的时候,新数据库就会包含你放在模型数据库里的所有对象了。</p>< p><strong>Tempdb</strong></p>< p>正如其名字所提示的,tempdb存有临时对象,例如全局和本地临时表格和存储过程。</p>< p>这个数据库在SQLSERVER每次重启的时候都会被重新创建,而其中包含的对象是依据模型数据库里定义的对象被创建的。除了这些对象,tempdb还存有其他对象,例如表格变量、来自表格值函数的结果集,以及临时表格变量。由于tempdb会保留SQLSERVER实体上所有数据库的这些对象类型,所以对数据库进行优化配置是非常重要的。</p>< p>在SQL Server 2005里,tempdb数据库还有一项额外的任务;它还被用作一些特性的版本库,例如新的快照隔离层和在线索引操作等。关于新的隔离层的简要说明,请参考我关于SQL Server 2005高级特性的文章。</p>< p><strong>Distribution</strong></p>< p>当你的SQLSERVER实体被配置为复制分发SERVER时,这个数据库就会被添加到你的系统里。在默认情况下,数据库的名字就是distribution,但是你可以更改它的名字。这个数据库用来保存历史和快照、合并和事务复制等的元数据。</p>< p><strong>Msdb</strong></p>< p>Msdb数据库用来保存于数据库备份、SQL Agent信息、DTS程序包、SQLSERVER任务等信息,以及诸如日志转移这样的复制信息。</p>http://www.downcc.com/tech/4623.htmlSQL Server2013/01/21 20:05:45<p>Sql2005版本:Sql2005开发版,两张CD的那种</p>< p align="left">操作系统:Window 2003 Server</p>< p align="left">假设您的电脑已安装了Sql2000,下面开始安装Sql2005。</p>< p align="left">一、运行光盘1</p>< p><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013121202414751.jpg" /></p>< p>&nbsp;跳过 准备 步骤,直接进行&ldquo;服务器组件、工具、联机丛书和示例&rdquo;的安装。</p>< p>接着是许可协议,当然选择&ldquo;我接受许可条款和条件&rdquo;,不选择就没得装了。</p>< p>然后是sqlserver进行安装前的支持组件安装、扫描计算机配置,接着才进入安装向导。</p>< p>在安装向导里,sqlserver 2005安装程序会对系统进行配置检查,这一关是否能过就要看你电脑的配置情况了,一般不是太古老的机子应该都没有问题。</p>< p>接下来输入注册信息;选择要安装的组件,这里我们只选择SQL Server Database Services组件,其他的用不着。在这个过程中我们可以点击&quot;高级&quot;按钮来选择安装路径。</p>< p><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013121202415684.jpg" /></p>< p>接下来在&ldquo;实例名&rdquo;中这是比较关键的一步,如果机子上没有别的Sql版本的,选择默认实例名就行了,但是由于我本上原装有Sql2000,所以这一步得选&ldquo;新实例名&rdquo;,然后输入实例名,实例名可以由A-Z或a-z的16位字母组成。</p>< p><font size="2"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013121202415345.jpg" /></font></p>< p align="center" style="text-align: left">接着就下一步,到<span style="font-size: small"><font size="2"><span style="font-family: 宋体">服认证模式选用混合认证模式</span>,<span style="font-family: 宋体">同时设置</span>sa<span style="font-family: 宋体">密码</span>;<span style="font-family: 宋体">剩下部分的安装都选默认值</span>,<span style="font-family: 宋体">一路</span>&quot;<span style="font-family: 宋体">下一步</span>&quot;,<span style="font-family: 宋体">最后安装</span>,<span style="font-family: 宋体">完成。</span></font></span></p>< p><span style="font-size: small"><font size="2"><span style="font-family: 宋体">此时完成后,没有出现</span>SQL Server Management Studio<span style="font-family: 宋体">工具</span>,<span style="font-family: 宋体">我们还需要安装第二张盘。</span></font></span></p>< p><span style="font-size: small"><font size="2"><span style="font-family: 宋体">运行光盘</span>2</font></span></p>< p><font size="2"><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013121202415559.jpg" /></font></p>< p>点击&quot;仅工具、联机丛书和示例&quot;进行安装,又是同样的步骤,同意、下一步、下一步、下一步、注册信息填写,下一步。</p>< p>接着我们进入最重要的一步:功能选择。这里必须将客户端组件全部选择安装至本地。</p>< p><img alt="" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013121202415941.jpg" /></p>< p>接下来一路回车下去,完成安装。</p>< p>打开开始〉〉〉程序〉〉〉SQL Server 2005中终于看到了SQL Server Management Studio。<br /> 到处,Sql 2005共存数据库安装完成</p>http://www.downcc.com/tech/4582.htmlSQL Server2013/01/15 11:52:03<p>很多人都知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可<strong>为什么能防止注入</strong>却并不是很多人都知道的。本文主要讲述的是这个问题,也许你在部分文章中看到过这块内容,当然了看看也无妨。</p>< p>首先:我们要了解SQL收到一个指令后所做的事情:</p>< p>具体细节可以查看文章:Sql Server 编译、重编译与执行计划重用原理,在这里,我简单的表示为:&nbsp;<strong>收到指令 -&gt; 编译SQL生成执行计划 -&gt;选择执行计划 -&gt;执行执行计划</strong>。</p>< p>具体可能有点不一样,但大致的步骤如上所示。接着我们来分析<strong>为什么拼接SQL 字符串会导致SQL注入的风险呢</strong>?</p>< p>首先创建一张表Users:</p>< pre> CREATE TABLE [dbo].[Users]( [Id] [uniqueidentifier] NOT NULL, [UserId] [int] NOT NULL, [UserName] [varchar](50) NULL, [Password] [varchar](50) NOT NULL, CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]</pre>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013115115244564.jpg" /></p>< p>插入一些数据:</p>< pre> INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),1,'name1','pwd1'); INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),2,'name2','pwd2'); INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),3,'name3','pwd3'); INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),4,'name4','pwd4'); INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),5,'name5','pwd5');</pre>< p>假设我们有个用户登录的页面,代码如下:</p>< p>验证用户登录的sql 如下:</p>< pre> select COUNT(*) from Users where Password = 'a' and UserName = 'b'&nbsp;</pre>< p>这段代码返回Password 和UserName都匹配的用户数量,如果大于1的话,那么就代表用户存在。</p>< p><strong>本文不讨论SQL 中的密码策略,也不讨论代码规范,主要是讲为什么能够防止SQL注入,请一些同学不要纠结与某些代码,或者和SQL注入无关的主题。</strong></p>< p>可以看到执行结果:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013115115245169.jpg" /></p>< p>这个是SQL profile 跟踪的SQL 语句。</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013115115245195.jpg" /></p>< p>注入的代码如下:</p>< pre> select COUNT(*) from Users where Password = 'a' and UserName = 'b' or 1=1&mdash;'</pre>< p>这里有人将UserName设置为了& ldquo;<strong>b'&nbsp;or&nbsp;1=1& ndash;</strong>&rdquo;.</p>< p>实际执行的SQL就变成了如下:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013115115245940.jpg" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013115115245998.jpg" /></p>< p>可以很明显的看到SQL注入成功了。</p>< p>很多人都知道<strong>参数化查询</strong>可以避免上面出现的注入问题,比如下面的代码:</p>< pre> class Program { private static string connectionString =& quot;Data Source=.;Initial Catalog=Test;Integrated Security=True&quot;; static void Main(string[] args) { Login(&quot;b&quot;,& quot;a&quot;); Login(&quot;b' or 1=1--&quot;,& quot;a&quot;); } private static void Login(string userName, string password) { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; //为每一条数据添加一个参数 comm.CommandText =& quot;select COUNT(*) from Users where Password = @Password and UserName = @UserName&quot;; comm.Parameters.AddRange( new SqlParameter[]{ new SqlParameter(&quot;@Password&quot;, SqlDbType.VarChar) { Value = password}, new SqlParameter(&quot;@UserName&quot;, SqlDbType.VarChar) { Value = userName}, }); comm.ExecuteNonQuery(); } } }</pre>< p>实际执行的SQL 如下所示:</p>< pre> exec sp_executesql N'select COUNT(*) from Users where Password = @Password and UserName = @UserName',N'@Password varchar(1),@UserName varchar(1)',@Password='a',@UserName='b'</pre>< pre> exec sp_executesql N'select COUNT(*) from Users where Password = @Password and UserName = @UserName',N'@Password varchar(1),@UserName varchar(11)',@Password='a',@UserName='b'' or 1=1&mdash;'&nbsp;</pre>< p>可以看到参数化查询主要做了这些事情:</p>< pre> 1:<strong>参数过滤</strong>,可以看到 @UserName='b'' or 1=1&mdash;'</pre>< pre> 2:<strong>执行计划重用</strong></pre>< p><strong>因为执行计划被重用,所以可以防止SQL注入。</strong></p>< p>首先分析SQL注入的本质,用户写了一段SQL 用来表示查找密码是a的,用户名是b的所有用户的数量。通过注入SQL,这段SQL现在表示的含义是查找(密码是a的,并且用户名是b的,) 或者1=1 的所有用户的数量。</p>< p><strong>可以看到SQL的语意发生了改变,为什么发生了改变呢?,因为没有重用以前的执行计划,因为对注入后的SQL语句重新进行了编译,因为重新执行了语法解析。所以要保证SQL语义不变,即我想要表达SQL就是我想表达的意思,不是别的注入后的意思,就应该重用执行计划。</strong></p>< p><strong>如果不能够重用执行计划,那么就有SQL注入的风险,因为SQL的语意有可能会变化,所表达的查询就可能变化。</strong></p>< p>在SQL Server 中查询执行计划可以使用下面的脚本:</p>< pre> DBCC FreeProccache select total_elapsed_time / execution_count 平均时间,total_logical_reads/execution_count 逻辑读, usecounts 重用次数,SUBSTRING(d.text, (statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(text) ELSE statement_end_offset END - statement_start_offset)/2) + 1) 语句执行 from sys.dm_exec_cached_plans a cross apply sys.dm_exec_query_plan(a.plan_handle) c ,sys.dm_exec_query_stats b cross apply sys.dm_exec_sql_text(b.sql_handle) d --where a.plan_handle=b.plan_handle and total_logical_reads/execution_count&gt;4000 ORDER BY total_elapsed_time / execution_count DESC;</pre>< pre>& nbsp;</pre>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013115115245109.jpg" /></p>< p>在这篇文章中有这么一段:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2013-1/2013115115246926.png" /></p>< p>这里作者有一句话:&rdquo;不过这种写法和直接拼SQL执行没啥实质性的区别&rdquo;,任何拼接SQL的方式都有SQL注入的风险,所以如果没有实质性的区别的话,那么使用exec 动态执行SQL是不能防止SQL注入的。</p>< p>比如下面的代码:</p>< pre> private static void TestMethod() { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; //使用exec动态执行SQL  //实际执行的查询计划为(@UserID varchar(max))select * from Users(nolock) where UserID in (1,2,3,4)   //不是预期的(@UserID varchar(max))exec('select * from Users(nolock) where UserID in ('+@UserID+')') comm.CommandText =& quot;exec('select * from Users(nolock) where UserID in ('+@UserID+')')&quot;; comm.Parameters.Add(new SqlParameter(&quot;@UserID&quot;, SqlDbType.VarChar, -1) { Value =& quot;1,2,3,4&quot; }); //comm.Parameters.Add(new SqlParameter(&quot;@UserID&quot;, SqlDbType.VarChar, -1) { Value =& quot;1,2,3,4); delete from Users;--&quot; }); comm.ExecuteNonQuery(); http://www.downcc.com/tech/4536.htmlMySQL2013/01/12 12:15:18<p>我们在网站数据维护中经常会遇到备份数据库,还原数据库的情况,我们一般用一下两种方式来处理:</p>< p><strong>1.使用into outfile 和 load data infile导入导出备份数据</strong></p>< p>这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中,相对于mysqldump比较灵活机动。</p>< p>我们来看下面的例子:</p>< p>(1)下面的mysql命令是把select的mytable表中的数据导出到/home/db_bak2012文件。</p>< pre> select * from mytable where status!=0 and name!='' into outfile '/home/db_bak2012' fields terminated by '|' enclosed by '&quot;' lines terminated by '\r\n' ;</pre>< p>导入刚才备份的数据,可以使用load file方法,下面的mysql命令,把导出的数据导入了mytable_bak的表中:</p>< pre> load data infile '/home/db_bak2012' into table mytable_bak fields terminated by '|' enclosed by '&quot;' lines terminated by '\r\n' ;</pre>< p><strong>2.使用mysqldump导出固定条件的数据库</strong></p>< p>我们来看几个常用用例:<br />< strong>(1)导出整个数据库</strong></p>< pre> mysqldump -u 用户名 -p 数据库名& gt; 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc& gt; wcnc.sql</pre>< p><strong>(2)导出一个表</strong></p>< pre> mysqldump -u 用户名 -p 数据库名 表名&gt; 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users&gt; wcnc_users.sql</pre>< p><strong>(3)导出一个数据库结构</strong></p>< pre> mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc& gt;d:\wcnc_db.sql #-d 不导出数据只导出结构 --add-drop-table 在每个create语句之前增加一个drop table< /pre>< p><strong>(4)导入数据库,常用source 命令</strong></p>< pre> #进入mysql数据库控制台, mysql -u root -p mysql&gt;use 数据库 mysql&gt;set names utf8; (先确认编码,如果不设置可能会出现乱码,注意不是UTF-8)&nbsp; #然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql&gt;source d:\wcnc_db.sql</pre>< p>上边的实例只是最基础的,有的时候我们可能需要批量导出多个库,我们就可以加上--databases 或者-B,如下语句:</p>< pre> mysqldump -uroot -p --databases test mysql #空格分隔</pre>< p>还有的时候我们可能需要把数据库内所有的库全部备份,我们就可以使用-all-databases,如下语句:</p>< pre> mysqldump -uroot -p -all-databases</pre>< p>可能我们还会有更多的需求,下面是我在网上找的感觉比较全的参数说明,贴出来供大家参考。</p>< p><strong>参数说明</strong></p>< p><strong>--all-databases&nbsp;&nbsp;,&nbsp;-A</strong></p>< p>导出全部数据库。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases</p>< p><strong>--all-tablespaces&nbsp;&nbsp;,&nbsp;-Y</strong></p>< p>导出全部表空间。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--all-tablespaces</p>< p><strong>--no-tablespaces&nbsp;&nbsp;,&nbsp;-y</strong></p>< p>不导出任何表空间信息。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--no-tablespaces</p>< p><strong>--add-drop-database</strong></p>< p>每个数据库创建之前添加drop数据库语句。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--add-drop-database</p>< p><strong>--add-drop-table</strong></p>< p>每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;&nbsp;(默认添加drop语句)</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;&ndash;skip-add-drop-table&nbsp;&nbsp;(取消drop语句)</p>< p><strong>--add-locks</strong></p>< p>在每个表导出之前增加LOCK&nbsp;TABLES并且之后UNLOCK&nbsp;&nbsp;TABLE。(默认为打开状态,使用--skip-add-locks取消选项)</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;&nbsp;(默认添加LOCK语句)</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;&ndash;skip-add-locks&nbsp;&nbsp;&nbsp;(取消LOCK语句)</p>< p><strong>--allow-keywords</strong></p>< p>允许创建是关键词的列名字。这由表名前缀于每个列名做到。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--allow-keywords</p>< p><strong>--apply-slave-statements</strong></p>< p>在'CHANGE&nbsp;MASTER'前添加'STOP&nbsp;SLAVE',并且在导出的最后添加'START&nbsp;SLAVE'。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--apply-slave-statements</p>< p><strong>--character-sets-dir</strong></p>< p>字符集文件的目录</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;&nbsp;--character-sets-dir=/usr/local/mysql/share/mysql/charsets</p>< p><strong>--comments</strong></p>< p>附加注释信息。默认为打开,可以用--skip-comments取消</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;&nbsp;(默认记录注释)</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--skip-comments&nbsp;&nbsp;&nbsp;(取消注释)</p>< p><strong>--compatible</strong></p>< p>导出的数据将和其它数据库或旧版本的MySQL&nbsp;相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,</p>< p>要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--compatible=ansi</p>< p><strong>--compact</strong></p>< p>导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table&nbsp;&nbsp;--skip-add-locks&nbsp;--skip-comments&nbsp;--skip-disable-keys</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--compact</p>< p><strong>--complete-insert,&nbsp;&nbsp;-c</strong></p>< p>使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--complete-insert</p>< p><strong>--compress,&nbsp;-C</strong></p>< p>在客户端和服务器之间启用压缩传递所有信息</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--compress</p>< p><strong>--create-options,&nbsp;&nbsp;-a</strong></p>< p>在CREATE&nbsp;TABLE语句中包括所有MySQL特性选项。(默认为打开状态)</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases</p>< p><strong>--databases,&nbsp;&nbsp;-B</strong></p>< p>导出几个数据库。参数后面所有名字参量都被看作数据库名。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--databases&nbsp;test&nbsp;mysql</p>< p><strong>--debug</strong></p>< p>输出debug信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.trace</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--debug</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--debug=&rdquo;&nbsp;d:t:o,/tmp/debug.trace&rdquo;</p>< p><strong>--debug-check</strong></p>< p>检查内存和打开文件使用说明并退出。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--debug-check</p>< p><strong>--debug-info</strong></p>< p>输出调试信息并退出</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--debug-info</p>< p><strong>--default-character-set</strong></p>< p>设置默认字符集,默认值为utf8</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--default-character-set=latin1</p>< p><strong>--delayed-insert</strong></p>< p>采用延时插入方式(INSERT&nbsp;DELAYED)导出数据</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--delayed-insert</p>< p><strong>--delete-master-logs</strong></p>< p>master备份后删除日志.&nbsp;这个参数将自动激活--master-data。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;--delete-master-logs</p>< p><strong>--disable-keys</strong></p>< p>对于每个表,用/*!40000&nbsp;ALTER&nbsp;TABLE&nbsp;tbl_name&nbsp;DISABLE&nbsp;KEYS&nbsp;*/;和/*!40000&nbsp;ALTER&nbsp;TABLE&nbsp;tbl_name&nbsp;ENABLE&nbsp;KEYS&nbsp;*/;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。</p>< p>mysqldump&nbsp;&nbsp;-uroot&nbsp;-p&nbsp;--all-databases&nbsp;</p>< p><strong>--dump-slave</strong></p>< p>该选项将导致主的binlog位置和文件名追加到导出数据的文件中。设置为1时,将会以CHANGE&nbsp;MASTER命令输出到数据文件;设置为2时,在命令前增加说明信息。该选项将会打开--lockhttp://www.downcc.com/tech/4531.htmlMySQL2013/01/11 23:47:38<p>今天连接mysql数据库的时候遇到一个问题:Can't&nbsp;connect&nbsp;to&nbsp;local&nbsp;MySQL&nbsp;server&nbsp;through&nbsp;socket&nbsp;'/tmp/mysql.sock'&nbsp;(2)</p>< p>方案1.<br />& nbsp;1.#ps&nbsp;-A|grep&nbsp;mysql&nbsp;<br />& nbsp;&nbsp;&nbsp;显示类似:<br />& nbsp;&nbsp;1829&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;mysqld_safe<br />& nbsp;&nbsp;&nbsp;1876&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:31&nbsp;mysqld<br />& nbsp;&nbsp;2.#kill&nbsp;-9&nbsp;1829<br />& nbsp;&nbsp;3.#kill&nbsp;-9&nbsp;1876<br />& nbsp;&nbsp;4.#/etc/init.d/mysql&nbsp;restart<br />& nbsp;&nbsp;5.#mysql&nbsp;-u&nbsp;root&nbsp;-p<br />& nbsp;<br />& nbsp;&nbsp;&nbsp;他的麻烦解决了,我的还没解决!<br />& nbsp;<br /> 继续找<br /> 方案2&nbsp;<br /> 先查看&nbsp;/etc/rc.d/init.d/mysqld&nbsp;status&nbsp;看看m&nbsp;y&nbsp;s&nbsp;q&nbsp;l&nbsp;是否已经启动.<br /> 另外看看是不是权限问题.<br /> ------------------------------------------------------------------------------------<br /> [root@localhost&nbsp;beinan]#chown&nbsp;-R&nbsp;mysql:mysql&nbsp;/var/lib/mysql<br /> [root@localhost&nbsp;beinan]#&nbsp;/etc/init.d/mysqld&nbsp;start<br /> 启动&nbsp;MySQL:&nbsp;[&nbsp;确定&nbsp;]<br /> [root@localhost&nbsp;lib]#&nbsp;mysqladmin&nbsp;-uroot&nbsp;password&nbsp;'123456'<br /> [root@localhost&nbsp;lib]#&nbsp;mysql&nbsp;-uroot&nbsp;-p<br /> Enter&nbsp;password:<br /> Welcome&nbsp;to&nbsp;the&nbsp;MySQL&nbsp;monitor.&nbsp;Commands&nbsp;end&nbsp;with&nbsp;;&nbsp;or&nbsp;/g.<br /> Your&nbsp;MySQL&nbsp;connection&nbsp;id&nbsp;is&nbsp;3&nbsp;to&nbsp;server&nbsp;version:&nbsp;4.1.11</p>< p>Type&nbsp;'help;'&nbsp;or&nbsp;'/h'&nbsp;for&nbsp;help.&nbsp;Type&nbsp;'/c'&nbsp;to&nbsp;clear&nbsp;the&nbsp;buffe<br />& nbsp;<br /> 他的也解决了,我的麻烦还在继续,依然继续寻找<br />& nbsp;<br /> 方案3&nbsp;<br /> 问题解决了,竟然是max_connections=1000&nbsp;他说太多了,然后改成500也说多,无奈删之问题解决了。<br />& nbsp;<br /> 还是不行<br /> 方案4<br />& nbsp;&nbsp;&nbsp;&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/lib/mysql&nbsp;所有文件权限&nbsp;改成mysql.mysql<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不行不行<br />& nbsp;<br /> 方案5<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;摘要:解决不能通过mysql&nbsp;.sock连接MySQL问题&nbsp;这个问题主要提示是,不能通过&nbsp;'/tmp/mysql&nbsp;.sock'连到服务器,而php标准配置正是用过'/tmp/mysql&nbsp;.sock',但是一些mysql&nbsp;安装方法&nbsp;将&nbsp;mysql&nbsp;.sock放在/var/lib /mysql&nbsp;.sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可以看到如下的东东:&nbsp;<br />& nbsp;  [mysql&nbsp;d]&nbsp;<br />   socket=/var/lib/mysql&nbsp;.sock&nbsp;<br />   改一下就好了,但也会引起其他的问题,如mysql&nbsp;程序连不上了,再加一点:&nbsp;<br />   [mysql&nbsp;]&nbsp;<br />   socket=/tmp/mysql&nbsp;.sock&nbsp;<br />   或者还可以通过修改php.ini中的配置来使php用其他的mysql&nbsp;.sock来连,这个大家自己去找找<br />   <br />   或者用这样的方法:<br />   ln&nbsp;-s&nbsp;/var/lib/mysql&nbsp;/mysql&nbsp;.sock&nbsp;/tmp/mysql&nbsp;.sock</p>< p>成功了,就是这样ln&nbsp;-s&nbsp;/var/lib/mysql&nbsp;/mysql&nbsp;.sock&nbsp;/tmp/mysql&nbsp;.sock</p>< p>OK!</p>< p><span>但我的系统中没有找到<strong><span>mysql.sock</span></strong>文件,只有<span><strong>mysqld.sock</strong></span>文件,/var/run/mysqld/mysqld.sock</span></p>< p><span>于是仿照上面的做法:&nbsp;ln&nbsp;-s&nbsp;/var/run/mysqld/mysqld.sock&nbsp;/tmp/mysql.sock</span></p>< p><span>这样,可以正常连接数据库了.。</span></p>http://www.downcc.com/tech/4527.htmlSQL Server2013/01/10 16:07:01<p>高级查询技术主要是涉及多个表的链接查询技术、嵌入SELECT语句的子查询技术,把多个查询联合起来的联合技术等。</p>< p>1.&nbsp;连接查询</p>< p>需要同时从两个或者连个以上的表中检索数据。链接就是允许同时从两个表或者两个以上的表中检索数据,指定这些表中的某个或者某些列作为连接条件。在SQL&nbsp;Server中,可以使用两种连接语法的形式,一种是ANSI链接语法形式,这是连接条件出现在FROM子句中;另外一种SQL&nbsp;Server链接语法形式,这是连接条件出现在WHERE条件中。</p>< p><strong>1.&nbsp;ANSI链接</strong></p>< p>链接错做可以同时查询两个或者多个表中的数据,所生成的结果集包含多个表中的字段,需要使用连个表中共同拥有的字段以连接多个表。</p>< p>进行连接操作时,SQL一行一行地比较所指定的字段,然后把比较后的结果和满足条件的数据合并,并生成新的记录。</p>< p>有三种连接方式:内连接、外连接和交叉连接。在一个SELECT语句中,可以连接多个表;链接通过扩展SELECT语句的FROM字句,增加了两个关键字:JOIN和ON</p>< p>JOIN:指定要了链接的表</p>< p>ON:指定这些表共同拥有的字段</p>< p>在表的主键和外部键的基础上,指定连接条件。</p>< p>ANSI链接语法形式如下所示:</p>< p>SELECT&nbsp;table_name.column_name,&nbsp;table_name.column_name,&hellip;&hellip;</p>< p>FROM&nbsp;{&nbsp;table_name[&nbsp;join_type]&nbsp;JOIN&nbsp;table_name&nbsp;&nbsp;ON&nbsp;&nbsp;&nbsp;search_conditions}</p>< p>WHERE[&nbsp;search_conditions]</p>< p>其中[&nbsp;join_type&nbsp;]可以为如下三个关键字形式:</p>< p>INNER(内连接):链接查询结果集中仅包含满足条件的行,内连接是SQL&nbsp;Server缺省的连接方式,可以把INNER&nbsp;JOIN简写成&nbsp;JOIN;</p>< p>OUTER(外连接):链接查询结果集中既包含哪些满足条件的行,还包含其中某个表的全部行,有三种形式的外连接:左外连接、右外连接、全外连接。</p>< p>例如:已经选修了4号课程的同学信息的示例,该示例涉及到了学生表和选修课:<br /> SELECT&nbsp;学生表</p>< p>FROM&nbsp;&nbsp;学生表&nbsp;&nbsp;JOIN&nbsp;&nbsp;选课表&nbsp;&nbsp;&nbsp;ON&nbsp;&nbsp;&nbsp;学生表.学号&nbsp;&nbsp;选课表.学号</p>< p>WHERE&nbsp;&nbsp;&nbsp;选课表&nbsp;&nbsp;&nbsp;课程号=4</p>< p><strong>2.&nbsp;SQL&nbsp;Server链接</strong></p>< p>多表连接,可以在FROM子句后直接指定多个表,语义上表示从这几个表的笛卡尔积中检索数据,可以用WHERE子句设定过滤条件。</p>< p>SQL&nbsp;Server链接语法形式如下:</p>< p>SELECT&nbsp;&nbsp;table_name.column_name,table_name.column_name,&hellip;&hellip;</p>< p>FROM&nbsp;{&nbsp;table_name,table_name,&hellip;&hellip;}</p>< p>WHERE&nbsp;table_name.column_name&nbsp;join_operator&nbsp;table_name.column_name</p>< p>在此种语法形式中,FROM子句列出了连接时所使用到的全部表名,WHERE子句指定哪些行应该出现在结果集中,即用WHERE子句设定过滤条件。在WHERE子句中,在两个连接的列中使用链接运算符。&nbsp;&nbsp;</p>< p>例如:检索出至少已经有一门课程及格的同学的信息示例:</p>< p>&nbsp;&nbsp;SELECT&nbsp;&nbsp;DISTINCT&nbsp;&nbsp;&nbsp;学生表&nbsp;&nbsp;&nbsp;*</p>< p>FROM&nbsp;&nbsp;学生表&nbsp;&nbsp;&nbsp;选课表</p>< p>WHERE&nbsp;&nbsp;&nbsp;学生表.学号=选课表.学号&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;选课表.成绩=60</p>< p><strong>3.&nbsp;子查询</strong></p>< p>子查询是一系列SELECT语句。SELECT语句可以嵌套在其他许多语句中,例如SELECT、INSERT、UPDATE、DELETE等,这些嵌套的SELECT语句就称为子查询。子查询可以把一个复杂的查询分解成一系列的逻辑步骤,这样就可以用一个单个的语句解决一个复杂的查询问题。当一个查询依赖于另一个查询的结果时,子查询会很有用。</p>< p>使用子查询时,应注意:</p>< p>子查询要用括号起来</p>< p>只需要一个值或一系列的值,就可以用子查询代替一个表达式</p>< p>子查询中不能查询包含数据类型是text或image的字段</p>< p>子查询中也可以再包含子查询,嵌套可以多至32层</p>< p><strong>1.&nbsp;把子查询用作派生的表</strong></p>< p>可以用子查询产生一个派生的表,用于代替FROM子句中的表。派生表示FROM子句中子查询的一个特殊用法,用一个别名或用户自定义的名字来引用这个派生表。FROM子句中的子查询将返回一个结果集,这个结果集所形成的表将被外层SELECT语句使用。</p>< p>例如:内层查询用子查询产生了一个派生的表,外层查询将使用内层查询的结果集。在功能上,派生表本身就等同于一个完整的查询</p>< p>SLECT&nbsp;&nbsp;A&nbsp;&nbsp;*</p>< p>FROM&nbsp;&nbsp;select&nbsp;&nbsp;&nbsp;学号,姓名,年龄&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;学生表</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where&nbsp;&nbsp;班级=&lsquo;GZ02计6&rsquo;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;a</p>< p><strong>2.&nbsp;把子查询用作表达式</strong></p>< p>在T-SQL中,所有使用表达式的地方,都可以用子查询来代替。此时子查询必须返回单个的值或某一个字段的值。子查询可以返回一系列的值来代替出现在WHERE子句中的IN关键字的表达式。</p>< p>例如:查询GZ02计7班同学的平均年龄以及每个同学年龄与平均年龄的差</p>< p>&nbsp;SELECT&nbsp;&nbsp;avg(年龄)&nbsp;&nbsp;FROM&nbsp;学生表&nbsp;&nbsp;as&nbsp;&nbsp;平均年龄</p>< p>其计算结果作为选择列表中的一个输出列,并作为算术表达式的一部分输出:</p>< p>年龄-(SELECT&nbsp;avg(年龄)&nbsp;&nbsp;FROM&nbsp;&nbsp;学生表)&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;年龄差</p>< p><strong>3.&nbsp;相关子查询</strong></p>< p>相关子查询可被用作动态表达式,这个表达式的值相对于外层查询的每一行而变化。查询处理器为外层查询的每一个记录计算子查询的值,一次一行,而这个子查询每次都会被作为一个表达式而被计算并返回给外层查询。相关子查询是动态执行的子查询和外层查询间的一个非常有效的联合。</p>< p>使用相关子查询时,内层子查询被反复执行,外层查询有多少记录,内层查询就被齿形多少次。</p>< p>例如:查询已选修课程号的1且成绩在90分以上的同学的学号及姓名:</p>< p>SELECT&nbsp;&nbsp;学号&nbsp;&nbsp;&nbsp;姓名</p>< p>FROM&nbsp;&nbsp;&nbsp;学生表</p>< p>WHERE&nbsp;&nbsp;&nbsp;90&nbsp;&nbsp;&lt;=(&nbsp;&nbsp;SELECT&nbsp;&nbsp;成绩</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;选课表</p>< p>&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;WHERE&nbsp;&nbsp;学生表.学号=选课表.学号&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;课程号=1)</p>< p><strong>4.&nbsp;使用EXISTS和NOT&nbsp;EXISTS操作符</strong></p>< p>在相关子查询中可以使用EXISTS和NOT&nbsp;EXISTS操作符判断某个值是否在一系列的值中。SQL&nbsp;Server处理带有EXISTS和NOT&nbsp;EXISTS操作符的子查询时:</p>< p>外层查询测试子查询返回的记录是否存在</p>< p>基于查询所指定的条件,子查询返回TRUE或FALSE</p>< p>子查询不产生任何数据</p>< p>例如:同时选修了1号课程和2号课程的同学的信息:</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;&nbsp;学号,姓名,班级</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;学生表</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;&nbsp;&nbsp;EXISTS(SELECT&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;选课表</p>< p>&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;WHERE&nbsp;&nbsp;&nbsp;学号=学生表.学号&nbsp;&nbsp;AND&nbsp;&nbsp;课程号=1)</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;EXISTS(SELECT&nbsp;&nbsp;*&nbsp;&nbsp;FROM&nbsp;&nbsp;选课表</p>< p>&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;WHERE&nbsp;&nbsp;&nbsp;学号=学生表.学号&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;课程号=2)</p>< p>①&nbsp;找外层表&ldquo;学生表&rdquo;的第1行,根据其&ldquo;学号&rdquo;值处理内层查询</p>< p>②&nbsp;用外层的&ldquo;学号&rdquo;与内层表&ldquo;选课表&rdquo;的&ldquo;学号&rdquo;比较,由此决定外层条件的真、假,如果为真,则此记录为符合条件的结果,反之,则不输出。</p>< p>③&nbsp;顺序处理外层表&ldquo;学生表&rdquo;中的第2、3、4、。。。行</p>< p>检索出每一门选修课都几个的同学信息</p>< p>SELECT&nbsp;*&nbsp;FROM&nbsp;&nbsp;学生表&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;</p>< p>&nbsp;&nbsp;NOT&nbsp;&nbsp;EXISTS(&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;&nbsp;选课表</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsphttp://www.downcc.com/tech/4476.htmlSQL Server2012/12/26 15:17:44<p>相信大家常常会遇到将SqlServer查询结果导出到Excel的问题。如果导出的次数少,直接&ldquo;Save Results As...&rdquo;就是了;</p>< p>1.1准备好查询语句</p>< p>1.2<strong>选择数据库,启动导入和导出向导</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151917774.jpg" /></p>< p>1.3<strong>选择数据源</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151918149.jpg" /></p>< p>1.4<strong>选择目标</strong></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151918741.jpg" /></p>< p>1.5</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151918414.jpg" /></p>< p>1.6</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151918476.jpg" /></p>< p>1.7</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151919498.jpg" /></p>< p>1.8</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151919231.jpg" /></p>< p>后续步骤不再附图,一直点&ldquo;下一步&rdquo;按钮就好。</p>< p><strong>2、但是当要分别在每个表取样,那就相当麻烦了</strong>。今天就为大家提供一个脱离office组件的可以将语句结果导出到Excel的过程,希望会对大家有帮助!</p>< p><strong>---导出到Excel<br />< /strong>---使用说明:<br /> --&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.执行时所连接的服务器决定文件存放在哪个服务器<br /> --&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.远程查询语句中,要加上数据库名<br /> ALTER PROC ExportFile< br />& nbsp;&nbsp;&nbsp;&nbsp; @QuerySql VARCHAR(max)< br />& nbsp;&nbsp;&nbsp; ,@Server VARCHAR(20)< br />& nbsp;&nbsp;&nbsp; ,@User VARCHAR(20)< br />& nbsp;&nbsp;&nbsp; ,@Password VARCHAR(20)< br />& nbsp;&nbsp;&nbsp; ,@FilePath NVARCHAR(100) = 'c:\ExportFile.xls'<br /> AS<br />& nbsp;&nbsp;&nbsp; DECLARE @tmp VARCHAR(50) = '[##Table' + CONVERT(VARCHAR(36),NEWID())+']'<br />& nbsp;&nbsp;&nbsp; BEGIN TRY<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE @Sql VARCHAR(max),@DataSource VARCHAR(max)='';<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --判断是否为远程服务器<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF @Server& lt;&gt; '.' AND @Server& lt;&gt; '127.0.0.1'<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET @DataSource = 'OPENDATASOURCE(''SQLOLEDB'',''Data Source='+@Server+';User ID='+@User+';Password='+@Password+''').'<br />< strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --将结果集导出到指定的数据库<br />< /strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET @Sql = REPLACE(@QuerySql,' from ',' into '+@tmp+ ' from ' + @DataSource)<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRINT @Sql<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC(@Sql)<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE @Columns VARCHAR(max) = '',@Data NVARCHAR(max)=''<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT @Columns = @Columns + ',''' + name +''''--获取列名(xp_cmdshell导出文件没有列名)<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,@Data = @Data + ',Convert(Nvarchar,[' + name +'])'--将结果集所在的字段更新为nvarchar(避免在列名和数据union的时候类型冲突)<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..'+@tmp)<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT @Data&nbsp; = 'SELECT ' + SUBSTRING(@Data,2,LEN(@Data)) + ' FROM ' + @tmp<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT @Columns =&nbsp; 'Select ' + SUBSTRING(@Columns,2,LEN(@Columns))<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --使用xp_cmdshell的bcp命令将数据导出<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC sp_configure 'xp_cmdshell',1<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RECONFIGURE<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE @cmd NVARCHAR(4000) = 'bcp& quot;' + @Columns+' Union All ' + @Data+'&quot; queryout ' + @FilePath + ' -c -T'<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRINT @cmd<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec sys.xp_cmdshell @cmd<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC sp_configure 'xp_cmdshell',0<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RECONFIGURE<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC('DROP TABLE ' + @tmp)<br />& nbsp;&nbsp;&nbsp; END TRY<br />& nbsp;&nbsp;&nbsp; BEGIN CATCH<br />< strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --处理异常<br />< /strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF OBJECT_ID('tempdb..'+@tmp) IS NOT NULL<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC('DROP TABLE ' + @tmp)<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXEC sp_configure 'xp_cmdshell',0<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RECONFIGURE<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT ERROR_MESSAGE()<br />& nbsp;&nbsp;&nbsp; END CATCH</p>< p>先不要着急使用,该版本是基于xp_cmdshell的,因为要创建文件,所以要保证你的用户能有文件管理的权限,通常简单点的方法就是将sql server的启动用户设置为本地系统用户</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151919468.png" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151919389.png" /></p>< p>好了,现在我们来执行看看:</p>< pre><strong>--查询分析器连接哪个服务器</strong>,文件就在哪个服务器上< span style="color: #6600cc">--本地导出< /span>EXEC dbo.ExportFile @QuerySql = 'select * from sys.objects', -- varchar(max) @Server = '.', -- varchar(20) @FilePath = N'c:\objects.xls' -- nvarchar(100)< span style="color: #006600">--远程导出< /span>EXEC dbo.ExportFile @QuerySql = 'select * from master.sys.objects', -- varchar(max) @Server = '192.168.1.52', -- varchar(20) @User = 'sa', -- varchar(20) @Password = 'sa', -- varchar(20) @FilePath = N'c:\52objects.xls' -- nvarchar(100)</pre>< p>执行结果如下,显示导出条数,就没有报错,再看看你的C盘,多了2个文件就大功告成了:</p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151919325.png" /></p>< p align="center" style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/20121226151919611.png" /></p>http://www.downcc.com/tech/4436.htmlAccess2012/12/10 22:05:50<p>SQLite 是一个类似Access的轻量级数据库系统,但是更小、更快、容量更大,并发更高。为什么说 SQLite 最适合做 CMS (内容管理系统)呢?并不是说其他数据库不好, Oracle、MySQL、SQLServer 也都是非常优秀的 DBS,只不过他们设计目标不同,特性不同,所以只有更适用某个应用场景,没有绝对的好坏之分。</p>< p><strong>SQLite的技术特点:<br />< /strong><br /> SQLite 对 SQL92 标准的支持包括索引、限制、触发和查看。SQLite 不支持外键限制,但支持原子的、一致的、独立和持久 (ACID) 的事务(后面会提供有关 ACID 的更多信息)。这意味着事务是原子的,因为它们要么完全执行,要么根本不执行。事务也是一致的,因为在不一致的状态中,该数据库从未被保留。事务还是独立 的,所以,如果在同一时间在同一数据库上有两个执行操作的事务,那么这两个事务是互不干扰的。而且事务是持久性的,所以,该数据库能够在崩溃和断电时幸免 于难,不会丢失数据或损坏。SQLite 通过数据库级上的独占性和共享锁定来实现独立事务处理。这意味着当多个进程和线程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进 程或线程向数据库执行写入操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。<br />< br />< strong>1.创建数据库</strong></p>< p>启动命令行,通过输入如下命令打开Shell模式的CLP:</p>< p>sqlite3 test.db</p>< p>虽然我们提供了数据库名称,但如果该数据库不存在,SQLite实际上就未创建该数据库,直到在数据库内部创建一些内容时,SQLite才创建该数据库。</p>< p><strong>2.创建数据表</strong></p>< p>sqlite&gt; create table Member(id integer primary key, name text, age integer,addr text);</p>< p><strong>注:id为主键,该列默认具备自动增长的属性。</strong></p>< p><strong>3.插入数据</strong></p>< p>sqlite&gt; insert into Member values(0,'wwl',21,'上海');//id=0的列必须不存在,否则会出错</p>< p>或者sqlite&gt; insert into Member(name,age,addr) values('wwl',21,'上海');</p>< p><strong>4.查询数据</strong></p>< p>sqlite&gt;.mode column</p>< p>sqlite&gt;.headers on</p>< p>sqlite&gt; select * from Member;</p>< p><strong>注:select语句前面的两个命令(.headers和.mode)用于改善显示格式,可以不要。</strong></p>< p><strong>5.创建视图和索引</strong></p>< p>sqlite&gt; create view schema as select * from Member;</p>< p>sqlite&gt; create index Member_Idx on Member(id)</p>< p><strong>6.导出数据</strong></p>< p>使用.dump命令可以将数据库对象导出成SQL格式。不带任何参数时,.dump将整个数据库导出为数据库定义语言(DDL)和数据库操作语言(DML)命令,适合重新创建数据库对象和其中的数据。如果提供了参数,Shell将参数解析作为表名或视图,导出任何匹配给定参数的表或视图,那些不匹配的将被忽略。</p>< p>默认情况下.dump 命令的输出定向到屏幕。如:.dump</p>< p>如果要将输出重定向到文件,请使用.dump[filename]命令,此命令将所有的输出重定向到指定的文件中。若要恢复到屏幕的输出,只需要执行.output stdout命令就OK了。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp; sqlite&gt;.output file.sql</p>< p>sqlite&gt;.dump</p>< p>sqlite&gt;.output stdout</p>< p>注:如果file.sql不存在,将在当前工作目录中创建该文件。如果文件存在,它将被覆盖。</p>< p><strong>7.导入数据</strong></p>< p>有两种方法可以导入数据,用哪种方法取决于要导入的文件格式。如果文件由SQL语句构成,可以使用.read命令导入文件中包含的命令。如果文件中包含由逗号或其他分隔符分割的值(comma-swparated values,CSV)组成,可使用.import[file][table]命令,此命令将解析指定的文件并尝试将数据插入到指定的表中。</p>< p>.read命令用来导入.dump命令创建的文件。如果使用前面作为备份文件所导出的file.sql,需要先移除已经存在的数据库对象,然后用下面的方法重新导入:</p>< p>sqlite&gt;drop table Member;</p>< p>sqlite&gt;drop view schema;</p>< p>sqlite&gt;.read file.sql</p>< p><strong>8.备份数据库</strong></p>< p>有两种方式可以完成数据库的备份,具体使用哪一种取决于你希望的备份类型。SQL转储许是移植性最好的备份。</p>< p>生成转储的标准方式是使用CLP.dump命令:sqlite3 test.db .dump& gt;test.sql</p>< p>在Shell中,可以将输出重定向到外部文件,执行命令,恢复到屏幕输出,如:</p>< p>sqlite&gt;.output file.sql</p>< p>sqlite&gt;.dump</p>< p>sqlite&gt;.output stdout</p>< p>sqlite&gt;.exit</p>< p>同样,容易将SQL转储作为CLP的输入流实现数据库导入:</p>< p>sqlite3 test.db& lt;test.sql</p>< p>备份二进制数据库知识比复制文件稍多做一点工作。备份之前需要清理数据库,这样可以释放一些已删除对象不再使用的空间。这数据库文件就会变小,因此二进制的副本也会较小:</p>< p>sqlite3 test.db vacuum</p>< p>cp test.db test.Backup</p>< p><strong>9.其它命令</strong></p>< p>sqlite&gt;select last_insert_rowid();//获得最后插入的自动增长量值</p>< p>sqlite&gt;.tabes//返回所有的表和视图</p>< p>sqlite&gt;.indices Member //查看一个表的索引</p>< p>sqlite&gt;.schema Member //得到一个表或视图的定义(DDL)语句,如果没有提供表名,则返回所有数据库对象(table,view,index,triger)的定义语句</p>http://www.downcc.com/tech/4408.htmlSQL Server2012/12/07 11:35:43<p>SQL Server 2005中可以使用维护计划来为数据库自动备份,减少数据库管理员的工作负担。其使用方法如下:</p>< p>(1)启动【sql server Management Studio】,在【对象资源管理器】窗口里选择【管理】&mdash;&mdash;【维护计划】选项。</p>< p>&nbsp;<img alt="SQL SERVER 2005如何建立自动备份的维护计划1" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113846563.jpg" /></p>< p>2)右击【维护计划】,在弹出的快捷菜单里选择【维护计划向导】选项</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划2" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113846822.jpg" /></p>< p>,弹出如图所示的【维护计划向导】对话框,单击【下一步】按钮</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划3" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113846129.jpg" /></p>< p>3)弹出如图所示【选择目标服务器】对话框,在【名称】文本框里可以输入维护计划的名称;在【说明】文本框里可以输入维护计划的说明文字;【在服务器】文本框里可以输入要使用的服务器名;最后选择正确的身份证信息,单击【下一步】按钮。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划4" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113846653.jpg" /></p>< p>(4)弹出如图所示【选择维护任务】对话框,在该对话框</p>< p>里可以选择多种维护任务:检查数据库完整性、收缩数据库、重新生成或组织索引、更新统计信息、清除历史记录、执行sql</p>< p>Server代理作业、备份数据库等。在本例中选择【备份数据库(完整)】复选框,其他维护任务的设置都大同小异。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划5" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113846654.jpg" /></p>< p>(5)单击【下一步】按钮,弹出如图所示【选择维护任务顺序】对话框,如果有多个维护任务,在此可以通过【上移】和【下移】两个按钮来设置维护任务的顺序,设置完毕后单击【下一步】按钮。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划6" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113846665.jpg" /></p>< p>(6)弹出如图所示【定义任务】对话框,在【数据库】下</p>< p>拉列表框里可以选择要备份的数据库名;在【备份组件】区域里可以选择备份数据库还是备份数据库文件;在【目标】区域可以添加备份文件和备份设备、设置是否将备份数据追加到备份文件里等。设置完毕后单击【下一步】按钮。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划7" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113846835.jpg" /></p>< p>(7)弹出如图所示【选择计划属性】对话框,单击【更改】按钮。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划8" width="707" height="655" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113847300.jpg" /></p>< p>8)弹出如图所示【新建作业计划】对话框,在该对话框里可以设置备份数据库的时间及频率,设置完毕后单击【确定】按钮回到如下所示对话框,再单击【下一步】按钮。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划9" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113847171.jpg" /></p>< p>(9)弹出如图18.24所示【选择报告选项】对话框,在该对话框里可以选择如果管理维护计划报告:可以将其写入文件中,也可以通过电子邮件发送数据库管理员。设置完毕后单击【下一步】按钮。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划10" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113847284.jpg" /></p>< p>10)弹出如图所示【完成向导】对话框,单击【完成】按钮完成维护计划创建操作。</p>< p><img alt="SQL SERVER 2005如何建立自动备份的维护计划11" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-12/2012127113847399.jpg" /></p>< p>11)创建完维护计划后,请确认sql server代理是否启动:在【对象资源管理器】窗口里,右击【sql Server代理】,在弹出的快捷菜单里选择【启动】选项。</p>http://www.downcc.com/tech/4384.htmlOracle2012/11/30 11:18:42<p>前天用户突然反映一个软件总是报ora-00603错误。一开始一位就是个普通的表空间不足之类的,可是一看日志却发现不是那么简单。</p>< p>截取部分日志如下:</p>< p>Thu Nov 05 15:28:53 2009<br /> Errors in file d:\oracle\admin\orcl\udump\orcl_ora_4684.trc:<br /> ORA-00603: ORACLE server session terminated by fatal error<br /> ORA-01114: IO error writing block to file 11 (block # 42773)<br /> ORA-27041: unable to open file<br /> OSD-04002: 无法打开文件<br /> O/S-Error: (OS 32) 另一个程序正在使用此文件,进程无法访问。<br /> ORA-01114: IO error writing block to file 11 (block # 42773)<br /> ORA-27041: unable to open file<br /> OSD-04002: 无法打开文件<br /> O/S-Error: (OS 32) 另一个程序正在使用此文件,进程无法访问。<br /> ORA-01114: IO error writing block to file 11 (block # 42773)<br /> ORA-27041: unable to open file<br /> OSD-04002: 无法打开文件<br /> O/S-Error: (OS 32) 另一个程序正在使用此文件,进程无法访问。</p>< p>里面的File 11就是我的那个程序使用的表空间的一个数据文件。表空间总共有四个数据文件加起来8G左右,总体使用率在70%左右。数据文件号分别为9,11,13,14。出问题的文件号不一定,时间也是随机的,有可能一分钟就会重复上面那段日志,有可能几秒就重复一次。</p>< p>下面是orcl_ora_4684.trc文件的片段:</p>< p>JServer Release 9.2.0.1.0 - Production<br /> Windows 2000 Version 5.2 Service Pack 2, CPU type 586<br /> Instance name: orcl</p>< p>Redo thread mounted by this instance: 1</p>< p>Oracle process number: 30</p>< p>Windows thread id: 4684, image: ORACLE.EXE</p>< p>*** SESSION ID:(39.280) 2009-11-05 15:28:52.000<br /> *** 2009-11-05 15:28:52.000<br /> ksedmp: internal or fatal error<br /> ORA-01114: 将块写入文件 11 时出现 IO 错误 (块 # 42773)<br /> ORA-27041: 无法打开文件<br /> OSD-04002: 无法打开文件<br /> O/S-Error: (OS 32) 另一个程序正在使用此文件,进程无法访问。<br /> ORA-01114: 将块写入文件 11 时出现 IO 错误 (块 # 42773)<br /> ORA-27041: 无法打开文件<br /> OSD-04002: 无法打开文件<br /> O/S-Error: (OS 32) 另一个程序正在使用此文件,进程无法访问。<br /> ORA-01114: 将块写入文件 11 时出现 IO 错误 (块 # 42773)<br /> ORA-27041: 无法打开文件<br /> OSD-04002: 无法打开文件<br /> O/S-Error: (OS 32) 另一个程序正在使用此文件,进程无法访问。<br /> Current SQL statement for this session:<br /> INSERT INTO& quot;VIO_JDCZP&quot; (&quot;XH&quot;,&quot;HPHM&quot;,&quot;HPZL&quot;,&quot;PHOTO1&quot;) VALUES (:1,:2,:3,:4) RETURNING ROWID into :5<br /> ----- Call Stack Trace -----<br /> calling&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp; entry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; argument values in hex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type&nbsp;&nbsp;&nbsp;&nbsp; point&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (? means dubious value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> -------------------- -------- -------------------- ----------------------------<br /> _ksedmp+147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLrel&nbsp; _ksedst+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> ..1.44_7.except.114&nbsp; CALLrel&nbsp; _ksedmp+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br /> +fc&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 /> ..1.1_3.except.34+a&nbsp; CALLrel&nbsp; _ksupop+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br /> f&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 /> _ttcpip+a86&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLreg&nbsp; 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5E 14 8ACE738 0<br /> _opitsk+2f4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLrel&nbsp; _ttcpip+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> _opiino+5fc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLrel&nbsp; _opitsk+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0 A616320 6D1F564 C2 0<br /> _opiodr+4cd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLreg&nbsp; 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3C 4 8ACFBD8<br /> _opidrv+233&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLrel&nbsp; _opiodr+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3C 4 8ACFBD8 0<br /> _sou2o+19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLrel&nbsp; _opidrv+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> _opimai+10a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLrel&nbsp; _sou2o+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> _OracleThreadStart@&nbsp; CALLrel&nbsp; _opimai+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> 4+35c&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 /> 7C824826&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALLreg&nbsp; 00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />& nbsp;从这个日志中看,&ldquo;Current SQL statement for this session:<br /> INSERT INTO& quot;VIO_JDCZP&quot; (&quot;XH&quot;,&quot;HPHM&quot;,&quot;HPZL&quot;,&quot;PHOTO1&quot;) VALUES (:1,:2,:3,:4) RETURNING ROWID into :5&rdquo;这句话说明了是在执行&ldquo;INSERT INTO& quot;VIO_JDCZP&quot; (&quot;XH&quot;,&quot;HPHM&quot;,&quot;HPZL&quot;,&quot;PHOTO1&quot;) VALUES (:1,:2,:3,:4) RETURNING ROWID into :5&rdquo;这句话时出的问题,而且说有的错误都是这样。这句话是将一个图片写入数据库。</p>< p>软件是CS结构的,总共有八个客户端。八个客户端每3秒录入一条数据,数据包括一些文本类的信息还有就是有一张图片,图片大小在80KB至200KB不等。图片是直接存入数据库中的。</p>< p>现在是单个用户录入时不会出现问题,八个用户一起录入时很快就会出现这个问题。查了oracle的参数,没有用户数方面的限制和Session的限制。</p>< p>现在就是觉得奇怪了,ORACLE是大型数据库,不可能会出现这种类似于并发访问的问题的。从日志简单的分析上来看是一个用户数据写入未完成时另一个用户写入数据造成数据文件被占用造成的。程序里试验过,使用事务和不使用事务结果是一样的,基本上可以排除事务将文件给锁住的原因。</p>< p><strong><span style="color: #ff0000">两个解决方法:<br />< /span></strong>1 将数据库升级到9.2.0.1以上,不是一定得用10G之类的,升级成9.2.0.3或更高的,当然越高越好。<br /> 2 图片不写入数据库,存成文件之类的。</p>< p><strong><span style="color: #ff0000">老外的解决问题的方法:<br />< /span></strong><br /> The solution is (as proposed on this thread):<br /> alter system set events '10046 trace name context off';<br /> alter system set timed_statistics=false;<br /> 执行完这两条脚本,问题果然解决。<br /> 注:<br /> timed_staticstices 用于启动或禁止对定时统计信息(如CUP时间、占用时间),以及动态性能表中多种统计信息的收集功能。</p>< p><strong><span style="color: #6600cc">ORA-00603错误解决过程</span></strong></p>< p>今天在查看job运行情况时,发现一同步数据的job执行了很长时间,但也没有出现异常记录。手动执行之后出现ORA-00603错误,解决过程如下:<br />< br /> 1.插入操作报ORA-00603错误,上网搜索说是temp空间不够,但实际用户所用的临时表空间不是系统的temp空间,而自定http://www.downcc.com/tech/4383.htmlMySQL2012/11/30 11:11:28<p>备份mysql一直是很多朋友比较头痛的问题,尤其是按按时间段备份,今天笔者将以图文教程的方法教你每天如何一键备份mysql数据库文件。</p>< p>1、先是建立批处理文件,将以下代码另存为.bat文件,文件名最好为英文。注意下面的路径,以笔者自己的数据库为例,数据库安装在D盘下mysql\mysql下,备份位置在F:\beifen,后面的代码是日期。</p>< ol>< li ><span><span>@echo&nbsp;off& nbsp;</span></span></li>< li><span>&nbsp;</span></li>< li ><span>color&nbsp;0D& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>MODE&nbsp;con:&nbsp;</span><span >COLS</span><span>=</span><span >71</span><span>&nbsp;</span><span >LINES</span><span>=</span><span >25</span><span>&nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>title&nbsp;mysql数据库自动备份脚本(任务计划)--脚本作者:http://www.***.com& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>set&nbsp;</span><span >sou_dir</span><span>=</span><span >&quot;D:\mysql\Mysql\data&quot;</span><span>&nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>set&nbsp;</span><span >obj_dir</span><span>=</span><span >F</span><span>:\beifen\%date:~0,10%& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>net&nbsp;stop&nbsp;mysql& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>md&nbsp;%obj_dir%& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>xcopy&nbsp;/e&nbsp;/y&nbsp;%sou_dir%&nbsp;%obj_dir%& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>net&nbsp;start&nbsp;mysql& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>@echo&nbsp;off&amp;setlocal&nbsp;enabledelayedexpansion& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>call:D,30& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>echo.&nbsp;30天前日期为:%D%& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>echo.&nbsp;删除30天以前备份......& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>if&nbsp;exist&nbsp;F:\beifen\%D%&nbsp;rd&nbsp;/s&nbsp;/q&nbsp;F:\beifen\%D%& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>echo&nbsp;自动备份完成,程序将自动退出......& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>ping&nbsp;-n&nbsp;2&nbsp;127.0.0</span><span >&gt;</span><span>nul& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>exit& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>:D& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>for&nbsp;/f&nbsp;&quot;</span><span >tokens</span><span>=</span><span >1</span><span>-3&nbsp;</span><span >delims</span><span>=-:/&nbsp;&quot;&nbsp;%%a&nbsp;in&nbsp;(&quot;%date%&quot;)&nbsp;do&nbsp;(& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>set&nbsp;</span><span >Y</span><span>=%%a&amp;set&nbsp;</span><span >M</span><span>=%%b&amp;set&nbsp;</span><span >D</span><span>=%%c& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>if&nbsp;&quot;!M:~0,1!&quot;==&quot;0&quot;&nbsp;set&nbsp;</span><span >M</span><span>=!M:~1!& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>if&nbsp;&quot;!D:~0,1!&quot;==&quot;0&quot;&nbsp;set&nbsp;</span><span >D</span><span>=!D:~1!& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>)& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>set/a&nbsp;</span><span >D-</span><span>=%1& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>if&nbsp;%D%&nbsp;gtr&nbsp;0&nbsp;goto:Y& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>:M& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>set/a&nbsp;</span><span >M-</span><span>=</span><span >1</span><span>&nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>if&nbsp;!M!==0&nbsp;set/a&nbsp;</span><span >Y-</span><span>=</span><span >1</span><span>,</span><span >M</span><span>=</span><span >12</span><span>&nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>set/a&nbsp;&quot;</span><span >T</span><span>=^!(M-2)&quot;,&quot;</span><span >R</span><span>=(^!(Y%%4)&amp;^!^!(Y%%100))|^!(Y%%400)&quot;,&quot;</span><span >C</span><span>=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)&quot;,&quot;</span><span >D</span><span>=</span><span >T</span><span>*(28+R)+C*30+(^!T&amp;^!C)& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>*31+D&quot;& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>if&nbsp;%D%&nbsp;leq&nbsp;0&nbsp;goto:M& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>:Y& nbsp;</span></li>< li><span>&nbsp;</span></li>< li ><span>set&nbsp;</span><span >M</span><span>=</span><span >0</span><span>%M%&amp;set&nbsp;</span><span >D</span><span>=</span><span >0</span><span>%D%&amp;set&nbsp;</span><span >D</span><span>=%Y%-!M:~-2!-!D:~-2!& nbsp;</span></li>< li><span>&nbsp;</span></li>< /ol>< p>2、建立一个计划任务,可以每天或三天,甚至更长时间备份,备份时mysql自动停止,备份完成后,mysql会自动启动。打开控制面板---双击任务计划,按照提示一步步选择,如下图所示:</p>< p style="text-align: center"><img border="0" alt="3步教你一键自动备份mysql数据库的方法_绿色资源网" width="399" height="413" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121130111239405.JPG" /></p>< p>3、我们可以根据需要设定每天、每周或其他日期定期备份mysql数据库。笔者实验过,完全满足我们日常mysql数据库备份工作需要。</p>< p style="text-align: center"><img border="0" alt="3步教你一键自动备份mysql数据库的方法_绿色资源网" width="480" height="211" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121130111239611.JPG" /></p>http://www.downcc.com/tech/4358.htmlMySQL2012/11/28 12:00:34<p>my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数。</p>< p>&nbsp;& nbsp;my.ini分为两块:Client Section和Server Section。<br />& nbsp;& nbsp;Client Section用来配置MySQL客户端参数。<br />& nbsp;& nbsp;要查看配置参数可以用下面的命令:</p>< pre> show variables like '%innodb%'; # 查看innodb相关配置参数 show status like '%innodb%'; # 查看innodb相关的运行时参数(比如当前正在打开的表的数量,当前已经打开的表的数量) show global status like 'open%tables'; # 查看全局的运行时参数,加上global是对当前mysql服务器中运行的所有数据库实例进行统计。不加global则只对当前数据库实例进行统计。</pre>< p><strong>1、Client Section</strong><br />& nbsp;& nbsp; [client]<br />& nbsp;& nbsp; port = 3306 # 设置mysql客户端连接服务端时默认使用的端口<br />& nbsp;& nbsp; [mysql]<br />& nbsp;& nbsp; default-character-set=utf8 # 设置mysql客户端默认字符集</p>< p><strong>2、Server Section</strong></p>< p>[mysqld]<br /> port=3306 # mysql服务端默认监听(listen on)的TCP/IP端口<br />< br /> basedir=&quot;C:/Program Files/MySQL/MySQL Server 5.5/&quot; # 基准路径,其他路径都相对于这个路径<br />< br /> datadir=&quot;C:/Program Files/MySQL/MySQL Server 5.5/Data&quot; # mysql数据库文件所在目录<br />< br /> character-set-server=latin1 # 服务端使用的字符集默认为8比特编码的latin1字符集<br />< br /> default-storage-engine=INNODB # 创建新表时将使用的默认存储引擎<br />< br /> sql-mode=&quot;STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&quot; # SQL模式为strict模式<br />< br /> max_connections=100 # mysql服务器支持的最大并发连接数(用户数)。但总会预留其中的一个连接给管理员使用超级权限登录,即使连接数目达到最大限制。如果设置得过小而用户比较多,会经常出现&ldquo;Too many connections&rdquo;错误。<br />< br /> query_cache_size=0 # 查询缓存大小,用于缓存SELECT查询结果。如果有许多返回相同查询结果的SELECT查询,并且很少改变表,可以设置query_cache_size大于0,可以极大改善查询效率。而如果表数据频繁变化,就不要使用这个,会适得其反<br />< br /> table_cache=256 # 这个参数在5.1.3之后的版本中叫做table_open_cache,用于设置table高速缓存的数量。由于每个客户端连接都会至少访问一个表,因此此参数的值与&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max_connections有关。当某一连接访问一个表时,MySQL会检查当前已缓存表的数量。如果该表已经在缓存中打开,则会直接访问缓存中的表已加快查询速度;如果该表未被缓存,则会将当前的表添加进缓存并进行查询。在执行缓存操作之前,table_cache用于限制缓存表的最大数目:如果当前已经缓存的表未达到table_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前的缓存。<br />< br /> tmp_table_size=34M # 内存中的每个临时表允许的最大大小。如果临时表大小超过该值,临时表将自动转为基于磁盘的表(Disk Based Table)。<br />< br /> thread_cache_size=8 # 缓存的最大线程数。当客户端连接断开时,如果客户端总连接数小于该值,则处理客户端任务的线程放回缓存。在高并发情况下,如果该值设置得太小,就会有很多线程频繁创建,线程创建的开销会变大,查询效率也会下降。一般来说如果在应用端有良好的多线程处理,这个参数对性能不会有太大的提高。</p>< p><strong># MyISAM相关参数<br />< /strong>myisam_max_sort_file_size=100G # mysql重建索引时允许使用的临时文件最大大小<br />< br /> myisam_sort_buffer_size=68M<br />< br /> key_buffer_size=54M # Key Buffer大小,用于缓存MyISAM表的索引块。决定数据库索引处理的速度(尤其是索引读)<br />< br /> read_buffer_size=64K # 用于对MyISAM表全表扫描时使用的缓冲区大小。针对每个线程进行分配(前提是进行了全表扫描)。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。<br />< br /> read_rnd_buffer_size=256K<br />< br /> sort_buffer_size=256K # connection级参数(为每个线程配置),500个线程将消耗500*256K的sort_buffer_size。</p>< p><strong># InnoDB相关参数<br />< /strong>innodb_additional_mem_pool_size=3M # InnoDB用于存储元数据信息的内存池大小,一般不需修改<br />< br /> innodb_flush_log_at_trx_commit =1 # 事务相关参数,如果值为1,则InnoDB在每次commit都会将事务日志写入磁盘(磁盘IO消耗较大),这样保证了完全的ACID特性。而如果设置为0,则表示事务日志写入内存log和内存log写入磁盘的频率都为1次/秒。如果设为2则表示事务日志在每次commit都写入内存log,但内存log写入磁盘的频率为1次/秒。<br />< br /> innodb_log_buffer_size=2M # InnoDB日志数据缓冲大小,如果缓冲满了,就会将缓冲中的日志数据写入磁盘(flush)。由于一般至少都1秒钟会写一次磁盘,所以没必要设置过大,即使是长事务。<br />< br /> innodb_buffer_pool_size=105M # InnoDB使用缓冲池来缓存索引和行数据。该值设置的越大,则磁盘IO越少。一般将该值设为物理内存的80%。<br />< br /> innodb_log_file_size=53M # 每一个InnoDB事务日志的大小。一般设为innodb_buffer_pool_size的25%到100%<br />< br /> innodb_thread_concurrency=9 # InnoDB内核最大并发线程数。</p>< p>在Apache, PHP, MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分。对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接影响到论坛的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数。 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。</p>< p><strong>一、服务器硬件对MySQL性能的影响< br />< /strong>①磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访问量在100万PV以上的Discuz!论坛,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案: 使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快。< br /> ②CPU 对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:可以使用两颗Intel Xeon 3.6GHz的CPU,现在我较推荐用4U的服务器来专门做数据库服务器,不仅仅是针对于mysql。< br /> ③物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到了高端服务器基本上内存都超过了16G。< br />< br /> 二、MySQL自身因素当解决了上述服务器硬件制约因素后,让我们看看MySQL自身的优化是如何操作的。对MySQL自身的优化主要是对其配置文件my.cnf中的各项参数进行优化调整。下面我们介绍一些对性能影响较大的参数。 由于my.cnf文件的优化设置是与服务器硬件配置息息相关的,因而我们指定一个假想的服务器硬件环境:CPU: 2颗Intel Xeon 2.4GHz 内存: 4GB DDR 硬盘: SCSI 73GB(很常见的2U服务器)。< br />< br /> 下面,我们根据以上硬件配置结合一份已经优化好的<strong>my.cnf进行说明:</strong>< br /> #vim /etc/my.cnf以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,因而姑且忽略。< br /> [mysqld]< br /> port = 3306< br /> serverid = 1< br /> socket = /tmp/mysql.sock< br /> skip-locking< br /> #避免MySQL的外部锁定,减少出错几率增强稳定性。< br /> skip-name-resolve< br /> #禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!< br /> back_log = 384< br /> #back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。< br /> key_buffer_size = 256M< br /> #key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低!<br /> max_allowed_packet = 4M< br /> thread_stack = 256K< br /> table_cache = 128K< br /> sort_buffer_size = 6M< br /> #查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占,如果有100个连接,那么实际分配的总共排序缓冲区大小为100& times; 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设http://www.downcc.com/tech/4349.htmlMySQL2012/11/24 20:07:28<p>wdcp管理系统对mysql的root用户密码进行了存储,以便于创建和管理数据库,同时为考虑安全,在第一次在后台修改密码后,就进行了加密存储的。也就是说初始安装好,是明文存储,后台修改后就是密文存储.</p>< p>文件路径及内容,如下<br /> cat /www/web/wdcp/data/dbr.inc.php</p>< pre><ol ><li ><span><span >&lt;?</span><span>&nbsp;</span></span></li><li><span>$</span><span >sqlrootpw</span><span>=</span><span >'downcc.com'</span><span>;& nbsp;</span></li><li ><span>$</span><span >sqlrootpw_en</span><span>=</span><span >'0'</span><span>;& nbsp;</span></li><li><span >?&gt;</span><span>&nbsp;</span></li></ol></pre>< p>$sqlrootpw= 表示数据库密码</p>< p>$sqlrootpw_en= 数据库密码是否加过密存储.0时未加密,1时表示加密</p>< p>初始安装时是如上面所示显示明文,但修改后,就保存的是密文</p>< p>如果要修改这个密码,就如上所示用明文,0</p>< p>然后,后台修改后,就自动变成密文,1</p>http://www.downcc.com/tech/4347.htmlSQL Server2012/11/24 00:18:44<p>1.直接方法,将需要的查询的数据赋值到excel中。相应调整,然后再赋值到目标表中(对于数据量不大的情况下较快)</p>< p>2.最好两数据库拥有相同的登录名和密码不然比较麻烦insert&nbsp;&nbsp; into&nbsp;&nbsp; 目标数据库.dbo.目标表名(字段1...字段n)&nbsp;&nbsp; select&nbsp;&nbsp; 段1...字段n&nbsp;&nbsp; from&nbsp;&nbsp; 源数据库.dbo.源表名</p>< p>或&nbsp;</p>< p>select&nbsp;&nbsp; 段1...字段n&nbsp;&nbsp; into&nbsp;&nbsp; 目标数据库.dbo.目标表名&nbsp;&nbsp; from&nbsp;&nbsp; 源数据库.dbo.源表名</p>< p>或</p>< p>select * into MyFirst.dbo.tt from JMDA.dbo.T_GRDA</p>< p>3.这样的插入注意表字段的长度和约束条件,若原表中字段长,就得将目标表中的字段相应加长</p>< p>SQL SERVER 2000&nbsp;&nbsp; 可以用DTS 完成数据库数据之间的导入导出(DTS:http://wenku.baidu.com/view/fb25713e87c24028915fc3a0.html&nbsp;&nbsp;&nbsp;关于DTS的学习)</p>< p>SQL SERVER 2005&nbsp;&nbsp;&nbsp; 可以用SSIS完成数据库数据之间的导入导出(SSIS是Microsoft SQL Server 2005 Integration Services的简称,是生成高性能数据集成解决方案(包括数据仓库的提取、转换和加载 (ETL) 包)的平台。)</p>http://www.downcc.com/tech/4344.htmlMySQL2012/11/23 15:36:07<p>1、打开php.ini。找到 upload_max_filesize 、 memory_limit 、 post_max_size 这三个参数!<br /> (在默认的情况下,php只允许最大的上传数据为2M,也就是2048KB,而极限的最大使用内存memory_limit也仅为128M,Post的最大也为2M)</p>< p>2、按您的服务器的实际性能配置进行如下改动:(注意:以下是按我的服务器性能有硬件配置进行的更改..)</p>< p>upload_max_filesize = 8M (上传最大极限设定为8M,这个应该足够一般的文件WEB上传了)<br /> memory_limit = 512M (因为服务器的内存为2GB,所以这里加到512M不过份吧,呵)<br /> post_max_size = 8M (Post数据最大也设置为8MB,这个跟upload_max一样)</p>< p>3、改完之后,我再重新执行导入命令后:<br /> Import has been successfully finished, 399 queries executed.<br /> (显示导入成功,有多少个请求处理成功&hellip;)</p>< p>(备注:改完后当你在到phpMyadmin的导入命令行时,虽然(有时候可能会仍然显示为:最大限制:2048KB/Max: 2,048KiB);但实际上你已经可以导入不超过8M的数据库gzip导出的备份文件了! 另,改完php.ini后,别忘了重启一下web服务或者是服务器哟!重启后升效!)</p>< p>就此记录,希望对遇到同样问题的绿色资源网网友朋友有所帮助~</p>http://www.downcc.com/tech/4343.htmlOracle2012/11/23 13:43:07<p>在运行窗口下输入cmd进入命令模式下</p>< p>输入:emctl start dbconsole</p>< p><strong>提示报错,ORACLE_SID没有定义</strong></p>< p>再次输入:</p>< p>set ORACLE_SID=ORCL&nbsp; (ORCL是我的实例名,也是服务名)</p>< p>没有问题,接着继续输入:</p>< p>emctl start dbconsole</p>< p>提示:</p>< p>OC4J Configuration issue.D:oracleproduct10.2.0db_1/oc4j/j2ee/OC4J_DBConsole_192.168.1.100_orcl not found.</p>< p><strong>解决办法:</strong></p>< p>进入D:\oracle\product\10.2.0\db_1文件夹,找到127.0.0.1_orcl文件夹复制一份重命名为OC4J_DBConsole_192.168.1.100_orcl,粘贴到当前文件下内;再D:\oracle\product\10.2.0\db_1\oc4j\j2ee文件夹内,找到D:\oracle\product\10.2.0\db_1\oc4j\j2ee\OC4J_DBConsole_127.0.0.1_orcl文件夹,复制一份重命名为OC4J_DBConsole_192.168.1.100_orcl。</p>< p>最后重新启动dbconsole,服务启动成功!</p>http://www.downcc.com/tech/4341.htmlMySQL2012/11/22 17:58:19<p>service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下:</p>< p>[root@downcc.com ~]# service mysql start<br /> mysql: unrecognized service<br /> [root@downcc.com ~]# service mysql restart<br /> mysql: unrecognized service<br />< br /> [root@downcc.com ~]# rpm -q mysql 查询发现mysql已经正常安装<br /> mysql-5.1.52-jason.1</p>< p>[root@downcc.com ~]# /etc/rc.d/init.d/mysqld start 直接启动没问题<br /> Starting mysqld: [ OK ]</p>< p>[root@downcc.com ~]# ls /etc/rc.d/init.d/mysqld -l<br /> -rwxr-xr-x 1 root root 5509 Dec 18 02:31 /etc/rc.d/init.d/mysqld</p>< p>[root@downcc.com ~]# chkconfig mysqld on 设置mysql开机启动</p>< p>[root@downcc.com ~]# chmod 755 /etc/rc.d/init.d/mysqld 修改mysqld执行权限</p>< p>[root@downcc.com ~]# service mysqld start 搞定</p>< p>Starting mysqld: [ OK ]<br /> [root@downcc.com ~]# service mysqld start<br /> Starting mysqld: [ OK ]<br /> [root@downcc.com ~]# service mysqld status<br /> mysqld (pid 9487) is running...</p>http://www.downcc.com/tech/4340.htmlMySQL2012/11/22 17:55:40<p>因为硬盘满了,mysql启动不起来了。</p>< p>登录上去看了一下,发现原因。</p>< p>删除mysql的日志文件,重启mysql发现错误:Starting MySQL.Manager of pid-file quit without updating file.[FAILED]</p>< p>网上有不少这个原因的解释,但是都不是我想说的。我要说的原因其实很白痴:data/mysql-bin.index没有删除,data/mysql-bin.index是存放日志文件索引的文件,只删除了日志文件而没有对日志的索引文件做处理显然是不行的。</p>< p>删除data/mysql-bin.index文件,再service mysqld start就可以了。</p>< p>好久没有写日志了,我还没有忘记这里。</p>http://www.downcc.com/tech/4339.htmlMySQL2012/11/22 17:44:10<p>Can&rdquo;t init tc log Aborting | mysql事务日志导致启动失败问题,killall&nbsp; mysql进程后,mysql无法启动问题总汇;</p>< p><strong>问题1:</strong></p>< p>将mysql所有进程kill掉后,重启,无法启动,报错:</p>< p>110303 14:01:45 InnoDB: Started; log sequence number 0 138710263</p>< p>/usr/local/mysql/bin/mysqld: File& lsquo;./mysql-bin.000041&prime; not found (Errcode: 13)</p>< p>110303 14:01:45 [ERROR] Failed to open log (file& lsquo;./mysql-bin.000041&prime;, errno 13)</p>< p>110303 14:01:45 [ERROR] Could not open log file</p>< p>110303 14:01:45 [ERROR] Can&rsquo;t init tc log</p>< p>110303 14:01:45 [ERROR] Aborting</p>< p>在mysql/data/目录下找到mysql-bin.000041文件,删掉,重启,仍不行,报错:</p>< p>110303 14:04:07 InnoDB: Started; log sequence number 0 138710263</p>< p>/usr/local/mysql/bin/mysqld: File& lsquo;./mysql-bin.000041&prime; not found (Errcode: 2)</p>< p>110303 14:04:07 [ERROR] Failed to open log (file& lsquo;./mysql-bin.000041&prime;, errno 2)</p>< p>110303 14:04:07 [ERROR] Could not open log file</p>< p>110303 14:04:07 [ERROR] Can&rsquo;t init tc log</p>< p>110303 14:04:07 [ERROR] Aborting</p>< p>touch之,修改权限,重启,也不行,报错:</p>< p>110303 14:05:41 InnoDB: Started; log sequence number 0 138710263</p>< p>110303 14:05:41 [ERROR] I/O error reading the header from the binary log, errno=-1, io cache code=0</p>< p>110303 14:05:41 [ERROR] I/O error reading the header from the binary log</p>< p>110303 14:05:41 [ERROR] Can&rsquo;t init tc log</p>< p>110303 14:05:41 [ERROR] Aborting</p>< p>最后解决办法:</p>< p>将mysql/data/mysql-bin.index文件删除,重启mysql,会自动生成新的mysql-bin.index文件,启动成功</p>< p><strong>问题2:</strong></p>< p>启动后,报错:</p>< p>InnoDB: Started; log sequence number 0 1004308157</p>< p>110303 14:15:01 [Note] Recovering after a crash using mysql-bin</p>< p>110303 14:15:01 [ERROR] Error in Log_event::read_log_event():& lsquo;read error&rsquo;, data_len: 169, event_type: 2</p>< p>110303 14:15:01 [Note] Starting crash recovery&hellip;</p>< p>110303 14:15:01 [Note] Crash recovery finished.</p>< p>/opt/31306/mysql/bin/mysqld: Disk is full writing& lsquo;./mysql-bin.~rec~&rsquo; (Errcode: 28). Waiting for someone to free space&hellip; (Expect up to 60 secs delay for server to continue after freeing disk space)</p>< p>这是由于mysql-bin日志过多,进入mysql/data/目录,果断删除所有mysql-bin.*文件,重启,启动成功</p>< p><strong>问题3:</strong></p>< p>启动后,报错:</p>< p>110303 14:21:37 InnoDB: Started; log sequence number 0 487312871</p>< p>110303 14:21:37 [ERROR] Can&rsquo;t start server: Bind on TCP/IP port: Address already in use</p>< p>110303 14:21:37 [ERROR] Do you already have another mysqld server running on port: 43306 ?</p>< p>110303 14:21:37 [ERROR] Aborting</p>< p>按提示,应该是43306端口占用,但是查看后并未发现该端口被占用,不深究,果断将其my.cnf文件中的port修改成一个新的端口,重启,启动成功。关闭后,重新将my.cnf中的port改回为43306,重启,又可以成功启动了。</p>http://www.downcc.com/tech/4338.htmlSQL Server2012/11/22 16:33:35<p>今天再还原一个MSSQL2005数据库的时候经常出现了3154的错误<br />< br /> 错误如下图:</p>< p><img border="0" alt="数据库在mssql2005 版本上 还原出现3154错误的解决方法1" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121122163459358.jpg" /></p>< p><strong>摸索了下解决方法如下:<br />< /strong>不要在数据库名字上点右键选择还原等等,<br /> 而要是在根目录&ldquo;数据库&rdquo;三个字上点右键选择还原,然后在选择数据库,<br /> 问题便可以解决哈;<br /> 如果以上方法不行请使用以下方式:</p>< p><strong>解决方法2:写sql语句处理:</strong></p>< p>RESTORE DATABASE [databaseName]&nbsp;< br /> FROM&nbsp; DISK = N'X:\数据库备份\自己数据库需要恢复的备份.bak' with replace,&nbsp;< br /> NOUNLOAD,&nbsp; STATS = 10 GO</p>< p><img border="0" alt="数据库在mssql2005 版本上 还原出现3154错误的解决方法2" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121122163459679.jpg" /></p>http://www.downcc.com/tech/4336.htmlSQL Server2012/11/22 15:13:44<p>Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除。</p>< p>删除 对于 用户&ldquo;downcc&rdquo;失败。 (Microsoft.SqlServer.Smo)</p>< p>其他信息:</p>< p>执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)</p>< p><strong>解决方法一</strong></p>< p>先删除此用户对应的架构,然后在删除对应的用户</p>< p>步骤</p>< p>1。SQL SERVER MANAGEMENT STUDIO -&gt; 数据库 -&gt; 安全性 -&gt; 构架,先删除对应的构架</p>< p>2。SQL SERVER MANAGEMENT STUDIO -&gt; 数据库 -&gt; 安全性 -&gt; 用户,删除对应的用户</p>< p><strong>解决方法二</strong></p>< p>&ndash;执行如下SQL语句</p>< p>ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo;</p>< p>&ndash;然后手动删除就可以了。</p>http://www.downcc.com/tech/4334.htmlMySQL2012/11/22 10:24:02<p>网上有很多关于window下Mysql自动备份的方法,其实不乏一些不好的地方和问题,现总结出一个最好的方法供大家参考:</p>< p>新建一个记事本,然后重命名为: mysql_backup.bat 然后单击右键选择编辑,把下面的部分粘贴进来然后修改保存,比如我要备份downcc这个数据库,脚本如下:</p>< p>net stop mysql</p>< p>xcopy D:\mysql\data\downcc\*.* D:\db_backup\%date:~0,10%\ /y</p>< p>net start mysql</p>< p>上面的D盘和db_backup等目录大家都可以自行修改,脚本的意思就是复制downcc 这个目录到D盘的db_backup这个目录里面的以当天为名称的目录里面,比如: d:\backup\2012-05-23\ ,请大家注意,网上很多人转载的说以%date:~4,10%这个来作为当天目录是错误的。</p>< p>然后新建一个计划任务,把mysql_backup.bat加入进去,设置为每天凌晨几点运行下就行了,此部分不再详述,基本上我们网盾科技的虚拟主机服务器都是用这种方法备份大容量mysql数据库都屡试不爽,基本没有出现什么问题。</p>< p>还有一个方法是通过mysql的mysqldump把数据库备份成.sql文件,这种方法的弊端就是数据库小的话没问题,但是数据库稍微大点,比如1g以上的时候,就特别慢,而且超级占用内存,速度绝对比复制文件慢,而且在备份的时候数据库照样是无法访问的,这样子还不如用上面我给的那种方式。</p>< p>以上方法仅对有独立服务器控制权或者vps的有效,虚拟主机就只能用phpmyadmin或者CMS自带的备份工具了。</p>http://www.downcc.com/tech/4325.htmlSQL Server2012/11/12 22:53:12<p>一个客户公司的数据库出问题了!客户公司是一个原材料生成企业,工厂昼夜不停的生产,核心表数据已有千万之多!可是双十一和它根本就没有任何关系,凌晨两点多数据库就挂了,导致工厂车间所有无法生产!</p>< p><strong>(一) 问题描述<br />< /strong>数据库突然在凌晨两点多就停止了服务,然后就不能重启了!每次去启动之后又自动停止服务了。<br />< br /> 打开日志查看:<br />< span style="color: #ff0000">SQL Server无法生成FRunCM线程</span>,请查看SQL Server日志和Windows日志:<span style="color: #660000">TDSSNIClient初始化失败,出现错误X70e,状态码0X1<br />< /span><br />< strong>(二)&nbsp;问题截图</strong></p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121112225538265.jpg" />&nbsp;<img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121112225543246.jpg" /></p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121112225543582.jpg" />&nbsp;</p>< p><strong>(三)&nbsp; 问题查找<br />< /strong>根据Windows日志查找问题,发现问题可能是在网络上,然后上网搜索有相关的资料说明,大抵都是一样的,不过能够解决问题就好!</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-11/20121112225543993.jpg" />&nbsp;</p>< p>根据网络上的资料提示,我查看SQL Server网络配置,貌似就是因为此处的IP配置有问题,很是奇怪的都是内网操作,而且之前运行的很好的突然就出现这个问题了。在这里我更好了IP2的IP地址,而图上的IP地址是不能访问的。如果图上IP就是之前设置的为嘛一直可以运行,而现在就不可以了。<br />< br />& nbsp;现在数据库问题是解决了,<span style="color: #6600cc">但是为了从根本上了解原因,求数据库比较精通的同学,解释</span>:<br />< br />< span style="color: #006600">(1)&nbsp;&nbsp;为什么会突然出现如上述所描述的问题,数据库服务不能重启<br />< /span><span style="color: #000099">(2) TCP/IP 这个对话框中如此之多的IP设置为干嘛用的!</span></p>http://www.downcc.com/tech/4299.htmlOracle2012/11/01 11:43:50<p><strong>一、安装</strong></p>< p>1、去Oracle官网下载XE版的安装包(貌似Windows只有32位的,Linux只有6位的),解压。</p>< p>2、双击Setup.exe,启动安装程序,在选在路径那里不要点下一步,否则会报&ldquo;... ...Reg_XE.&nbsp;该文件似乎不存在。&rdquo;的错误!</p>< p>3、进入以下目录&ldquo;C:\Users\&lt;your user name&gt;\AppData\Local\Temp{60712028-B7B0-4EC3-9C28-663111EC954A}&rdquo;,找到文件&ldquo;OracleMTSRecoveryService.reg&rdquo;,并复制一份重命名为&ldquo;KEY_XE.reg&rdquo;。</p>< p>4、回到安装程序,点击下一步继续安装即可。</p>< p><strong>二、修改Oracle XE的字符集</strong></p>< p>1、--问题:在字符集AL32UTF8中,一个汉字占用3个字符</p>< pre> SQL&gt; select lengthb('田') from dual; LENGTHB('田') ------------- 3</pre>< p>如果不修改字符集,那你就痛苦吧,不过还好,我这里有个方法还是蛮简单的。</p>< p>过程也相当简单,首先启动命令行(开始-》运行-》CMD)。然后执行下面的命令。</p>< p>1.)命令行窗口下运行:sqlplus.exe /nolog</p>< p>2.)然后再sqlplus里面执行如下命令</p>< pre> connect sys_name/sys_password as sysdba --根据自己的实际情况登入 shutdown immediate; startup mount alter system enable restricted session; alter system set JOB_QUEUE_PROCESSES=0; alter system set AQ_TM_PROCESSES=0; alter database open; alter database character set internal_use ZHS16GBK; shutdown immediate Startup</pre>< p>即可完成字符集的转换,如下</p>< pre> SQL&gt; select lengthb('田') from dual; LENGTHB('田') ------------- 2</pre>< p>当然这时你的APEX也就同时变成了乱码,解决办法有3个:</p>< p>一个是不用APEX;</p>< p>一个是把IE的的语言设置为英文(或者http://127.0.0.1:8080/apex/apex_admin 即可以在界面下方的&ldquo;English&rdquo;和&ldquo;中文(简体)&rdquo;之间进行语言切换了)</p>< p>最后一个就是升级APEX,并安装中文包(推荐)下面将对这种方法做介绍,仔细听好了啊;)</p>< p>2、安装<strong> APEX 4.0.2</strong></p>< p>1.)将 apex_4.0.2.zip 中的 apex 文件夹解包到 D/OracleXE/ 下;</p>< p>2.)打开 cmd 控制台窗口,切换当前路径到 E:/OracleXE/apex/ 下,启动 SQL*PLUS,以 SYSDBA 角色登录数据库:</p>< pre> D:/OracleXE/apex&gt;sqlplus /nolog SQL&gt; CONNECT SYS as SYSDBA Enter password:& lt;SYS密码&gt;</pre>< p>3.)执行安装脚本 apexins.sql:</p>< pre> SQL&gt;@apexins SYSAUX SYSAUX TEMP /i/</pre>< p>4.)安装完成后,执行 apxldimg.asl 脚本安装 APEX 中需要用到的图片、CSS 和 JS 脚本:</p>< pre> SQL&gt;@apxldimg D:/OracleXE/</pre>< p>这里需要注意的是:传递给 apxldimg.sql 脚本的参数是 APEX 主目录的父目录(例如:你的 APEX 安装路径是 e:/oraclexe/apex,那么这里路径参数就是 e:/oraclexe),这一点可以通过查看 apxldimg.sql 脚本得到验证,这也是网上很多人说安装图片时出现路径错误的原因所在。</p>< p>5.)下面执行 apxchpwd.sql 脚本并根据提示设定 APEX 的 Admin 密码:</p>< pre> SQL&gt;@apxchpwd</pre>< p>6.)安装完成后通过 http://127.0.0.1:8080/apex/apex_admin 能进入 APEX 管理后台,即表示安装成功。</p>< p>3、安装中文语言包<br /> 1.)打开 cmd 控制台窗口设置环境变量&nbsp; NLS_LANG:</p>< pre> set NLS_LANG=American_America.AL32UTF8</pre>< p>注意:如果前面有打开过 SQL*PLUS 窗口,一定记得要先关闭它再设置环境变量 NLS_LANG。</p>< p>2.)切换到 E:/apex_4.0.2/apex/builder/zh-cn 路径下,启动 SQL*PLUS 并以 SYSDBA 角色执行下列语句:</p>< pre> SQL&gt;ALTER SESSION SET CURRENT_SCHEMA = APEX_040000; SQL&gt;@load_zh-cn.sql</pre>< p>等待安装完成后,重新进入 http://127.0.0.1:8080/apex/apex_admin 即可以在界面下方的&ldquo;English&rdquo;和&ldquo;中文(简体)&rdquo;之间进行语言切换了。</p>< p><strong>额外补充:</strong></p>< p>解决不能通过网络及主机名访问 APEX 的问题:启动 SQL*PLUS 并以 SYSDBA 角色登录数据库,执行下列语句:</p>< pre> SQL&gt;execute dbms_xdb.setListenerLocalAccess(l_access =&gt; FALSE);</pre>< p>4、设置后台运行参数</p>< pre> alter system set JOB_QUEUE_PROCESSES=2;</pre>< p>注释:JOB_QUEUE_PROCESSES=0的话,之后的Job没有Job调度进程,是不会run的。</p>< p>三、修改Oracle XE Listener 占用的1521、8080端口<br /> 安装OracleXE时,有这么一段提示</p>< pre> 1.Destination Folder: D:\oraclexe\ 2.Port for 'Oracle Database Listener': 1521 3.Port for 'Oracle Services for Microsoft Transaction Server': 2030 4.Port for HTTP Listener: 8080</pre>< p>可以看出,默认web控制台服务端口是8080,安装时又不能更改。安装之后和Tomcat, Jboss等服务器冲突,所以会遇到很多问题。在XE的安装文件中有这样一段SQL,可以用来更改http的端口。<br /> 在D:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\postDBCreation.sql文件里。有这样一段Sql代码:</p>< pre> 1.begin 2. dbms_xdb.sethttpport('8080'); 3. dbms_xdb.setftpport('0'); 4.end; 5./< /pre>< p>再看看日志文件D:\oraclexe\app\oracle\product\10.2.0\server\config\log\postDBCreation.log里,有这样一段记录:</p>< pre> 1.SQL&gt; begin 2. dbms_xdb.sethttpport('8080'); 3. dbms_xdb.setftpport('0'); 4. end; 5. /PL/SQL procedure successfully completed.< /pre>< p>可以看出Oracle XE就是用它来设置http端口的,打开SQL*Plus控制台。用sys或者system登陆。然后运行:</p>< pre> 1.begin 2. dbms_xdb.sethttpport('8088'); 3. dbms_xdb.setftpport('0'); 4.end; 5./</pre>< p>这样就把端口设置为8081了。</p>http://www.downcc.com/tech/4285.htmlOracle2012/10/22 11:33:39<p>一、在Windows系统下, 请先点击&ldquo;开始&rdquo;,然后点&ldquo;运行&rdquo;,输入cmd并点击&ldquo;确定&rdquo;,打开命令行窗口输入以下命令:</p>< p>  sqlplus&nbsp;&nbsp; /nolog</p>< p>  回车后,将出现提示符 SQL&gt;</p>< p>  这时输入<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn&nbsp;&nbsp; /&nbsp;&nbsp; as&nbsp;&nbsp; sysdba</p>< p>  一般即可登录,如果失败的话,可以试一下用conn&nbsp;&nbsp;&nbsp; sys/sys用户的密码&nbsp;&nbsp; as sysdba来重试一下</p>< p>  接下来,我们看看您当前的数据库文件一般都是放在哪里的:</p>< p>  select&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp; from&nbsp;&nbsp;&nbsp; v$datafile;</p>< p>  windows下可能看到的结果如下:</p>< p>  SQL&gt; select name from v$datafile;</p>< p>二、在创建对象之前,首先要分配存储空间,分配存储就要创建表空间。</p>< p>创建表空间示例如下:</p>< p>CREATE TABLESPACE& quot;SAMPLE&quot;</p>< p>LOGGING</p>< p>DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M</p>< p>EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO</p>< p>1、CREATE TABLESPACE& quot;SAMPLE&quot;  创建一个名为& quot;SAMPLE&quot; 的表空间.</p>< p>  对表空间的命名,遵守Oracle 的命名规范就可了.</p>< p>  ORACLE可以创建的表空间有三种类型:</p>< p>  (1)TEMPORARY: 临时表空间,用于临时数据的存放;</p>< p>  创建临时表空间的语法如下:</p>< p>  CREATE TEMPORARY TABLESPACE& quot;SAMPLE&quot;......</p>< p>  (2)UNDO : 还原表空间. 用于存入重做日志文件.</p>< p>  创建还原表空间的语法如下:</p>< p>  CREATE UNDO TABLESPACE& quot;SAMPLE&quot;......</p>< p>  (3)用户表空间: 最重要,也是用于存放用户数据表空间</p>< p>  可以直接写成: CREATE TABLESPACE& quot;SAMPLE&quot;</p>< p>  TEMPORARY 和 UNDO 表空间是ORACLE 管理的特殊的表空间.只用于存放系统相关数据.</p>< p>&nbsp;2、LOGGING</p>< p>  有 NOLOGGING 和 LOGGING 两个选项,</p>< p>NOLOGGING: 创建表空间时,不创建重做日志.</p>< p>LOGGING 和NOLOGGING正好相反, 就是在创建表空间时生成重做日志.</p>< p>用NOLOGGING时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志, 数据丢失后,不能恢复,但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的,所以通常不需要表空间的创建日志,因此,在创建表空间时,选择 NOLOGGING,以加快表空间的创建速度.</p>< p>&nbsp; 3、DATAFILE 用于指定数据文件的具体位置和大小</p>< p>&nbsp;&nbsp;&nbsp;&nbsp; DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M说明文件的存放位置是 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' , 文件的大小为5M.</p>< p>&nbsp;&nbsp;&nbsp; 如果有多个文件,可以用逗号隔开:</p>< p>&nbsp;DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M,'D:\ORACLE\ORADATA\ORA92\dd.ora' SIZE 5M</p>< p>但是每个文件都需要指明大小.单位以指定的单位为准如 5M 或 500K.</p>< p>对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少IO竟争.指定文件&nbsp; 名时,必须为绝对地址,不能使用相对地址.</p>< p>&nbsp; 4、EXTENT MANAGEMENT LOCAL 存储区管理方法</p>< p>Oracle 8i以前,可以有两种选择,一种是在字典中管理(DICTIONARY),另一种是本地管理(LOCAL ),从9I开始,只能是本地管理方式.因为LOCAL 管理方式有很多优点.</p>< p>在字典中管理(DICTIONARY): 将数据文件中的每一个存储单元做为一条记录,所以在做DM操作时,就会产生大量的对这个管理表的Delete和Update操作.做大量数据管理时,将会产生很多的DM操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片,这就是为什么要做磁盘整理的原因.</p>< p>本地管理(LOCAL): 用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘. 同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。</p>< p>&nbsp; 5、SEGMENT SPACE MANAGEMENT<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 磁盘扩展管理方法:<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEGMENT SPACE MANAGEMENT: 使用该选项时区大小由系统自动确定。由于 Oracle 可确定各区的最佳大小,所以区大小是可变的。<br />& nbsp;&nbsp;&nbsp; UNIFORM SEGMENT SPACE MANAGEMENT:指定区大小,也可使用默认值 (1 MB)。<br />& nbsp;6、段空间的管理方式<br />& nbsp;&nbsp;&nbsp; AUTO: 只能使用在本地管理的表空间中. 使用LOCAL管理表空间时,数据块中的空闲空间增加或减少后,其新状态都会在位图中反映出来。位图使 Oracle 管理空闲空间的行为更加自动化,并为管理空闲空间提供了更好的性,但对含有LOB字段的表不能自动管理.</p>< p>MANUAL: 目前已不用,主要是为向后兼容.<br />& nbsp;7、指定块大小. 可以具体指定表空间数据块的大小.</p>< p>创建例子如下:</p>< p> CREATE TABLESPACE& quot;SAMPLE&quot;</p>< p> LOGGING</p>< p> DATAFILE 'D:\ORACLE\ORADATA\ORA92\SAMPLE.ora' SIZE 5M,</p>< p> 'D:\ORACLE\ORADATA\ORA92\dd.ora' SIZE 5M</p>< p> EXTENT MANAGEMENT LOCAL</p>< p> UNIFORM SEGMENT SPACE MANAGEMENT</p>< p> AUTO</p>< p> SQL&gt; /</p>< p>  表空间已创建。</p>< p>  要删除表空间进,可以</p>< p>  SQL&gt; DROP TABLESPACE SAMPLE;</p>< p>  表空间已丢弃。</p>< p>&nbsp;8、修改表空间< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert database DATAFILE 'D:\ORACLE\ORADATA\ORA92\SAMPLE.ora'&nbsp; autoextend on next 100m;</p>< p>三、接下来我们开始创建用户,创建用户的命令格式如下:</p>< p>  create&nbsp; user&nbsp; 用户名&nbsp; identified&nbsp;&nbsp; by&nbsp;&nbsp; 密码&nbsp; default&nbsp;&nbsp; tablespace&nbsp;&nbsp; 用户默认使用哪一个表空间;</p>< p>  修改用户的权限:</p>< p>  grant&nbsp;&nbsp; 角色1,角色2&nbsp; to&nbsp; 用户名;</p>< p>  举例如下:</p>< p>  create&nbsp;&nbsp; user&nbsp;&nbsp; wbppcs&nbsp;&nbsp; identified&nbsp;&nbsp;&nbsp; by&nbsp;&nbsp;&nbsp; wbppcs123&nbsp;&nbsp;&nbsp; default&nbsp;&nbsp; tablespace&nbsp;&nbsp; wbppcs;</p>< p>  grant&nbsp;&nbsp; dba, connect&nbsp;&nbsp;&nbsp; to&nbsp;&nbsp; wbppcs</p>< p>&nbsp;四、删除表空间和用户<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除表空间</p>< p>drop tablespace test_data including contents and datafiles</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除用户</p>< p>drop user solidwang cascade</p>http://www.downcc.com/tech/4271.htmlMySQL2012/10/11 13:44:13<p>真是怕了MYSQl的乱码问题了今天通过修改mysql.ini总算是解决了,把解决过程写下来和大家分享,如果您也遇到了同样的问题,不妨一试。</p>< p>在my.ini里添加以下代码:</p>< p>[mysql]</p>< p>default-character-set=UTF8<br /> [mysqld]<br /> default-character-set=UTF8</p>< p>然后重新启动mysql服务,进入数据库</p>< p>alter database charset = UTF8;</p>< p>注:在导入数据库的脚本前面写上 set names UTF8;</p>< p>我用的编码是UTF8,如果你用的是gb2312,就将所有的UTF8改为gb2312即可!</p>http://www.downcc.com/tech/4219.htmlSQL Server2012/09/27 20:30:27<p>2012年第二季度,SQL Server 2012就已经发布。作为普通的开发者,并没有太多的热情去追随这些潮流的技术,经过短暂的尝鲜,果断决定放在一边,不予以理会。从SQL Server 2000起,就一直把SQL Server作为首选的项目数据库平台。随着SQL Server 2005, 2008, 2008 R2, 2012等系列版本的陆续发布,面临的问题也越来越多。遇到最多的一个问题是,SQL Server不同版本间的数据库转化问题。</p>< p>举例说明,在几百个客户中,至今仍然有使用SQL Server 2000的,以我的经验,这个版本的SQL Server还有相当多的客户在用。2006年之后的客户,从开始上项目就推荐用SQL Server 2005,所以沿袭过来,他们一直是这个版本的。到了2009年,新的客户又被推荐使用SQL Server 2008或是SQL Server 2008 R2,从理解上来说,SQL Server 2008 R2相当于SQL Server 2010。再加上这几个版本之间有补丁包,SQL Server的版本又增加了好几个,理论上推荐客户升级到最新的补丁包,也有客户因稳定性的原因,拒绝升级。于是乎,就为一个SQL Server,就有好多个版本。作为开发者,一般只有装最新的SQL Server,以便于防止在查找客户问题时,发生数据库版本不兼容,无法还原数据库的错误。然而,最新的SQL Server 2012,不再支持SQL Server 2000的备份文件,这不是个好消息。</p>< p>对于下面的这个错误,在客户比较多的情况下,经常会遇到。比如要拿客户的数据库回来查找问题,这个问题经常出现。如果耐心不好,就干脆装个最新的SQL Server,如果不想这样,下面提供的几种方法,也许对你有所帮助。</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/2012927203123284.png" /></p>< p>SQL Server Import/Export</p>< p>SQL Server自带的导入导出向导,大部分情况下有效。我推荐的步骤是先创建目标数据库的脚本,让SQL Server只传输数据,而不是既创建表,又传输数据,以减少一些很奇怪的错误。</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/2012927203124132.png" /></p>< p>这个工具用的不多,有各种奇怪的问题,没有积累多的经验。</p>< p>SQL Object Level Recovery Native</p>< p>RedGate公司SQL Toolbet系列组件的一个,可以从SQL Server的备份文件中生成带数据的SQL语句,在目标数据库中直接执行即可。这种方法的成功率很高,简单的带数据的SQL INSERT语句,在任何版本的SQL Server中,都可以很正确的插入数据。</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/2012927203124553.png" /></p>< p>点击View Recovery Script,可以查看它生成的SQL 脚本,直接把备份数据文件转化为SQL语句,相当方便。</p>< p>目前支持SQL Server 2008 R2的备份集,可以满足绝大部分客户的应用。</p>< p>SQL Query&nbsp; Generator</p>< p>公司的工具库里面的一个工具,一般是给客户维护(support)人员用,用于快速导入导出数据。</p>< p style="text-indent: 0px"><img title="点击查看大图" alt="" width="600" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-9/2012927203124204.png" /></p>< p>以Northwind数据库为例子,可以马上生成这个表的INSERT语句,保存到剪贴板中,例子语句如下所示</p>< pre> INSERT INTO [Employees] ([EmployeeID],[LastName],[FirstName],[Title],[TitleOfCourtesy],[BirthDate],[HireDate],[Address],[City],[Region],[PostalCode],[Country],[HomePhone],[Extension],[Photo],[Notes],[ReportsTo],[PhotoPath]) VALUES(9, N'Dodsworth', N'Anne', N'Sales Representative', N'Ms.', '1966-1-27 0:0:0.0', '1994-11-15 0:0:0.0', N'7 Houndstooth Rd.', N'London', N'', N'WG2 7LT', N'UK', N'(71) 555-4444', N'452', N'System.Byte[]', N'Anne has a BA degree in English from St. Lawrence College. She is fluent in French and German.', 5, N'http://accweb/emmployees/davolio.bmp') INSERT INTO [Employees] ([EmployeeID],[LastName],[FirstName],[Title],[TitleOfCourtesy],[BirthDate],[HireDate],[Address],[City],[Region],[PostalCode],[Country],[HomePhone],[Extension],[Photo],[Notes],[ReportsTo],[PhotoPath]) VALUES(8, N'Callahan', N'Laura', N'Inside Sales Coordinator', N'Ms.', '1958-1-9 0:0:0.0', '1994-3-5 0:0:0.0', N'4726 - 11th Ave. N.E.', N'Seattle', N'WA', N'98105', N'USA', N'(206) 555-1189', N'2344', N'System.Byte[]', N'Laura received a BA in psychology from the University of Washington. She has also completed a course in business French. She reads and writes French.', 2, N'http://accweb/emmployees/davolio.bmp')</pre>< p>这样,很方便的搬动数据库到另一个位置,简单灵活。对于图片数据,要单独处理。对于有种子字段的列,要在导入前,开启,语句如下所示</p>< pre> SET IDENTITY_INSERT dbo.ICMOVh OFF SET IDENTITY_INSERT dbo.ICMOVD ON</pre>< p>对于主从表数据,先导入主表,再导入从表。删除主从表数据,则是先删从表,再删主表。</p>< p>LLBL Gen</p>< p>作为ORM的基本特征,跨数据库平台。你可以运用此特点,从一个数据库中读取,然后改变连接字符串,在另一个数据库中保存,完成数据库的转移工作。以销售单为例子,读取销售单的代码,看起来是这样的</p>< pre> public SalesOrderEntity GetSalesOrder(System.String RefNo, IPrefetchPath2 prefetchPath, ExcludeIncludeFieldsList fieldList) { SalesOrderEntity _SalesOrder = new SalesOrderEntity(RefNo); using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter()) { bool found = adapter.FetchEntity(_SalesOrder, prefetchPath, null, fieldList); if (!found) throw new Foundation.Common.RecordNotFoundException(&quot;Invalid SalesOrder&quot;); } return _SalesOrder; }</pre>< p>同时,保存销售单的代码,看起来是这样的</p>< pre> public SalesOrderEntity SaveSalesOrder(SalesOrderEntity SalesOrder, EntityCollection entitiesToDelete, string seriesCode) { using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter()) { try { adapter.StartTransaction(IsolationLevel.ReadCommitted,& quot;SaveSalesOrder&quot;); adapter.SaveEntity(SalesOrder, true, false); adapter.Commit(); } catch { adapter.Rollback(); throw; } } return SalesOrder; }</pre>< p>这些代码均是由代码生成器直接生成的。完成数据转移的ORM代码,看起来是这样子的</p>< pre> string source =& quot;Data Source=192.168.0.96;Initial Catalog=TS;User Id =sa ; Password =holiday;&quot;; string destination =& quot;Data Source=192.168.0.200;Initial Catalog=TS;User Id = sa ; Password = holiday;&quot;; ClientProxyFactory.ConnectionString = source; ISalesOrderManager manager = ClientProxyFactory.CreateProxyInstance&lt;ISalesOrderManager&gt;(); SalesOrderEntity salesOrder = manager.GetSalesOrder(customerNo, null); ClientProxyFactory.ConnectionString = destination; manager.SaveSalesOrder(salesOrder);</pre>< p>就这样几句代码,把销售单数据从192.168.0.96的机器搬动到192.168..0.200的机器上。</p>< p>更进一步的,这几句代码可以写成一个泛型的方法,传入参数,即可达到批量搬动数据。</p>< p>以我的理解和摸索,当前仍然是让项目使用主流的SQL Server 2005,搭配Express版本的SQL Server 2008, 2008 R2,这样可以读取高于SQL Server 2005的客户数据库,兼容于更新的数据库。为了在不同的版本的SQL Server之间互导数据,供您参考。</p>http://www.downcc.com/tech/4184.htmlMySQL2012/09/22 01:33:50<p>平时很少会考虑数据存储需要明确字符串类型字段的大小写,MySQL默认的查询也不区分大小写。但作为用户信息,一旦用户名重复,又会浪费很多资源。再者,李逵、李鬼的多起来,侦辨起来很困难。要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感)。如果通盘数据库所有字段都需要大小写敏感,不如在字符集设置时做好调整。不过,通常不建议这么做。</p>< p>如果跟我一样,数据库已经在线上跑了,一个表上百万条数据,做字段类型变更有可能导致数据库宕机。那么好吧,在查询时,多加个单词好了!-</p>< p>例如,一般查询:</p>< p>SELECT * FROM U WHERE name LIKE 'a%';&nbsp;&nbsp;&nbsp;< br /> SELECT * FROM U WHERE name LIKE 'A%';&nbsp;< br /> 其结果是一样的,为了区分'A%'和'a%',可以这么做:</p>< p>SELECT * FROM U WHERE binary name LIKE 'a%';&nbsp;&nbsp;&nbsp;< br /> SELECT * FROM U WHERE binary name LIKE 'A%';&nbsp;< br /> 仅仅多了一个binary,就可以得到不同的结果!</p>< p>当然,如果需要建表时强制区分大小写,可以这么写:</p>< p>create&nbsp; table&nbsp; table_name(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp; name varchar (20) binary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< br /> );&nbsp;< br /> 就这么简单!</p>http://www.downcc.com/tech/4149.htmlSQL Server2012/09/05 18:18:55<p>Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的,Where中不能使用聚合函数。&nbsp;< br />& nbsp;<br /> Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。</p>< p>在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。<br />& nbsp;<br /> 下面用一个例子进一步说明问题。假设有数据表:<br /> [sql]< br /> CREATE TABLE&nbsp; `test`.`salary_info` (&nbsp;< br />& nbsp; `id` int(10) unsigned NOT NULL auto_increment,&nbsp;< br />& nbsp; `deparment` varchar(16) NOT NULL default '',&nbsp;< br />& nbsp; `name` varchar(16) NOT NULL default '',&nbsp;< br />& nbsp; `salary` int(10) unsigned NOT NULL default '0',&nbsp;< br />& nbsp;&nbsp; PRIMARY KEY&nbsp; (`id`)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< br /> ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;&nbsp;< br />& nbsp;<br /> 例1:要查找平均工资大于3000的部门<br /> 则sql语句应为:<br /> [sql]< br /> select deparment, avg(salary) as average from salary_info&nbsp;&nbsp;< br /> group by deparment having average& gt; 3000&nbsp;< br /> 此时只能使用having,而不能使用where。一来,我们要使用聚合语句avg;二来,我们要对聚合后的结果进行筛选(average& gt; 3000),因此使用where会被告知sql有误。<br />& nbsp;<br /> 例2:要查询每个部门工资大于3000的员工个数<br /> sql语句应为:<br /> [sql]< br /> select deparment, count(*) as c from salary_info&nbsp;&nbsp;< br /> where salary& gt; 80 group by deparment&nbsp;< br /> 此处的where不可用having进行替换,因为是直接对库中的数据进行筛选,而非对结果集进行筛选。</p>http://www.downcc.com/tech/4134.htmlMySQL2012/08/28 13:44:59<p>在保证数据库性能的前提下,怎么保证数据的一致性呢?</p>< p>在MySQL 5.5版本中即支持异步复制又支持半同步复制。</p>< p>1、当slave 连接master的时候,它会指出它是否支持半同步复制。</p>< p>2、当master启用 semisynchronous replication.并且至少有一台slave也启用了该功能,master端的事务会被阻塞,并且等到该事务会等待其中任何一个slave接受到该事务,或者超过等待时间才会提交。</p>< p>3、slave端回复给master的信息依据是slave事务已经写入到relay-log并且已经刷写到了磁盘。</p>< p>4、如果master端等待超时的话,没有任何slave给出该事务已经写入relay-log的信息,那么他会自动转到异步复制,当其中一个支持异步复制的slave追赶上了master,那么master会进入到半同步复制状态。</p>< p>5、半同步复制必须是两端都支持。</p>< p>当master的线程处于被阻塞(等待slave端返回的消息时),并不会给该会话session返回任何消息。当阻塞结束的时候,master会返回给该session消息。</p>< p>如果一个事务中包含对非事务表的修改,在发生rollback的情况下,master也是会这些信息写入到binlog上面,并且也会发生阻塞,等待slave端写入。<br />& nbsp;</p>< p>半同步复制需要在数据一致性和性能上作出权衡。</p>< p><strong>5.5半同步功能的安装步骤</strong></p>< p>&nbsp; 1、这个首先需要5.5支持动态加载模块:查看变量: have_dynamic_loading是否是yes;</p>< p>&nbsp; 2、基本的复制架构已经搭建</p>< p>&nbsp; 3、master端和slave端的模块是随着版本发布的,在master端执行:</p>< p>&nbsp; INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';</p>< p>在slave端执行:</p>< p>&nbsp;&nbsp;&nbsp; INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';</p>< p>如果在安装的时候出现如下错误,请下载缺失的组件:http://dev.mysql.com/downloads/os-linux.html.</p>< p>&nbsp; ERROR 1126 (HY000): Can't open shared library<br /> '/usr/local/mysql/lib/plugin/semisync_master.so' (errno: 22 libimf.so: cannot open<br /> shared object file: No such file or directory)<br />& nbsp;</p>< p>安装完成后,还需要设置变量才能正常启动:</p>< p>&nbsp;&nbsp; SET GLOBAL rpl_semi_sync_master_enabled =1;</p>< p>&nbsp; SET GLOBAL rpl_semi_sync_master_timeout =N 设置好超时时间,默认是10s (有点长啦)</p>< p>&nbsp;&nbsp;&nbsp; 在slave 端执行:</p>< p>&nbsp;&nbsp;&nbsp; SET GLOBAL rpl_semi_sync_slave_enabled =1</p>< p>&nbsp; (以上信息都可以写到my.cnf文件中)</p>< p>&nbsp; 这个时候复制还是属于异步复制,只有重启slave或者 重启 slave I/O线程,才能真正使用半同步复制功能。</p>< p>&nbsp; stop slave io_thread;start slave io_thread;</p>< p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 监控半同步复制状态;</strong></p>< p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 几个重要的变量是:</strong></p>< p>&nbsp;&nbsp;&nbsp; rpl_semi_sync_master_clients&nbsp; 支持和已经注册半同步复制的已连接的slave数量。</p>< p>&nbsp;&nbsp;&nbsp; rpl_semi_sync_master_status&nbsp; Master的半同步复制状态,1是活动状态,0表示非活动,要么是没有启用该功能,要么以切换至异步复制状态</p>< p>&nbsp;&nbsp; rpl_semi_sync_slave_status Slave 上的半同步复制状态,1,表示已经启用而且I/O线程正在运行,0表示非活动状态。</p>http://www.downcc.com/tech/4124.htmlSQL Server2012/08/14 12:02:07<p>建立表语句 在<a target="_blank" href="http://www.downcc.com/search.asp?m=1&amp;s=0&amp;word=%CA%FD%BE%DD%BF%E2&amp;x=25&amp;y=15">数据库</a> 添加一个表并对字段添加唯一约束。msdn上认为建唯一约束会自动创建相应的唯一索引。<br />< br /> 1 USE AdventureWorks2012;<br /> 2 GO< br /> 3 CREATE TABLE Production.TransactionHistoryArchive4<br /> 4 (<br /> 5 TransactionID int NOT NULL,< br /> 6 CONSTRAINT AK_TransactionID UNIQUE(TransactionID)< br /> 7 );< br /> 8 GO<br />< br /> 插入测试sql   <br />< br /> 1 INSERT INTO [db].[dbo].[TransactionHistoryArchive4]<br /> 2 ([TransactionID])<br /> 3 VALUES<br /> 4 (1)<br /> 5 GO<br />< br /> 这时候我写的测试语句 当我第一次执行时 显示 (1 行受影响) 数据库数据正常<br /> 第二次执行语句时就会报错<br /> 1 消息 2627,级别 14,状态 1,第 1 行<br /> 2 违反了 UNIQUE KEY 约束 'AK_TransactionID'。不能在对象 'dbo.TransactionHistoryArchive4' 中插入重复键。<br /> 3 语句已终止。< br />< br /> 消息2627是我需要的信息。因为C#中提供了SqlException来捕获数据库发生的异常。根据消息id就可以判断出错误类型 好久不写ado代码了<br />< br /> 1 try<br /> 2 {<br /> 3 using (SqlConnection connection = new SqlConnection(connectionString))<br /> 4 {<br /> 5 SqlCommand command = new SqlCommand(queryString, connection);<br /> 6 command.Connection.Open();<br /> 7 command.ExecuteNonQuery();<br /> 8 }<br /> 9< br /> 10 }<br /> 11 catch (SqlException sqlException)<br /> 12 {< br /> 13< br /> 14< br /> 15 if (sqlException.Number == 2627)<br /> 16 errmsg =& quot;errmsg&quot;;<br /> 17 else<br /> 18 errmsg =& quot;其他异常&quot;;< br /> 19< br /> 20< br /> 21 }<br /> 遇见了就不要错过<br />< br /> 作者 likunran</p>http://www.downcc.com/tech/4123.htmlMySQL2012/08/14 12:00:41<p>1.整型的符号<br /> 在<a target="_blank" href="http://www.downcc.com/search.asp?m=1&amp;s=0&amp;word=mysql&amp;x=32&amp;y=10">mysql</a>中数字数据类型是有符号和无符号两种,当然整型也是,<br /> 在定义一个字段的时候可以这么使用<br />< br /> age tinyint unsigned,<br /> unsigned代表是无符号,即都是大与等于0 的数<br />< br /> 如果这样使用是默认有符号的<br /> age tinyint ,<br />< br /> 2.整型的数据宽度和零填充<br />< br /> 如下语句<br />< br /> age tinyint(1) ,<br />< br /> 代表age这个字段是1个字符宽度,<br />< br /> 但是如果不设置零填充式无效的,mysql将会忽略那个字符宽度。<br />< br /> 如下语句是有有效的<br />< br /> age tinyint(1) zerofill,<br /> 只有在设置了零填充之后数据宽度才会有效,如果插入的数据时20将会插入出错。<br />< br /> 注意:zerofill的字段默认是无符号的,就是大于等于零的数据,输入小与零的数字将会报错。<br /> 这个语句和上个语句是同一个意思:age tinyint(1) unsigned zerofill.<br /> 还有一点注意的地方,最好为字段设置上默认值,要不然不容易比较<br /> 在mysql中字段值是null时,和谁都能不能比较,甚至和null自己本身都不能比较,比较结果都是null。</p>http://www.downcc.com/tech/4122.htmlSQL Server2012/08/14 11:57:02<p>在<strong>SQL Server</strong>数据库中,SQL Server<strong>日期时间格式转换字符串</strong>可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的。本文我们主要就介绍一下SQL Server日期时间转字符串的相关知识,接下来就让我们一起来了解一下这部分内容。</p>< p><strong>日期时间转字符串:</strong></p>< ol>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;0):&nbsp;05&nbsp;16&nbsp;2006&nbsp;10:57AM&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;1):&nbsp;05/16/06&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;2):&nbsp;06.05.16&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;3):&nbsp;16/05/06&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;4):&nbsp;16.05.06&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;5):&nbsp;16-05-06&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;6):&nbsp;16&nbsp;05&nbsp;06&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;7):&nbsp;05&nbsp;16,&nbsp;06&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;8):&nbsp;10:57:46&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;9):&nbsp;05&nbsp;16&nbsp;2006&nbsp;10:57:46:827AM&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;10):&nbsp;05-16-06&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;11):&nbsp;06/05/16&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;12):&nbsp;060516&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;13):&nbsp;16&nbsp;05&nbsp;2006&nbsp;10:57:46:937&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;14):&nbsp;10:57:46:967&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;20):&nbsp;2006-05-16&nbsp;10:57:47&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;21):&nbsp;2006-05-16&nbsp;10:57:47.157&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;22):&nbsp;05/16/06&nbsp;10:57:47&nbsp;AM&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;23):&nbsp;2006-05-16&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;24):&nbsp;10:57:47&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;25):&nbsp;2006-05-16&nbsp;10:57:47.250&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;100):&nbsp;05&nbsp;16&nbsp;2006&nbsp;10:57AM&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;101):&nbsp;05/16/2006&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;102):&nbsp;2006.05.16&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;103):&nbsp;16/05/2006&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;104):&nbsp;16.05.2006&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;105):&nbsp;16-05-2006&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;106):&nbsp;16&nbsp;05&nbsp;2006&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;107):&nbsp;05&nbsp;16,&nbsp;2006&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;108):&nbsp;10:57:49&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;109):&nbsp;05&nbsp;16&nbsp;2006&nbsp;10:57:49:437AM&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;110):&nbsp;05-16-2006&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;111):&nbsp;2006/05/16&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;112):&nbsp;20060516&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;113):&nbsp;16&nbsp;05&nbsp;2006&nbsp;10:57:49:513&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;114):&nbsp;10:57:49:547&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;120):&nbsp;2006-05-16&nbsp;10:57:49&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;121):&nbsp;2006-05-16&nbsp;10:57:49.700&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;126):&nbsp;2006-05-16T10:57:49.827&nbsp;& nbsp;</li>< li>Select&nbsp;CONVERT(varchar(100),&nbsp;GETDATE(),&nbsp;130):&nbsp;18&nbsp;????&nbsp;??????&nbsp;1427&nbsp;10:57:49:907AM& nbsp;</li>< /ol>< p>在SQL数据库中,有一类函数是不得不提的,那就是SQL Server日期时间函数,这是SQL Server处理日期和时间最常用的函数,下面就将为介绍这类函数。</p>< p><strong>Sql Server日期与时间函数:</strong></p>< p>1.&nbsp; 当前系统日期、时间&nbsp;</p>< p>select getdate()&nbsp;</p>< p>2. dateadd&nbsp; 在向指定日期加上一段时间的基础上,返回新的 datetime 值</p>< p>例如:向日期加上2天&nbsp;</p>< p>select dateadd(day,2,'2004-10-15')&nbsp; --返回:2004-10-17 00:00:00.000</p>< p>3. datediff 返回跨两个指定日期的日期和时间边界数。</p>< p>select datediff(day,'2004-09-01','2004-09-18')&nbsp;&nbsp; --返回:17</p>< p>4. datepart 返回代表指定日期的指定日期部分的整数。</p>< p>SELECT DATEPART(month, '2004-10-15')&nbsp; --返回 10</p>< p>5. datename 返回代表指定日期的指定日期部分的字符串</p>< p>SELECT datename(weekday, '2004-10-15')&nbsp; --返回:星期五</p>< p>6. day(), month(),year() --可以与datepart对照一下</p>< p>select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114)</p>< p>select datename(dw,'2004-10-15')</p>< p>select 本年第多少周=datename(week,'2004-10-15'),今天是周几=datename(weekday,'2004-10-15')</p>< p><strong>SQL Server日期函数&nbsp;&nbsp;&nbsp;&nbsp; 参数/功能< /strong></p>< p>GetDate( )&nbsp;&nbsp;&nbsp; 返回系统目前的日期与时间</p>< p>DateDiff (interval,date1,date2)&nbsp;&nbsp; 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1</p>< p>DateAdd (interval,number,date)&nbsp;& nbsp;以interval指定的方式,加上number之后的日期</p>< p>DatePart (interval,date)&nbsp;&nbsp;&nbsp; 返回日期date中,interval指定部分所对应的整数值</p>< p>DateName (interval,date)&nbsp;&nbsp; 返回日期date中,interval指定部分所对应的字符串名称</p>< p><strong>参数interval的设定值如下:</strong></p>< p>值缩写(Sql Server) (Access 和 ASP) 说明</p>< p>Year Yy yyyy 年 1753 ~ 9999</p>< p>Quarter Qq q&nbsp;&nbsp; 季 1 ~ 4</p>< p>Month Mm m&nbsp;&nbsp; 月1 ~ 12</p>< p>Day of year Dy y&nbsp; 一年的日数,一年中的第几日 1-366</p>< p>Day Dd d&nbsp;&nbsp; 日,1-31</p>< p>Weekday Dw w 一周的日数,一周中的第几日 1-7</p>< p>Week Wk ww&nbsp; 周,一年中的第几周 0 ~ 51</p>< p>Hour Hh h&nbsp;&nbsp; 时0 ~ 23</p>< p>Minute Mi n&nbsp; 分钟0 ~ 59</p>< p>Second Ss s 秒 0 ~ 59</p>< p>Millisecond Ms - 毫秒 0 ~ 999</p>< p>Access 和Asp中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似。</p>< p><strong>SQL Server日期函数举例:</strong></p>< p>1.GetDate() 用于sql server :select GetDate()</p>< p>2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒</p>< p>DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天</p>< p>3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)</p>< p>DatePart('d','2005-7-25 22:56:32')返回值为 25即25号</p>< p>DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天</p>< p>DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年</p>< p>关于SQL Server日期时间格式转换字符串的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!</p>http://www.downcc.com/tech/4116.htmlMySQL2012/08/03 17:02:19<p>数据库中有几十上百张表,那么哪些表的数据量比较大呢,总不能一个表一个表的去查询吧,在mysql中也有类似于oracle的数据字典表,只不过mysql没有oracle记录的那么多和详细,但也足够我们查询这些信息了。</p>< div>&nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;在mysql的information_schema下有存储数据库基本信息的数据字典表,可以通过查询tables表来获得所需要的表相关信息。</div>< div>&nbsp;&nbsp;&nbsp;</div>< div>&nbsp;& nbsp;& nbsp; mysql&gt; show databases;</div>< div>+--------------------+</div>< div>| Database& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>+--------------------+</div>< div>| information_schema |</div>< div>|mysql& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|report& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>| report_result& nbsp;& nbsp;& nbsp;|</div>< div>|test& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>+--------------------+</div>< div>5 rows in set (0.02 sec)</div>< div>mysql&gt; use information_schema;</div>< div>Database changed</div>< div>mysql&gt; show tables;</div>< div>+---------------------------------------+</div>< div>|Tables_in_information_schema& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>+---------------------------------------+</div>< div>|CHARACTER_SETS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|COLLATIONS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>| COLLATION_CHARACTER_SET_APPLICABILITY |</div>< div>|COLUMNS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>|COLUMN_PRIVILEGES& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>|KEY_COLUMN_USAGE& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|PROFILING& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>|ROUTINES& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|SCHEMATA& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|SCHEMA_PRIVILEGES& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>|STATISTICS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|TABLES& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|TABLE_CONSTRAINTS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>|TABLE_PRIVILEGES& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|TRIGGERS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |</div>< div>|USER_PRIVILEGES& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>|VIEWS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|</div>< div>+---------------------------------------+</div>< div>17 rows in set (0.00 sec)</div>< div>那么我们查看一下talbes表结构信息,看看存储的具体信息</div>< div>&nbsp;& nbsp;</div>< div>mysql&gt; desc tables;</div>< div>+-----------------+--------------+------+-----+---------+-------+</div>< div>| Field& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; |Type& nbsp;& nbsp;& nbsp;& nbsp; | Null | Key | Default |Extra |</div>< div>+-----------------+--------------+------+-----+---------+-------+</div>< div>| TABLE_CATALOG& nbsp; | varchar(512) | YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| TABLE_SCHEMA& nbsp;& nbsp;| varchar(64)& nbsp;| NO& nbsp;|& nbsp;& nbsp; |& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>| TABLE_NAME& nbsp;& nbsp;& nbsp;| varchar(64)& nbsp;| NO& nbsp;|& nbsp;& nbsp; |& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>| TABLE_TYPE& nbsp;& nbsp;& nbsp;| varchar(64)& nbsp;| NO& nbsp;|& nbsp;& nbsp; |& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>| ENGINE& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;|varchar(64)& nbsp;| YES& nbsp;|& nbsp;& nbsp; |NULL& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>| VERSION& nbsp;& nbsp;& nbsp;& nbsp; |bigint(21)& nbsp; | YES& nbsp;|& nbsp;& nbsp; |NULL& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>| ROW_FORMAT& nbsp;& nbsp;& nbsp;| varchar(10)& nbsp;| YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| TABLE_ROWS& nbsp;& nbsp;& nbsp;| bigint(21)& nbsp; | YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| AVG_ROW_LENGTH& nbsp;| bigint(21)& nbsp; | YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| DATA_LENGTH& nbsp;& nbsp; | bigint(21)& nbsp; | YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| MAX_DATA_LENGTH | bigint(21)& nbsp; | YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| INDEX_LENGTH& nbsp;& nbsp;| bigint(21)& nbsp; | YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| DATA_FREE& nbsp;& nbsp;& nbsp; | bigint(21)& nbsp; |YES& nbsp;|& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| AUTO_INCREMENT& nbsp;| bigint(21)& nbsp; | YES |& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| CREATE_TIME& nbsp;& nbsp; | datetime& nbsp;& nbsp; |YES& nbsp;|& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| UPDATE_TIME& nbsp;& nbsp; | datetime& nbsp;& nbsp; |YES& nbsp;|& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| CHECK_TIME& nbsp;& nbsp;& nbsp;| datetime& nbsp;& nbsp; |YES& nbsp;|& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| TABLE_COLLATION | varchar(64)& nbsp;| YES& nbsp;|& nbsp;& nbsp; |NULL& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>| CHECKSUM& nbsp;& nbsp;& nbsp;& nbsp;| bigint(21)& nbsp; |YES& nbsp;|& nbsp;& nbsp; | NULL& nbsp; |& nbsp;& nbsp;& nbsp; |</div>< div>| CREATE_OPTIONS& nbsp;| varchar(255) | YES& nbsp;|& nbsp;& nbsp; |NULL& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>| TABLE_COMMENT& nbsp; | varchar(80)& nbsp;| NO& nbsp;|& nbsp;& nbsp; |& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;& nbsp; |</div>< div>+-----------------+--------------+------+-----+---------+-------+</div>< div>21 rows in set (0.00 sec)</div>< div>主要存储了表的信息如表使用的引擎,表的类型等信息。我们可以通过查询table_rows属性获得哪些表数据量比较大。</div>< div>mysql&gt; select table_name,table_rows from& nbsp;tables order by table_rows desc limi 10;</div>< div>+---------------+------------+</div>< div>&nbsp;& nbsp;</div>< div>| table_name& nbsp;& nbsp;|table_rows |</div>< div>+---------------+------------+</div>< div>| task6& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;1558845 |</div>< div>| task& nbsp;& nbsp;& nbsp;& nbsp; |& nbsp;& nbsp;1554399 |</div>< div>| task5& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;1539009 |</div>< div>| task3& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;1532169 |</div>< div>| task1& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;1531143 |</div>< div>| task2& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;1531143 |</div>< div>| task4& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp;1521225 |</div>< div>| task7& nbsp;& nbsp;& nbsp;& nbsp;|& nbsp;& nbsp; 980865 |</div>< div>我们继续深入思考,这些存储的数据是否准确,是否真实的反应了表中数据量大小?</div>< div>mysql&gt; show create table tables \G;</div>< div>*************************** 1. row***************************</div>< div>&nbsp;& nbsp;& nbsp; Table: TABLES</div>< div>&nbsp;& nbsp;</div>< div>Create Table: CREATE TEMPORARY TABLE`TABLES` (</div>< div>&nbsp;`TABLE_CATALOG` varchar(512) default NULL,</div>< div>&nbsp;`TABLE_SCHEMA` varchar(64) NOT NULL default '',</div>< div>&nbsp;`TABLE_NAME` varchar(64) NOT NULL default '',</div>< div>&nbsp;`TABLE_TYPE` varchar(64) NOT NULL default '',</div>< div>&nbhttp://www.downcc.com/tech/4115.htmlMySQL2012/08/03 17:00:21<p>我在做项目中发现一个规律,当应用程序和数据库建立连接时,如果超过了8个小时,应用程序句不会去访问数据库,数据库就会出现断掉连接的现象 。这时再次访问就会抛出异常.</p>< div>1、一般的解决方法大多是在数据库连接字符串中增加&ldquo;autoReconnect=true& rdquo;选项。但是这只对mysql4以前的版本有效。在最新的mysql中是无效的。其实要解决这个问题也有一个简单的方法,就是修改mysql的启动参数。缺省情况下mysql的timeout时间是28800秒,正好是8小时,增加一个0就可以了。</div>< div>同理也可以在&quot; my.ini&quot;文件中增加此参数。</div>< div>mysqld-nt --default-table-type=innodb --interactive_timeout=288000</div>< div>&nbsp;</div>< div>2、从根源入手,设置mysql的wait_timeout为31536000(一年)。</div>< div>&nbsp;& nbsp;&nbsp;</div>< div>mysql&gt; show variables;</div>< div>| wait_timeout& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;| 28800</div>< div>| interactive_timeout& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; | 28800& nbsp;& nbsp;&nbsp;</div>< div>&quot; my.ini&quot;文件中修改此参数</div>< div>[mysqld]</div>< div>wait_timeout=31536000</div>< div>interactive_timeout=31536000</div>< div>重启服务,OK!</div>< div>作者 蔡磊</div>http://www.downcc.com/tech/4108.htmlSQL Server2012/07/20 01:24:54<p>如何更改SQL Server2008身份验证模式</p>< p>在安装<a target="_blank" href="http://www.downcc.com/search.asp?m=1&amp;s=0&amp;word=sql&amp;x=26&amp;y=12">sql</a> 2008的时候,有一个选择身份验证的选项,参考是选择混合模式,但是在安装的时候,想试一下如果选的是Windows身份验证模式,在安装完之后能不能修改过来?所以昨天就试了一下!</p>< p>首先,我们进入sql 2008的对象资源管理器,右键属性,点击安全性</p>< p><img alt="如何更改SQL Server2008身份验证模式_绿色资源网" style="width: 630px; height: 285px; cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-7/201272012630230.png" /></p>< p>选择SQL Server和Windows身份验证模式</p>< p><img alt="如何更改SQL Server2008身份验证模式_绿色资源网" style="width: 630px; height: 386px; cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-7/201272012633127.png" /></p>< p>确定后,重新启动SQL Server</p>< p><img alt="如何更改SQL Server2008身份验证模式_绿色资源网" style="width: 630px; height: 389px; cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-7/201272012633377.png" /></p>< p>重新回到Local下的子菜单安全性,单击登录名,选择它的子菜单sa,右击sa属性</p>< p><img alt="如何更改SQL Server2008身份验证模式_绿色资源网" style="width: 630px; height: 370px; cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-7/201272012634404.png" /></p>< p>将右边的登录选择启用方式,这时候你就可以用sa登录名登录了!</p>< p><img alt="如何更改SQL Server2008身份验证模式_绿色资源网" style="width: 630px; height: 511px; cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-7/201272012634904.png" /></p>< p>密码默认情况下为空,我们设置密码,直接密码区里输入您所需要设置的密码,点击确定,这样就OK了!</p>< p><img alt="如何更改SQL Server2008身份验证模式_绿色资源网" style="width: 630px; height: 509px; cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-7/201272012634303.png" /></p>< p>选择Windows身份验证的时候,我们的安装程序会为SQL Server创建sa账户,但是会禁用它,并不启用!</p>< p>所以,我们在将它改为混合模式的时候,必须先启用该账户!并为其设置密码!</p>< p>作者 huo_yun</p>http://www.downcc.com/tech/4107.htmlMySQL2012/07/18 11:36:10<p>myisamchk -f -o ../data/database1/cms_session.MYI</p>< p><strong>最后我解决的方法是</strong></p>< div>< ol>< li>myisamchk -f -o ../data/database1/cms_session.MYI</li>< /ol>< /div>< p>以下是 网友的BLOG详细资料!</p>< p>我的网站出问题了,访问一看,果然全屏报错,检查mysql日志,错误信息为:</p>< div>< ol>< li>Table& lsquo;.\dedecmsv4\dede_archives&rsquo; is marked as crashed and should be repaired</li>< /ol>< /div>< p>提示说cms的文章表dede_archives被标记有问题,需要修复。于是赶快恢复历史数据,上网查找原因。最终将问题解决。解决方法如下:</p>< p>找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:</p>< div>< ol>< li>myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI</li>< /ol>< /div>< p>然后myisamchk 工具会帮助你恢复数据表的索引。重新启动mysql,问题解决。</p>< p><strong><span style="font-size: large">问题分析:</span></strong></p>< p>1、错误产生原因,有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法。还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。</p>< p>问题的编号为145</p>< p>2、问题解决办法。</p>< p>当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次&ndash;这通常是上一次修复操作遗留下来的。 这三种修复方法如下所示:</p>< div>< ol>< li>% myisamchk& ndash;recover& ndash;quick /path/to/tblName</li>< li>% myisamchk& ndash;recover /path/to/tblName</li>< li>% myisamchk& ndash;safe-recover /path/to/tblName</li>< /ol>< /div>< p>第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。</p>< p>检查和修复MySQL数据文件 如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧: 如果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容: mysql&gt; DELETE FROM tblName; 在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。</p>< p>如果你的表的格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。</p>< p>启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。 3、myisamchk工具介绍(见mysql的官方手册)</p>< p>可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。</p>< p>调用myisamchk的方法:</p>< p>shell&gt; myisamchk [options] tbl_name& hellip; options指定你想让myisamchk做什么。在后面描述它们。还可以通过调用myisamchk& ndash;help得到选项列表。</p>< p>tbl_name是你想要检查或修复的数据库表。如果你不在数据库目录的某处运行myisamchk,你必须指定数据库目录的路径,因为myisamchk不知道你的数据库位于哪儿。实际上,myisamchk不在乎你正在操作的文件是否位于一个数据库目录;你可以将对应于数据库表的文件拷贝到别处并且在那里执行恢复操作。</p>< p>如果你愿意,可以用myisamchk命令行命名几个表。还可以通过命名索引文件(用&ldquo; .MYI&rdquo;后缀)来指定一个表。它允许你通过使用模式&ldquo;*.MYI&rdquo;指定在一个目录所有的表。例如,如果你在数据库目录,可以这样在目录下检查所有的MyISAM表:</p>< p>shell&gt; myisamchk *.MYI 如果你不在数据库目录下,可通过指定到目录的路径检查所有在那里的表:</p>< p>shell&gt; myisamchk /path/to/database_dir/*.MYI 你甚至可以通过为MySQL数据目录的路径指定一个通配符来检查所有的数据库中的所有表:</p>< p>shell&gt; myisamchk /path/to/datadir/*/*.MYI 推荐的快速检查所有MyISAM表的方式是:</p>< div>< ol>< li>shell&gt; myisamchk& ndash;silent& ndash;fast /path/to/datadir/*/*.MYI</li>< /ol>< /div>< p>如果你想要检查所有MyISAM表并修复任何破坏的表,可以使用下面的命令:</p>< div>< ol>< li>shell&gt; myisamchk& ndash;silent& ndash;force& ndash;fast& ndash;update-state \</li>< li>&nbsp;&nbsp; -O key_buffer=64M -O sort_buffer=64M \</li>< li>&nbsp;&nbsp; -O read_buffer=1M -O write_buffer=1M \</li>< li>&nbsp;&nbsp; /path/to/datadir/*/*.MYI</li>< /ol>< /div>< p>该命令假定你有大于64MB的自由内存。关于用myisamchk分配内存的详细信息,参见5.9.5.5节,&ldquo;myisamchk内存使用&rdquo;。</p>< p>当你运行myisamchk时,必须确保其它程序不使用表。否则,当你运行myisamchk时,会显示下面的错误消息:</p>< div>< ol>< li>warning: clients are using or haven&rsquo;t closed the table properly</li>< /ol>< /div>< p>这说明你正尝试检查正被另一个还没有关闭文件或已经终止而没有正确地关闭文件的程序(例如mysqld服务器)更新的表。</p>< p>如果mysqld正在运行,你必须通过FLUSH TABLES强制清空仍然在内存中的任何表修改。当你运行myisamchk时,必须确保其它程序不使用表。避免该问题的最容易的方法是使用CHECK TABLE而不用myisamchk来检查表。</p>http://www.downcc.com/tech/4097.htmlSQL Server2012/07/08 23:50:01<p>inner join,full outer join,left join,right jion<br /> 内部连接 inner join 两表都满足的组合<br /> full outer 全连 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有<br /> A表没有的显示为(null)<br /> A表 left join B表 左连,以A表为基础,A表的全部数据,B表有的组合。没有的为null<br /> A表 right join B表 右连,以B表为基础,B表的全部数据,A表的有的组合。没有的为null</p>< p>查询分析器中执行:<br /> --建表table1,table2:<br /> create table table1(id int,name varchar(10))<br /> create table table2(id int,score int)<br /> insert into table1 select 1,'lee'<br /> insert into table1 select 2,'zhang'<br /> insert into table1 select 4,'wang'<br /> insert into table2 select 1,90<br /> insert into table2 select 2,100<br /> insert into table2 select 3,70<br /> 如表<br /> -------------------------------------------------<br /> table1|table2|<br /> -------------------------------------------------<br /> idname|idscore|<br /> 1lee|190|<br /> 2zhang|2100|<br /> 4wang|370|<br /> -------------------------------------------------</p>< p>以下均在查询分析器中执行</p>< p>一、外连接<br /> 1.概念:包括左向外联接、右向外联接或完整外部联接</p>< p>2.左连接:left join 或 left outer join<br /> (1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。<br /> (2)sql语句<br /> select * from table1 left join table2 on table1.id=table2.id<br /> -------------结果-------------<br /> idnameidscore<br /> ------------------------------<br /> 1lee190<br /> 2zhang2100<br /> 4wangNULLNULL<br /> ------------------------------<br /> 注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示</p>< p>3.右连接:right join 或 right outer join<br /> (1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。<br /> (2)sql语句<br /> select * from table1 right join table2 on table1.id=table2.id<br /> -------------结果-------------<br /> idnameidscore<br /> ------------------------------<br /> 1lee190<br /> 2zhang2100<br /> NULLNULL370<br /> ------------------------------<br /> 注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示</p>< p>4.完整外部联接:full join 或 full outer join< br /> (1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。<br /> (2)sql语句<br /> select * from table1 full join table2 on table1.id=table2.id<br /> -------------结果-------------<br /> idnameidscore<br /> ------------------------------<br /> 1lee190<br /> 2zhang2100<br /> 4wangNULLNULL<br /> NULLNULL370<br /> ------------------------------<br /> 注释:返回左右连接的和(见上左、右连接)</p>< p>二、内连接<br /> 1.概念:内联接是用比较运算符比较要联接列的值的联接</p>< p>2.内连接:join 或 inner join</p>< p>3.sql语句<br /> select * from table1 join table2 on table1.id=table2.id<br /> -------------结果-------------<br /> idnameidscore<br /> ------------------------------<br /> 1lee190<br /> 2zhang2100<br /> ------------------------------<br /> 注释:只返回符合条件的table1和table2的列</p>< p>4.等价(与下列执行效果相同)<br /> A:select a.*,b.* from table1 a,table2 b where a.id=b.id<br /> B:select * from table1 cross join table2 where table1.id=table2.id (注:cross join后加条件只能用where,不能用on)</p>< p>三、交叉连接(完全)</p>< p>1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)</p>< p>2.交叉连接:cross join (不带条件where...)</p>< p>3.sql语句<br /> select * from table1 cross join table2<br /> -------------结果-------------<br /> idnameidscore<br /> ------------------------------<br /> 1lee190<br /> 2zhang190<br /> 4wang190<br /> 1lee2100<br /> 2zhang2100<br /> 4wang2100<br /> 1lee370<br /> 2zhang370<br /> 4wang370<br /> ------------------------------<br /> 注释:返回3*3=9条记录,即笛卡尔积</p>http://www.downcc.com/tech/3925.htmlMySQL2012/04/24 14:11:42<p>你的用户可能会要求你增加一个导出整个数据库到sql文件的一个选项,当然phpMyAdmin或者Navicat可以做到这些,但是您的用户可能想要更简单的方法。</p>< p>创建一个名为backup.php的新文件,复制粘贴以下代码。如果需要的话,编辑数据库连接设置和mysqldump路径。为你的应用添加一个backup.php的超级连接。</p>< p>&lt;a href=&quot;back.php&quot;&gt;export the whole database&lt;/a&gt;</p>< p>请注意:为了保存和压缩转储文件,该脚本需要一个可写权限。如果你的脚本没有可写权限请使用第二个版本,唯一的缺点是无法压缩转储文件。</p>< p>有压缩版本需要可写权限:</p>< p>&lt;?php< br />& nbsp;< br /> $username=& quot;root&quot;;&nbsp;< br /> $password=& quot;&quot;;&nbsp;< br /> $hostname=& quot;localhost&quot;;&nbsp;< br /> $dbname&nbsp;&nbsp; =& quot;cars&quot;;< br />& nbsp;< br /> // if mysqldump is on the system path you do not need to specify the full path< br /> // simply use& quot;mysqldump --add-drop-table ...&quot; in this case< br /> $dumpfname= $dbname .& quot;_&quot; . date(&quot;Y-m-d_H-i-s&quot;).&quot;.sql&quot;;< br /> $command=& quot;C:\\xampp\\mysql\\bin\\mysqldump --add-drop-table --host=$hostname< br />& nbsp;&nbsp;&nbsp; --user=$username& quot;;< br /> if ($password)&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $command.=& quot;--password=&quot;. $password .&quot;& quot;;&nbsp;< br /> $command.= $dbname;< br /> $command.=& quot;& gt;& quot; . $dumpfname;< br /> system($command);< br />& nbsp;< br /> // zip the dump file< br /> $zipfname= $dbname .& quot;_&quot; . date(&quot;Y-m-d_H-i-s&quot;).&quot;.zip&quot;;< br /> $zip= new ZipArchive();< br /> if($zip-&gt;open($zipfname,ZIPARCHIVE::CREATE))&nbsp;< br /> {< br />& nbsp;&nbsp; $zip-&gt;addFile($dumpfname,$dumpfname);< br />& nbsp;&nbsp; $zip-&gt;close();< br /> }< br />& nbsp;< br /> // read zip file and send it to standard output< br /> if (file_exists($zipfname)) {< br />& nbsp;&nbsp;&nbsp; header('Content-Description: File Transfer');< br />& nbsp;&nbsp;&nbsp; header('Content-Type: application/octet-stream');< br />& nbsp;&nbsp;&nbsp; header('Content-Disposition: attachment; filename='.basename($zipfname));< br />& nbsp;&nbsp;&nbsp; flush();< br />& nbsp;&nbsp;&nbsp; readfile($zipfname);< br />& nbsp;&nbsp;&nbsp; exit;< br /> }< br /> ?&gt;</p>< p>没有压缩,不需要可写权限:</p>< p>&lt;?php< br /> ob_start();< br />& nbsp;< br /> $username=& quot;root&quot;;&nbsp;< br /> $password=& quot;&quot;;&nbsp;< br /> $hostname=& quot;localhost&quot;;&nbsp;< br /> $dbname&nbsp;&nbsp; =& quot;cars&quot;;< br />& nbsp;< br /> // if mysqldump is on the system path you do not need to specify the full path< br /> // simply use& quot;mysqldump --add-drop-table ...&quot; in this case< br /> $command=& quot;C:\\xampp\\mysql\\bin\\mysqldump --add-drop-table --host=$hostname< br />& nbsp;&nbsp;&nbsp; --user=$username& quot;;< br /> if ($password)&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $command.=& quot;--password=&quot;. $password .&quot;& quot;;&nbsp;< br /> $command.= $dbname;< br /> system($command);< br />& nbsp;< br /> $dump= ob_get_contents();&nbsp;< br /> ob_end_clean();< br />& nbsp;< br /> // send dump file to the output< br /> header('Content-Description: File Transfer');< br /> header('Content-Type: application/octet-stream');< br /> header('Content-Disposition: attachment; filename='.basename($dbname .& quot;_&quot; .&nbsp;< br />& nbsp;&nbsp;&nbsp; date(&quot;Y-m-d_H-i-s&quot;).&quot;.sql&quot;));< br /> flush();< br /> echo $dump;< br /> exit();]]&gt;< br /> ?&gt;</p>< p>原文地址:http://webcheatsheet.com/php/how_to_create_a_dump_of_mysql_database_in_one_click.php</p>http://www.downcc.com/tech/3745.htmlSQL Server2012/03/16 12:33:05<p>在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统、CPU是2.1GHz赛扬双核T3500,内存2.93GB。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="352" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123532812.jpg" /><br />< strong>安装SQL Server 2012的软硬件环境参数</strong></p>< p>根据微软的下载提示,32位的Windows 7操作系统,只需下载列表最下面的CHSx86SQLFULL_x86_CHS_Core.box、 CHSx86SQLFULL_x86_CHS_Intall.exe和CHSx86SQLFULL_x86_CHS_Lang.box三个安装包即可。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="357" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123532847.jpg" /><br />< strong>SQL Server 2012下载列表</strong></p>< p>将下载的这三个安装包放在同一个目录下,并双击打开可执行文件CHSx86SQLFULL_x86_CHS_Intall.exe。系统解压缩之后打开另 外一个安装文件夹SQLFULL_x86_CHS。打开该文件夹,并双击SETUP.EXE,开始安装SQL Server 2012。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="347" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123532758.jpg" /><br />< strong>双击SETUP.EXE,开始安装SQL Server 2012</strong></p>< p><strong>注:</strong>SQL Server 2012安装的硬件和软件的环境。</p>< p>软件环境:SQL Server 2012支持包括,Windows 7、Windows Server 2008 R2、Windows Server 2008 Service Pack 2和Windows Vista Service Pack 2。</p>< p>硬件环境:SQL Server 2012支持32位操作系统,至少1GHz或同等性能的兼容处理器,建议使用2GHz及以上的处理器的计算机;支持64位操作系统,1.4GHz或速度更快的处理器。最低支持1GB RAM,建议使用2GB或更大的RAM,至少2.2GB可用硬盘空间。</p>< p><strong>解析SQL Server 2012安装中心</strong></p>< p>当系统打开&ldquo;SQL Server安装中心&rdquo;,则说明我们可以开始正常的安装SQL Server 2012了。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123533174.jpg" /><br />< strong>SQL Server安装中心</strong></p>< p>在微软提供的&ldquo;SQL Server安装中心&rdquo;界面里,我们可以通过&ldquo;计划&rdquo;、&ldquo;安装&rdquo;、&ldquo;维护&rdquo;、&ldquo;工具&rdquo;、&ldquo;资源&rdquo;、&ldquo;高级&rdquo;、&ldquo;选项&rdquo;等进行系统安装、信息查看以及系统设置。</p>< p>首先,在&ldquo;计划&rdquo;里,我们可以单击相关的标题,在线查看安装SQL Server 2012的相关信息。如,硬件和软件要求、安全文档以及系统配置检查器和安全升级顾问等。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="352" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123533394.jpg" /><br />< strong>安装SQL Server 2012的硬件和软件要求</strong></p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="352" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123533119.jpg" /><br />< strong>安装SQL Server的安全注意事项</strong></p>< p><strong>SQL Server 2012安装前系统检查</strong></p>< p>在系统安装之前,务必通过&ldquo;系统配置检查器&rdquo;,检查一下您的系统中阻止SQL Server 2012成功安装的条件是什么,以减少安装过程中报错的几率。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123534658.jpg" /><br />< strong>系统开始检查配置</strong></p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="269" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123534725.jpg" /><br />< strong>系统配置检查结果的细节</strong></p>< p>如果网友需要升级安装,可以选择&ldquo;从SQL Server 2005、SQL Server 2008或SQL Server 2008 R2升级到SQL Server 2012&rdquo;。当网友做出这个选择的时候,系统会要求您提供一个旧版本的升级介质,同时系统会对此介质进行判断,然后系统还会谨慎的帮助您先做一次&ldquo;安装程 序支持规则&rdquo;的检查,提前搜索一下您还缺少哪些升级的条件。</p>< p>升级到SQL Server 2012的操作,不是本篇文章的重点,有兴趣的网友可以自己动手升级。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123534649.jpg" /></p>< p align="left"><strong>非集群环境安装SQL Server 2012</strong></p>< p>前面准备了这么久,下面开始演示全新安装SQL Server 2012的过程。选中下图右侧的第一项&ldquo;全新SQL Server独立安装或向现有安装添加功能&rdquo;,通过向导一步步在&ldquo;非集群环境&rdquo;中安装SQL Server 2012。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="376" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123534472.jpg" /><br />< strong>非集群环境中全新独立安装SQL Server 2012</strong></p>< p>同时,网友注意查看,系统默认的选择,是否是与自己的处理器类型相匹配,以及指定的安装介质根目录是否正确。</p>< p><strong><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123534758.jpg" /></strong><br />< strong>设置处理器类型和安装介质根目录</strong></p>< p><strong><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123534912.jpg" /><br /> 产品密钥</strong></p>< p><strong><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123534934.jpg" /><br /> SQL Server 2012许可条款</strong></p>< p><strong><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123535944.jpg" /><br /> 安装前的程序支持规则检查</strong></p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="250" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123535769.jpg" /><br /> 一个警告</p>< p>系统在检索的过程中提出一个警告,建议网友在问题解决之后才继续安装。当然,如果系统允许,也可以跳过继续安装。</p>< p><strong>安装SQL Server 2012前的设置</strong></p>< p>下面进入安装SQL Server 2012前的设置阶段。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123535619.jpg" /><br />< strong>设置角色</strong></p>< p>选择要安装的Evaluation功能,在勾选功能前的方框,也可以单击&ldquo;全选&rdquo;。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123535127.jpg" /><br />< strong>选择要安装的Evaluation功能</strong></p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123535148.jpg" /><br />< strong>再次检查系统是否符合&ldquo;安装规则&rdquo;</strong></p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123535858.jpg" /><br />< strong>实例安装</strong></p>< p>通过&ldquo;实例安装&rdquo;,网友可以指定SQL Server实例的名称和实例的ID,实例ID将成为安装路劲的一部分。</p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123535536.jpg" /><br />< strong>磁盘空间需求</strong></p>< p><img alt="小个小时成功安装SQL Server 2012图解教程_绿色资源网" width="500" height="375" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2012-3/2012316123536326.jpg" /><br />< strong>服务器配置</strong></p>< p>上图中蓝色阴影标记的两种服务,是此次SQL Server 2012新增的服务。</p>http://www.downcc.com/tech/3736.htmlSQL Server2012/03/15 15:27:05<p>刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:&quot;在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)& quot;搜MSDN,上面有一片机器翻译的文章,是在让人难以明白,现在总结如下:明白了SQL Server是个网络数据库就可迎刃而解了,简单的分为下面的集中情况。<br />< br /> 1. 数据库引擎没有启动。<br />< br /> 有两种启动方式:<br />< br /> (1)开始-&gt;程序-&gt;Microsoft SQL Server 2005-&gt;SQL Server 2005外围应用配置器,在打开的界面单击&quot;服务的连接的外围应用配置器&quot;,在打开的界面中找到Database Engine,单击&quot;服务&quot;,在右侧查看是否已启动,如果没有启动可单击&quot;启动&quot;,并确保&quot;启动类型&quot;为自动,不要为手动,否则下次开机时又要手动启动;<br />< br /> (2)可打开:开始-&gt;程序-&gt;Microsoft SQL Server 2005-&gt;配置工具-&gt;SQL Server Configuration Manager,选中SQL Server 2005服务中SQL Server(MSSQLSERVER) ,并单击工具栏中的&quot;启动服务&quot;按钮把服务状态改为启动;<br />< br /> 使用上面两种方式时,有时候在启动的时候可能会出现错误,不能启动,这时就要查看&quot;SQL Server 2005配置管理器&quot;中的SQL Server 2005网络配置-&gt;MSSQLSERVER协议中的VIA是否已启用,如果已启用,则把它禁止.然后再执行上述一种方式操作就可以了.<br />< br /> 2. 是否已经允许远程连接。<br />< br /> 这个部分可以简单的分为4个方面,分别是在 SQL Server上启用远程连接、启用SQL Server 浏览服务、在Windows 防火墙中为SQL Server 2005 创建例外和在Windows 防火墙中为&ldquo;SQLBrowser&rdquo;创建例外。下面是几个具体的操作方式,摘自MSDN,个人觉得文章的黑体部分应当特别的一起我们的注意。<br />< br /> 在SQLServer 实例上启用远程连接<br /> 1.指向&ldquo;开始-&gt;程序-&gt;Microsoft SQL Server 2005-&gt;配置工具-&gt;SQL Server 外围应用配置器&rdquo;<br /> 2.在&ldquo;SQL Server 2005 外围应用配置器&rdquo;页, 单击&ldquo;服务和连接的外围应用配置器&rdquo;<br /> 3.然后单击展开&ldquo;数据库引擎&rdquo;,选中&ldquo;远程连接&rdquo;,在右边选中&ldquo;本地连接和远程连接&rdquo;,<br /> 再选择要使用的协议,( 这个地方应当启用TCP/IP 和命名管道服务!)单击&ldquo;应用&rdquo;,您会看到下消息:<br />& ldquo;直到重新启动数据库引擎服务后,对连接设置所做的更改才会生效。&rdquo;,单击&ldquo;确定&rdquo;按钮返回<br /> 4.展开&ldquo;数据库引擎&rdquo;,选中&ldquo;服务&rdquo;,在右边单击&ldquo;停止&rdquo;,等到 MSSQLSERVER 服务停止,<br /> 然后单击&ldquo;启动&rdquo;,重新启动MSSQLSERVER 服务。<br />< br /> 启用 SQLServer 浏览器服务<br /> 1.指向&ldquo;开始-&gt;程序-&gt;Microsoft SQL Server 2005-&gt;配置工具-&gt;SQL Server 外围应用配置器&rdquo;<br /> 2.在&ldquo;SQL Server 2005 外围应用配置器&rdquo;页, 单击&ldquo;服务和连接的外围应用配置器&rdquo;<br /> 3.然后单击展开&ldquo;SQL Server Browser&rdquo;,选中&ldquo;服务&rdquo;,在右边&ldquo;启动类型&rdquo;选择&ldquo;自动&rdquo;,<br /> 再单击&ldquo;启动&rdquo;,单击&ldquo;确定&rdquo;按钮返回<br />< br /> 在Windows 防火墙中为&ldquo;SQL Server 2005&rdquo;创建例外<br /> 1.在 Windows 防火墙设置界面中,选择&ldquo; 例外&rdquo; 选项卡,然后单击&ldquo;添加程序&rdquo;<br /> 2.在&ldquo;添加程序窗口&rdquo;中单击&ldquo;浏览&rdquo;<br /> 3.然后找到&ldquo;C:/ProgramFiles/Microsoft Files/Microsoft SQL Server/ MSSQL.1 /MSSQL/Binn/sqlservr.exe&rdquo;,<br /> 单击&ldquo;确定&rdquo;返回<br /> 注意 : 路径可能会根据 SQL Server 2005 安装不同而不同。 MSSQL.1 是占位符,对应数据库实例ID。<br /> 4.对每个需要打开远程访问的SQL Server 2005 实例,重复步骤 1 至 3。<br />< br /> 在Windows 防火墙中为&ldquo;SQLBrowser&rdquo;创建例外<br /> 1.在 Windows 防火墙设置界面中,选择&ldquo; 例外&rdquo; 选项卡,然后单击&ldquo;添加程序&rdquo;<br /> 2.在&ldquo;添加程序窗口&rdquo;中单击&ldquo;浏览&rdquo;<br /> 3.然后找到&ldquo;C:/ProgramFiles/Microsoft Files/Microsoft SQL Server/90/Shared/sqlbrowser.exe&rdquo;,<br /> 单击&ldquo;确定&rdquo;返回<br /> 注意 : 路径可能会根据 SQL Server 2005 安装不同而不同。</p>< p>在使用.NET开发进行时,会遇到使用连接字符串连接SQL Server 2005数据库使用机器名称和localhost都能连接,但是使用IP地址却不能连接的问题,解决的办法是在SQL Server实例上启用本地和远程连接,并且在选择协议的时候使用TCP/IP和命名管道服务即可解决。</p>http://www.downcc.com/tech/3642.htmlSQL Server2012/02/28 19:06:16<p>解决SQL数据库日志已满的问题<br /> 1、右键数据库&rarr;属性&rarr;选项&rarr;故障还原模型&rarr;设为简单&rarr;确定;<br /> 2、右键数据库&rarr;所有任务&rarr;收缩数据库&rarr;确定;<br /> 3、右键数据库&rarr;属性&rarr;选项&rarr;故障还原模型&rarr;设为大容量日志记录&rarr;确定。<br />< br /> 二、复杂方法<br /> 1、清空日志<br /> DUMP TRANSACTION 库名 WITH NO_LOG<br /> 2、截断事务日志<br /> BACKUP LOG 数据库名 WITH NO_LOG<br /> 3、收缩数据库文件(如果不压缩,数据库的文件不会减小)<br /> 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件<br /> --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。<br /> --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了<br /> 也可以用SQL语句来完成<br /> --收缩数据库<br /> DBCC SHRINKDATABASE(客户资料)<br /> --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1)<br /> 4、为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)<br /> a.分离数据库<br /> 企业管理器--服务器--数据库--右键--分离数据库<br /> b.在我的电脑中删除LOG文件<br /> c.附加数据库<br /> 企业管理器--服务器--数据库--右键--附加数据库<br /> 此法将生成新的LOG,大小只有500多K<br /> 或用代码:<br /> 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。<br /> a.分离<br /> EXEC sp_detach_db @dbname = 'pubs'<br /> b.删除日志文件<br /> c.再附加<br /> EXEC sp_attach_single_file_db @dbname = 'pubs',@physname = 'c:\Program< br /> Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'<br /> 5、为了以后能自动收缩,做如下设置<br /> 企业管理器--服务器--右键数据库--属性--选项--选择&quot;自动收缩&quot;<br /> --SQL语句设置方式:<br /> EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'<br /> 6、如果想以后不让它日志增长得太大<br /> 企业管理器--服务器--右键数据库--属性--事务日志<br /> --将文件增长限制为xM(x是你允许的最大数据文件大小)<br /> --SQL语句的设置方式:<br /> alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)<br />< br /> 特别注意:<br /> 请按步骤进行,未进行前面的步骤,请不要做后面的步骤,否则可能损坏你的数据库。<br /> 一般不建议做第4、6两步,第4步不安全,有可能损坏数据库或丢失数据,第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复。<br />   日志文件满而造成SQL数据库无法写入文件时,可用两种方法:<br />   一种方法:清空日志。<br />   1.打开查询分析器,输入命令<br /> DUMP TRANSACTION 数据库名 WITH NO_LOG<br />   2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。<br />   另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。<br />   1: 删除LOG<br />   分离数据库 企业管理器->服务器->数据库->右键->分离数据库<br />   2:删除LOG文件<br />   附加数据库 企业管理器->服务器->数据库->右键->附加数据库<br />   此法生成新的LOG,大小只有500多K。<br />   注意:建议使用第一种方法。<br />   如果以后,不想要它变大。<br />   SQL2000下使用:<br />   在数据库上点右键-&gt;属性-&gt;选项-&gt;故障恢复-模型-选择-简单模型。<br />   或用SQL语句:<br /> alter database 数据库名 set recovery simple<br />   另外,Truncate log on checkpoint(此选项用于SQL7.0,SQL 2000中即故障恢复模型选择为简单模型)当执行CHECKPOINT 命令时如果事务日志文件超过其大小的70%< br /> 则将其内容清除在开发数据库时时常将此选项设置为True Auto shrink定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25%< br /> 当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将Truncate< br /> log on checkpoint 选项设为True 时才能进行。<br />   注意:一般立成建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满。<br /> 详解快速清除SQLServer日志的两种方.. Sqlserver 优化的方法 删除无效的SQL SERVER组的几种方法 sql server< br /> 添加数据库的方法 sql server平台用存储过程进行分页.. SQL SERVER的数据类型 获取SQL Server元数据的几种方法< br /> SQL Server的有效安装 ASP中server的方法 SQL Server导出导入数据方法 SQL Server各种日期计算方法之二< br /> SQL Server的备份与还原</p>http://www.downcc.com/tech/3641.htmlSQL Server2012/02/28 18:46:06<p>SQL2005安装过程提示com+目录问题警告处理<br />< br /> 安装sql2005一直失败,以为提示的问题是这个com+目录问题警告所致,找了很久找到这个问题的解决方案<br />< br /> sql2005_STD_X86在XPSP2下安装失败的一点经验软环境是XPSP2,安装SQL2005_STD_X86版。<br />< br /> 故障提示:<br /> 1。如果SQLServer安装程序失败,安装程序将回滚所安装的系统,但可能不会删除所有.manifest文件。解决方法是重命名这些文件,然后重新运行安装程序。<br />< br /> 有关详细信息,请参阅&ldquo;如何处理SQLServer安装过程中的COM+检查失败问题&rdquo;。如果未运行Microsoft分布式事务处理协调器(MSDTC),或者,在使用Microsoft群集服务器的情况下,如果MSDTC不是群集资源,则可能会发生COM+错误。COM+依赖于MSDTC,而IntegrationServices中的消息队列任务依赖于COM+。如果出现COM+错误,则只有将COM+系统正确配置后,IntegrationServices中的消息队列任务才可用。<br />< br /> 2。对性能监视器计数器注册表值执行系统配置检查失败。有关详细信息,请参阅自述文件或SQLServer联机丛书中的&ldquo;如何在SQLServer2005中为安装程序增加计数器注册表项值&rdquo;。<br />< br /> 安装中止。<br /> 查找联机丛书,有如下提示:<br /> 1。MicrosoftSQLServer2005安装程序检查COM+是否已正确配置。如果发现配置错误,安装程序仍将继续,但是在系统配置检查(SCC)报告中显示以下警告:<br />& ldquo;如果SQLServer安装程序失败,安装程序将回滚所进行的安装,但可能不会删除所有的.manifest文件。解决方法是重命名这些文件,然后重新运行安装程序。&rdquo;<br /> 如果未运行Microsoft分布式事务处理协调器(MSDTC),或者,在使用Microsoft群集服务器的情况下,如果MSDTC不是群集资源,则可能会发生COM+错误。COM+依赖于MSDTC,而IntegrationServices中的消息队列任务依赖于COM+。如果出现COM+错误,则只有将COM+系统正<br /> 确配置后,IntegrationServices中的消息队列任务才可用。<br /> 若要使用消息队列(亦称MSMQ),请确保MSDTC正在运行并且已正确配置。如果SQLServer安装在群集上,则MSDTC必须是群集资源。<br />< br /> 按照下列过程重新安装COM+。<br /> 安装组件服务管理单元<br /> 在Windows桌面上,单击&ldquo;开始&rdquo;,然后单击&ldquo;运行&rdquo;。<br /> 在&ldquo;打开&rdquo;框中,键入MMC,然后单击&ldquo;确定&rdquo;。<br /> 在&ldquo;控制台&rdquo;窗口中,单击菜单栏上的&ldquo;文件&rdquo;,然后单击&ldquo;添加/删除管理单元&rdquo;。<br /> 在&ldquo;添加/删除管理单元&rdquo;窗口,单击&ldquo;添加&rdquo;。<br /> 在&ldquo;添加独立管理单元&rdquo;窗口,从管理单元列表中选择&ldquo;组件服务&rdquo;,然后单击&ldquo;添加&rdquo;。<br /> 单击&ldquo;关闭&rdquo;以关闭&ldquo;添加独立管理单元&rdquo;窗口,然后单击&ldquo;确定&rdquo;以关闭&ldquo;添加/删除管理单元&rdquo;窗口。<br /> 在&ldquo;控制台根节点\组件服务&rdquo;窗口,展开&ldquo;组件服务&rdquo;树。这就是当COM+出现问题时,错误消息可能发生的地方。<br /> 再次运行SQLServer2005安装程序。如果收到错误消息,请重新安装COM+。<br />< br /> 重新安装COM+<br /> 从控制面板的&ldquo;添加或删除程序&rdquo;中,单击&ldquo;添加/删除Windows组件&rdquo;。<br /> 在&ldquo;Windows组件向导&rdquo;中,不对选择做任何更改,单击&ldquo;下一步&rdquo;。<br /> 一直单击以完成向导,然后再次运行SQLServer2005安装程序。<br /> 2。在SQLServer安装开始前,MicrosoftSQLServer安装程序中的安装配置检查器(SCC)会验证计数器注册表项的值。如果SCC无法验证现有的注册表项,或SCC无法运行lodctr.exe系统程序,则SCC检查会失败,致使安装受阻。<br /> 错误编辑注册表会严重损坏您的系统。更改注册表项之前,建议您备份计算机中的所有重要数据。<br />< br /> 手动设置计数器注册表项的增量<br /> 在MicrosoftWindows2003或WindowsXP桌面上,依次单击&ldquo;开始&rdquo;、&ldquo;运行&rdquo;,然后在&ldquo;打开&rdquo;中键入regedit.exe,再单击&ldquo;确定&rdquo;。在Windows2000中,使用regedt32.exe启动注册表编辑器。<br />< br /> 定位到以下注册表项:<br /> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Perflib]<br />& quot;LastCounter&quot;=dword:00000ed4(5276)<br />& quot;LastHelp&quot;=dword:00000ed5(5277)<br /> 上一步的&ldquo;LastCounter&rdquo;值(5276)必须与以下注册表项中&ldquo;Perflib\009&rdquo;的&ldquo;Counter&rdquo;项的最大值匹配,并且上一步的&ldquo;LastHelp&rdquo;值(5277)必须与以下注册表项中&ldquo;Perflib\009&rdquo;的&ldquo;Help&rdquo;项的最大值匹配。<br /> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Perflib\009]<br />< br /> 注意009是英文中的一个示例。&ldquo;LastCounter&rdquo;和&ldquo;LastHelp&rdquo;值是由Windows动态分配的;这两个值会因计算机的不同而不同。<br /> 如有必要,可修改&ldquo;\Perflib&rdquo;项中的&ldquo;LastCounter&rdquo;和&ldquo;LastHelp&rdquo;值的值:在右侧窗格中,右键单击&ldquo;LastCounter&rdquo;或&ldquo;LastHelp&rdquo;,单击&ldquo;修改&rdquo;,再单击&ldquo;Base=&quot;Decimal&quot;&rdquo;,在&ldquo;值数据&rdquo;中设置值,再单击&ldquo;确定&rdquo;。如有必要,对另一个项重复以上过程,然后关闭注册表编辑器。<br /> 再次运行SQLServer安装程序。<br /> 解决过程:<br /> COM+检查失败不用说肯定是组件消息队列下的组件没安装或服务没启动。本机没有安装过消息队列,找出系统盘安装消息队列组件,在组件安装中提示MSDTC服务没有启动,在这步晕了长很时间,MSTDC在服务中怎么也找不到,后来想会不会是DTC(脑子有点笨,其实从MSMQ这名称上就应该想到),一看果然有DistributedTransactionCoordinator(DTC),但是这个服务启动不了,后来查找相关资料:MSDTC(DistributedTransactionCoordinator)服务必须在NTAUTHORITY\NetworkService帐户下运行;即使是NTAUTHORITY\NetworkService(注意,Network和Service中间有空格)也不行(至于这两个帐户的区别,在网上也没有找到,还望大家不吝赐教)。如果登录帐户被更改,MSDTC服务会继续运行,但是在执行的时候可能会出错。而且,在事件日志的&ldquo;应用程序&rdquo;里面可以发现如下的出错信息:<br />< br /> 正在运行MSDTC服务的帐户无效。如果使用MicrosoftManagementConsole(MMC)中的&ldquo;服务&rdquo;管理单元更改了服务帐户信息,就会发生这种情况。MSDTC服务将继续启动。请确认使用&ldquo;组件服务管理器&rdquo;更新了MSDTC服务帐户信息。<br /> 要更改成正确的登录帐户,我们可以:<br /> 在服务中找到DistributedTransactionCoordinator服务,选择&ldquo;属性&rdquo;;<br /> 在&ldquo;登录&rdquo;选项卡中,选择&ldquo;此帐户&rdquo;,帐户名填写&ldquo;NTAUTHORITY\NetworkService&rdquo;,密码为空;<br /> 在点击&ldquo;确定&rdquo;后重新启动服务。<br /> 或者,在命令行下运行msdtc-uninstall,卸载msdtc服务;<br /> 再运行msdtc-install,安装msdtc服务。<br /> MSTDC服务成功启动,组件服务中&ldquo;COM+应用程序&rdquo;可以访问,上面第2项故障没去解决,先试着安装看看有没有错误,令人惊喜,安装检查一切顺利,第2项错误同时也解决了。<br />< br /> 当然,解决问题的过程同样的系统环境也不尽相同,在这里谈一下我安装的小挫折,希望可以给碰到相同问题的朋友有些提示作用。<br />< br />< br /> sql2005安装过程owc11错误处理<br />< br /> 最近安装了很久的sql2005,过程中间出现很多问题,之前的com+目录警告是一个部分,处理过之后还是发现一直无法安装成功,(为此我安装了10+)次才解决问题在安装过程中发现以下错误<br /> Product:OWC11<br /> Error:错误1706。安装程序找不到需要的文件。请检查网络连接或CD-ROM驱动器状态。对于这个问题的其他可能的解决方案,请参阅C:\ProgramFiles\MicrosoftOffice\OFFICE11\2052\SETUP.CHM。<br /> ------------------------------------------------------------------------------<br /> --<br /> 发现自己的ocw11没有安装导致服务器的有关组件全部无法安装,每次都是安装失败,在microsoftocw11下载地址<br />< br /> 找到microsoft的ocw11,选择简体中文后下载安装后发现还是出现相同的问题,把下载下来的ocw11解压缩后观察该ocw11.xml,发现sql2005的server的setup目录下面有相同文件名文件,再次逐次对比发现该ocw11里面的文件包里面的文件对应的setup里面全部都有,不过发现2个chm的后缀不同,一个是10XX,一个是2052,呵呵,原来是版本不同直接运行setup目录下面的setup,选择修复或全新安装全部提示错误的文件源,再次观察,把setup目录下面对应的的ocw11文件全部拷贝到硬盘上面,再次运行修复成功,之后安装sql2005终于一路成功,困扰了我2天的问题终于解决,特此把本文于全体学习sql2005的朋友分享,希望大家少走弯路.一起交流sql的有关功能</p>http://www.downcc.com/tech/3640.htmlSQL Server2012/02/28 18:41:33<p>SQL重复记录查询(转载)<br /> 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断<br /> select * from people<br /> where peopleId in (select peopleId from people group by peopleId having count(peopleId)& gt; 1)<br />< br /> 例二:<br /> select * from testtable<br /> where numeber in (select number from people group by number having count(number)& gt; 1 )<br /> 可以查出testtable表中number相同的记录<br />< br /> 2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录<br /> delete from people< br /> where peopleId in (select peopleId from people group by peopleId having count(peopleId)& gt; 1)<br /> and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )&gt;1)<br />< br /> 3、查找表中多余的重复记录(多个字段)< br /> select * from vitae a<br /> where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)& gt; 1)<br />< br /> 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录<br /> delete from vitae a<br /> where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)& gt; 1)<br /> and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)&gt;1)<br />< br />< br /> 5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录<br /> select * from vitae a<br /> where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)& gt; 1)<br /> and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)&gt;1)<br />< br /> (二)<br /> 比方说<br /> 在A表中存在一个字段&ldquo;name&rdquo;,<br /> 而且不同记录之间的&ldquo;name&rdquo;值有可能会相同,<br /> 现在就是需要查询出在该表中的各记录之间,&ldquo;name&rdquo;值存在重复的项;<br /> Select Name,Count(*) From A Group By Name Having Count(*)& gt; 1<br />< br /> 如果还查性别也相同大则如下:<br /> Select Name,sex,Count(*) From A Group By Name,sex Having Count(*)& gt; 1<br />< br />< br /> (三)<br /> 方法一<br />< br /> declare @max integer,@id integer<br />< br /> declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*)& gt;; 1<br />< br /> open cur_rows<br />< br /> fetch cur_rows into @id,@max<br />< br /> while @@fetch_status=0<br />< br /> begin<br />< br /> select @max = @max -1<br />< br /> set rowcount @max<br />< br /> delete from 表名 where 主字段 = @id<br />< br /> fetch cur_rows into @id,@max<br />< br /> end<br />< br /> close cur_rows<br />< br /> set rowcount 0<br />< br /> 方法二<br />< br />   有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。<br />< br /> 1、对于第一种重复,比较容易解决,使用<br />< br /> select distinct * from tableName<br />< br /> 就可以得到无重复记录的结果集。<br />< br /> 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除<br />< br /> select distinct * into #Tmp from tableName<br />< br /> drop table tableName<br />< br /> select * into tableName from #Tmp<br />< br /> drop table #Tmp<br />< br /> 发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。<br />< br /> 2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下<br />< br /> 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集<br />< br /> select identity(int,1,1) as autoID, * into #Tmp from tableName<br />< br /> select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID<br />< br /> select * from #Tmp where autoID in(select autoID from #tmp2)<br />< br /> 最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)<br />< br /> (四)<br />< br /> 查询重复<br />< br /> select * from tablename where id in (<br />< br /> select id from tablename< br />< br /> group by id< br />< br /> having count(id)& gt; 1<br />< br /> )</p>http://www.downcc.com/tech/3496.htmlSQL Server2012/01/29 12:19:05<p>--1、查找员工的编号、姓名、部门和出生日期,如果出生日期为空值,< br /> --显示日期不详,并按部门排序输出,日期格式为yyyy-mm-dd。< br /> select emp_no ,emp_name ,dept ,< br /> isnull(convert(char(10),birthday,120),'日期不详') birthday< br /> from employee< br /> order by dept</p>< p>--2、查找与喻自强在同一个单位的员工姓名、性别、部门和职称< br /> select emp_no,emp_name,dept,title< br /> from employee< br /> where emp_name&lt;&gt;'喻自强' and dept in< br /> (select dept from employee< br /> where emp_name='喻自强')</p>< p>--3、按部门进行汇总,统计每个部门的总工资< br /> select dept,sum(salary)< br /> from employee< br /> group by dept</p>< p>--4、查找商品名称为14寸显示器商品的销售情况,< br /> --显示该商品的编号、销售数量、单价和金额< br /> select a.prod_id,qty,unit_price,unit_price*qty totprice< br /> from sale_item a,product b< br /> where a.prod_id=b.prod_id and prod_name='14寸显示器'</p>< p>--5、在销售明细表中按产品编号进行汇总,统计每种产品的销售数量和金额< br /> select prod_id,sum(qty) totqty,sum(qty*unit_price) totprice< br /> from sale_item< br /> group by prod_id</p>< p>--6、使用convert函数按客户编号统计每个客户1996年的订单总金额< br /> select cust_id,sum(tot_amt) totprice< br /> from sales< br /> where convert(char(4),order_date,120)='1996'< br /> group by cust_id</p>< p>--7、查找有销售记录的客户编号、名称和订单总额< br /> select a.cust_id,cust_name,sum(tot_amt) totprice< br /> from customer a,sales b< br /> where a.cust_id=b.cust_id< br /> group by a.cust_id,cust_name</p>< p>--8、查找在1997年中有销售记录的客户编号、名称和订单总额< br /> select a.cust_id,cust_name,sum(tot_amt) totprice< br /> from customer a,sales b< br /> where a.cust_id=b.cust_id and convert(char(4),order_date,120)='1997'< br /> group by a.cust_id,cust_name</p>< p>--9、查找一次销售最大的销售记录< br /> select order_no,cust_id,sale_id,tot_amt< br /> from sales< br /> where tot_amt=< br /> (select max(tot_amt)< br /> from sales)</p>< p>--10、查找至少有3次销售的业务员名单和销售日期< br /> select emp_name,order_date< br /> from employee a,sales b< br /> where emp_no=sale_id and a.emp_no in< br /> (select sale_id< br /> from sales< br /> group by sale_id< br /> having count(*)&gt;=3)< br /> order by emp_name</p>< p>--11、用存在量词查找没有订货记录的客户名称< br /> select cust_name< br /> from customer a< br /> where not exists< br /> (select *< br /> from sales b< br /> where a.cust_id=b.cust_id)</p>< p>--12、使用左外连接查找每个客户的客户编号、名称、订货日期、订单金额< br /> --订货日期不要显示时间,日期格式为yyyy-mm-dd< br /> --按客户编号排序,同一客户再按订单降序排序输出< br /> select a.cust_id,cust_name,convert(char(10),order_date,120),tot_amt< br /> from customer a left outer join sales b on a.cust_id=b.cust_id< br /> order by a.cust_id,tot_amt desc</p>< p>--13、查找16M DRAM的销售情况,要求显示相应的销售员的姓名、< br /> --性别,销售日期、销售数量和金额,其中性别用男、女表示< br /> select emp_name 姓名, 性别= case a.sex when 'm' then '男'< br /> when 'f' then '女'< br /> else '未'< br /> end,< br /> 销售日期= isnull(convert(char(10),c.order_date,120),'日期不详'),< br /> qty 数量, qty*unit_price as 金额< br /> from employee a, sales b, sale_item c,product d< br /> where d.prod_name='16M DRAM' and d.prod_id=c.prod_id and< br /> a.emp_no=b.sale_id and b.order_no=c.order_no</p>< p>--14、查找每个人的销售记录,要求显示销售员的编号、姓名、性别、< br /> --产品名称、数量、单价、金额和销售日期< br /> select emp_no 编号,emp_name 姓名, 性别= case a.sex when 'm' then '男'< br /> when 'f' then '女'< br /> else '未'< br /> end,< br /> prod_name 产品名称,销售日期= isnull(convert(char(10),c.order_date,120),'日期不详'),< br /> qty 数量, qty*unit_price as 金额< br /> from employee a left outer join sales b on a.emp_no=b.sale_id , sale_item c,product d< br /> where d.prod_id=c.prod_id and b.order_no=c.order_no</p>< p>--15、查找销售金额最大的客户名称和总货款< br /> select cust_name,d.cust_sum< br /> from customer a,< br /> (select cust_id,cust_sum< br /> from (select cust_id, sum(tot_amt) as cust_sum< br /> from sales< br /> group by cust_id ) b< br /> where b.cust_sum =< br /> ( select max(cust_sum)< br /> from (select cust_id, sum(tot_amt) as cust_sum< br /> from sales< br /> group by cust_id ) c )< br /> ) d< br /> where a.cust_id=d.cust_id</p>< p>--16、查找销售总额少于1000元的销售员编号、姓名和销售额< br /> select emp_no,emp_name,d.sale_sum< br /> from employee a,< br /> (select sale_id,sale_sum< br /> from (select sale_id, sum(tot_amt) as sale_sum< br /> from sales< br /> group by sale_id ) b< br /> where b.sale_sum& lt;1000< br /> ) d< br /> where a.emp_no=d.sale_id</p>< p>--17、查找至少销售了3种商品的客户编号、客户名称、商品编号、商品名称、数量和金额< br /> select a.cust_id,cust_name,b.prod_id,prod_name,d.qty,d.qty*d.unit_price< br /> from customer a, product b, sales c, sale_item d< br /> where a.cust_id=c.cust_id and d.prod_id=b.prod_id and< br /> c.order_no=d.order_no and a.cust_id in (< br /> select cust_id< br /> from (select cust_id,count(distinct prod_id) prodid< br /> from (select cust_id,prod_id< br /> from sales e,sale_item f< br /> where e.order_no=f.order_no) g< br /> group by cust_id< br /> having count(distinct prod_id)&gt;=3) h )</p>< p>--18、查找至少与世界技术开发公司销售相同的客户编号、名称和商品编号、商品名称、数量和金额< br /> select a.cust_id,cust_name,d.prod_id,prod_name,qty,qty*unit_price< br /> from customer a, product b, sales c, sale_item d< br /> where a.cust_id=c.cust_id and d.prod_id=b.prod_id and< br /> c.order_no=d.order_no and not exists< br /> (select f.*< br /> from customer x ,sales e, sale_item f< br /> where cust_name='世界技术开发公司' and x.cust_id=e.cust_id and< br /> e.order_no=f.order_no and not exists< br /> ( select g.*< br /> from sale_item g, sales h< br /> where g.prod_id = f.prod_id and g.order_no=h.order_no and< br /> h.cust_id=a.cust_id)< br /> )</p>< p>19、查找表中所有姓刘的职工的工号,部门,薪水< br /> select emp_no,emp_name,dept,salary< br /> from employee< br /> where emp_name like '刘%'</p>< p>20、查找所有定单金额高于2000的所有客户编号< br /> select cust_id< br /> from sales< br /> where tot_amt&gt;2000</p>< p>21、统计表中员工的薪水在4000-6000之间的人数< br /> select count(*)as 人数< br /> from employee< br /> where salary between 4000 and 6000</p>< p>22、查询表中的同一部门的职工的平均工资,但只查询"住址"是"上海市"的员工< br /> select avg(salary) avg_sal,dept< br /> from employee< br /> where addr like '上海市%'< br /> group by dept</p>< p>23、将表中住址为&quot;上海市&quot;的员工住址改为&quot;北京市&quot;< br /> update employee< br /> set addr like '北京市'< br /> where addr like '上海市'</p>< p>24、查找业务部或会计部的女员工的基本信息。< br /> select emp_no,emp_name,dept< br /> from employee< br /> where sex='F'and dept in ('业务','会计')</p>< p>25、显示每种产品的销售金额总和,并依销售金额由大到小输出。< br /> select prod_id ,sum(qty*unit_price)< br /> from sale_item< br /> group by prod_id< br /> order by sum(qty*unit_price) desc</p>< p>26、选取编号界于'C0001'和'C0004'的客户编号、客户名称、客户地址。< br /> select CUST_ID,cust_name,addr< br /> from customer< br /> where cust_id between 'C0001' AND 'C0004'</p>< p>27、计算出一共销售了几种产品。< br /> select count(distinct prod_id) as '共销售产品数'< br /> from sale_item</p>< p>28、将业务部员工的薪水上调3%。< br /> update employee< br /> set salary=salary*1.03< br /> where dept='业务'</p>< p>29、由employee表中查找出薪水最低的员工信息。< br /> select *< br /> from employee< br /> where salary=< br /> (select min(salary )< br /> from employee )</p>< p>30、使用join查询客户姓名为&quot;客户丙&quot;所购货物的&quot;客户名称&quot;,&quot;定单金额&quot;,&quot;定货日期&quot;,&quot;电话号码&quot;< br /> select a.cust_id,b.tot_amt,b.order_date,a.tel_no< br /> from customer a join sales b< br /> on a.cust_idhttp://www.downcc.com/tech/3418.htmlMySQL2011/12/25 15:05:47<div >< p>常用的MySQL命令大全</p>< p>一、连接MySQL<br /> 格式: mysql -h主机地址 -u用户名 -p用户密码<br /> 1、例1:连接到本机上的MYSQL。<br /> 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql&gt;。<br /> 2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:<br /> mysql -h110.110.110.110 -uroot -pabcd123<br /> (注:u与root可以不用加空格,其它也一样)<br /> 3、退出MYSQL命令: exit (回车)。</p>< /div>< p><strong> 修改mYSQL 管理员密码</strong></p>< p>二、修改密码<br /> 格式:mysqladmin -u用户名 -p旧密码 password 新密码<br /> 1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令:<br /> mysqladmin -uroot -password ab12<br /> 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。<br /> 2、例2:再将root的密码改为djg345。<br /> mysqladmin -uroot -pab12 password djg345<br />& nbsp;</p>< p><strong>增加新用</strong></p>< p>三、增加新用户。(注意:和上面不同,下面的因为是MySQL环境中的命令,所以后面都带一个分号作为命令结束符)<br /> 格式:grant select on 数据库.* to 用户名@登录主机 identified by \&quot;密码\&quot;<br /> 例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:<br /> grant select,insert,update,<br /> delete on *.* to test2@localhost identified by \&quot;abc\&quot;;<br /> 如果你不想test2有密码,可以再打一个命令将密码消掉。<br /> grant select,insert,update,delete on mydb<br /> .* to test2@localhost identified by \&quot;\&quot;;<br /> 在上面讲了登录、增加用户、密码更改等问题。下面我们来看看MySQL中有关数据库方面的操作。注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。<br /> 1、MySQL常用命令<br /> create database name; 创建数据库<br /> use databasename; 选择数据库<br /> drop database name 直接删除数据库,不提醒<br /> show tables; 显示表<br /> describe tablename; 表的详细描述<br /> select 中加上distinct去除重复字段<br /> mysqladmin drop database name 删除数据库前,有提示。<br /> 显示当前mysql版本和当前日期<br /> select version(),current_date;<br /> 2、修改mysql中root的密码:<br /> shell&gt;mysql -u root -p<br /> mysql&gt; update user set password=password(&rdquo;xueok654123&Prime;) where user=&rsquo;root&rsquo;;<br /> mysql&gt; flush privileges //刷新数据库<br /> mysql&gt;use dbname; 打开数据库:<br /> mysql&gt;show databases; 显示所有数据库<br /> mysql&gt;show tables; 显示数据库mysql中所有的表:先use mysql;然后<br /> mysql&gt;describe user; 显示表mysql数据库中user表的列信息);<br /> 3、grant<br /> 创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个<br /> mysql&gt; grant all privileges on *.* to user@localhost identified by& rsquo;something&rsquo; with<br /> 增加新用户<br /> 格式:grant select on 数据库.* to 用户名@登录主机 identified by& ldquo;密码&rdquo;<br /> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY& rsquo;something&rsquo; WITH GRANT OPTION;<br /> GRANT ALL PRIVILEGES ON *.* TO monty@&rdquo;%&rdquo; IDENTIFIED BY& rsquo;something&rsquo; WITH GRANT OPTION;<br /> 删除授权:<br /> mysql&gt; revoke all privileges on *.* from root@&rdquo;%&rdquo;;<br /> mysql&gt; delete from user where user=&rdquo;root&rdquo; and host=&rdquo;%&rdquo;;<br /> mysql&gt; flush privileges;<br /> 创建一个用户custom在特定客户端it363.com登录,可访问特定数据库fangchandb<br /> mysql& gt;grant select, insert, update, delete, create,drop on fangchandb.* to custom@ it363.com identified by& lsquo; passwd&rsquo;<br /> 重命名表:<br /> mysql& gt; alter table t1 rename t2;<br /> 4、mysqldump</p>< p><strong>恢复、备份数据库</strong></p>< p>备份数据库<br /> shell&gt; mysqldump -h host -u root -p dbname& gt;dbname_backup.sql<br /> 恢复数据库<br /> shell&gt; mysqladmin -h myhost -u root -p create dbname<br /> shell&gt; mysqldump -h host -u root -p dbname& lt; dbname_backup.sql<br /> 如果只想卸出建表指令,则命令如下:<br /> shell&gt; mysqladmin -u root -p -d databasename& gt; a.sql<br /> 如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下:<br /> shell&gt; mysqladmin -u root -p -t databasename& gt; a.sql<br /> 那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢?<br />    mysqldump -T./ phptest driver<br /> 其中,只有指定了-T参数才可以卸出纯文本文件,表示卸出数据的目录,./表示当前目录,即与mysqldump同一目录。如果不指定driver 表,则将卸出整个数据库的数据。每个表会生成两个文件,一个为.sql文件,包含建表执行。另一个为.txt文件,只包含数据,且没有sql指令。<br /> 5、可将查询存储在一个文件中并告诉mysql从文件中读取查询而不是等待键盘输入。可利用外壳程序键入重定向实用程序来完成这项工作。例如,如果在文件my_file.sql 中存放有查<br /> 询,可如下执行这些查询:<br /> 例如,如果您想将建表语句提前写在sql.txt中:<br /> mysql& gt; mysql -h myhost -u root -p database& lt; sql.txt<br /> 1、安装环境:<br /> Windows XP<br /> Mysql 4.0.17 从 下次就需要用mysql -uroot -proot才可以登陆<br /> 在远程或本机可以使用 mysql -h 172.5.1.183 -uroot 登陆,这个根据第二行的策略确定<br /> 权限修改生效:<br /> 1)net stop mysql<br /> net start mysql<br /> 2)c:\mysql\bin\mysqladmin flush-privileges<br /> 3)登陆mysql后,用flush privileges语句<br /> 6、创建数据库staffer<br /> create database staffer;<br /> 7、下面的语句在mysql环境在执行<br /> 显示用户拥有权限的数据库 show databases;<br /> 切换到staffer数据库 use staffer;<br /> 显示当前数据库中有权限的表 show tables;<br /> 显示表staffer的结构 desc staffer;<br /> 8、创建测试环境<br /> 1)创建数据库staffer<br /> mysql&gt; create database staffer<br /> 2)创建表staffer,department,position,depart_pos<br /> create table s_position<br /> (<br /> id int not null auto_increment,<br /> name varchar(20) not null default '经理', #设定默认值<br /> description varchar(100),<br /> primary key PK_positon (id) #设定主键<br /> );< br /> create table department<br /> (<br /> id int not null auto_increment,<br /> name varchar(20) not null default '系统部', #设定默认值<br /> description varchar(100),<br /> primary key PK_department (id) #设定主键<br /> );<br /> create table depart_pos<br /> (<br /> department_id int not null,<br /> position_id int not null,<br /> primary key PK_depart_pos (department_id,position_id) #设定复和主键<br /> );<br /> create table staffer<br /> (<br /> id int not null auto_increment primary key, #设定主键<br /> name varchar(20) not null default '无名氏', #设定默认值<br /> department_id int not null,<br /> position_id int not null,<br /> unique (department_id,position_id) #设定唯一值<br /> );<br /> 3)删除<br /> mysql&gt;<br /> drop table depart_pos;<br /> drop table department;<br /> drop table s_position;<br /> drop table staffer;<br /> drop database staffer;<br /> 9、修改结构<br /> mysql&gt;<br /> #表position增加列test<br /> alter table position add(test char(10));<br /> #表position修改列test<br /> alter table position modify test char(20) not null;<br /> #表position修改列test默认值<br /> alter table position alter test set default 'system';<br /> #表position去掉test默认值<br /> alter table position alter test drop default;<br /> #表position去掉列test<br /> alter table position drop column test;<br /> #表depart_pos删除主键<br /> alter table depart_pos drop primary key;<br /> #表depart_pos增加主键<br /> alter table depart_pos add primary key PK_depart_pos (department_id,position_id);</p>< p><strong>操作数据</strong></p>< p>10、操作数据<br /> #插入表department<br /> insert into department(name,description) values('系统部','系统部');<br /> insert into department(name,description) values('公关部','公关部');<br /> insert into department(name,description) values('客服部','客服部');<br /> insert into department(name,description) values('财务部','财务部');<br /> insert into department(name,description)http://www.downcc.com/tech/3417.htmlSQL Server2011/12/25 14:57:18<p>第一步:打开你的&quot;开始菜单&quot;,打开&ldquo;程序&rdquo;-》SQL server enterprise mananger& quot;企业管理器&quot;< br /> 在你要导出的SQL数据库上鼠标右键菜单:所有任务-》导出数据</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库1_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515021349.jpg" /></p>< p>第二步:会出现一个导出向导窗口。<br /> 选择被导出的数据源,为你刚才所选择的数据库,如果发现不对应自行修改。</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库2_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515028692.jpg" /></p>< p>第三步:进入导出到目标数据源的选择,这里我们要转成ACCESS的数据库。注意选择数据源类型为&ldquo;Microsoft Access。点& ldquo;文件名(F)&rdquo; 后面的按钮选择目标.MDB文件。</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库3_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515028379.jpg" /></p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库4_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515028177.jpg" /></p>< p>第四步:选择&ldquo;从数据库复制表和视图&rdquo;。</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库5_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515029634.jpg" /></p>< p>第五步:我们注意这里选表的时候右边有一个&ldquo;转换&rdquo;列。SQL导出只转换数据类型并不考虑其他脚本所以我们遇到的自动编号问题也就出在这里。有自动编号的一定要点选&ldquo;转换&rdquo;。</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库6_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515030712.jpg" /></p>< p>第六步:我们回看到一个&ldquo;列映射和转换&rdquo;对话框。有注意到自增的employeeid int 自增这里变成了Access里的long这肯定不对,long并不是自动编号,只好修改建表脚本,图片上那个红圈里的按钮&ldquo;编辑SQL&rdquo;。</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库7_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515030333.jpg" /></p>< p>开一个小窗create talbe</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库8_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515031357.jpg" /></p>< p>红圈中的脚本就是employeeid 的 Access建表脚本,在& quot;NOT NULL&quot; 前面加上& quot;IDENTITY (1, 1)&quot;。</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库9_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515031339.jpg" /></p>< p>第七步:立即执行。</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库10_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515031213.jpg" /></p>< p>下图表示建表复制已成功</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库11_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515031163.jpg" /></p>< p>第八步:我们打开MDB文件看看是不是如我们所愿?</p>< p style="text-indent: 0px"><img alt="SQL SERVER 2000数据库12_绿色资源网" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-12/2011122515031770.jpg" /></p>< p>OK完成,恭喜你操作成功</p>http://www.downcc.com/tech/3415.htmlSQL Server2011/12/25 14:29:29<p>今天用SQL Server的Microsoft OLE DB提供程序和ODBC的Microsoft OLE DB提供程序两种不同的方法链接了一下SQL Server数据库,却发现了一个以前从来没有注意到的问题。</p>< p>就是在使用conn.execute的时候:使用第一种方式是完全正常的,但是使用ODBC的方式却在某些情况下一些数据不能读取(或者说读取为空值),具体的原因不清楚,查了好久也没发现区别在哪里。后来还是用了第一种方式。</p>< p>注:在SQL Server 2000和SQL Server 2005数据库下问题一样。</p>< p><strong>第一种:OLE DB或OleDbConnection (.NET)方式</strong>< br /> (使用SQL Server的Microsoft OLE DB提供程序)<br /> Provider=sqloledb; Data Source=服务器IP; Initial Catalog=数据库名; User Id=用户名; Password=密码;</p>< p><strong>第二种:ODBC方式(使用ODBC的Microsoft OLE DB提供程序)</strong><br /> Driver={SQL Server}; Server=服务器IP; Database=数据库名; Uid=用户名; Pwd=密码;</p>< p><strong>第三种:DSN方式</strong><br /> DSN=DSN名; Uid=用户名; Pwd=密码;</p>< p><strong>第四种:SqlConnection(.NET)方式< br />< /strong>Data Source=服务器IP; Initial Catalog=数据库名; User ID=用户名; Password=密码;</p>http://www.downcc.com/tech/3414.htmlSQL Server2011/12/25 14:27:07<p>下列语句部分是Mssql语句,不可以在access中使用。</p>< p>SQL分类:</p>< p>DDL类型包括数据库、表的创建,修改,删除,声明&mdash;数据定义语言(CREATE,ALTER,DROP,DECLARE)</p>< p>DML类型包括数据表中记录的查询,删除,修改,插入&mdash;数据操纵语言(SELECT,DELETE,UPDATE,INSERT)</p>< p>DCL类型包括数据库用户赋权,废除用户访问权限, 提交当前事务,中止当前事务&mdash;数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)</p>< p>首先,简要介绍基础语句:</p>< p>1、说明:创建数据库</p>< p>CREATE DATABASE db1(db1代表数据库表,可自命名)</p>< p>2、说明:删除数据库</p>< p>drop database db1(db1代表数据库表,可自命名)</p>< p>3、说明:备份sql server</p>< p>--- 创建 备份数据的 device</p>< p>USE master</p>< p>EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'</p>< p>--- 开始 备份</p>< p>BACKUP DATABASE pubs TO testBack</p>< p>4、说明:创建新表</p>< p>create table tb1(Id&nbsp;int not null primary key,name varchar,..)(tb1为数据表名,ID为字段,int为数据类型整型,not null为数据是否可为空,Primary Key为主键设置,其中not null,primary key为可选项,字段,数据类型自定义。)</p>< p>根据已有的表创建新表:</p>< p>A:create table tab_new like tab_old (使用旧表创建新表)</p>< p>B:create table tab_new as select col1,col2&hellip; from tab_old definition only</p>< p>5、说明:</p>< p>删除新表:drop table tb1</p>< p>6、说明:</p>< p>增加一个列:Alter table tabname add column col type</p>< p>注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。</p>< p>7、说明:</p>< p>添加主键:Alter table tabname add primary key(ID)(设置某字段为主键,ID可自由设置,主键数据不可重复)</p>< p>说明:</p>< p>删除主键:Alter table tabname drop primary key(ID)(删除某字段主键)</p>< p>8、说明:</p>< p>创建索引:create [unique] index idxname on tabname(col&hellip;.)</p>< p>删除索引:drop index idxname</p>< p>注:索引是不可更改的,想更改必须删除重新建。</p>< p>9、说明:</p>< p>创建视图:create view viewname as select statement</p>< p>删除视图:drop view viewname</p>< p>10、说明:几个简单的基本的sql语句</p>< p>选择:select * from table1 where Id=1(Id=1为条件语句,根据自己情况自定义)</p>< p>插入:insert into table1(field1,field2) values(value1,value2)</p>< p>删除:delete from table1 where 范围</p>< p>更新:update table1 set field1=value1 where 范围</p>< p>查找:select * from table1 where field1 like& rsquo;%value1%&rsquo; ---like的语法很精妙,查资料!</p>< p>排序:select * from table1 order by field1,field2 [desc]</p>< p>总数:select count * as totalcount from table1</p>< p>求和:select sum(field1) as sumvalue from table1</p>< p>平均:select avg(field1) as avgvalue from table1</p>< p>最大:select max(field1) as maxvalue from table1</p>< p>最小:select min(field1) as minvalue from table1</p>< p>11、说明:几个高级查询运算词</p>< p>A: UNION 运算符</p>< p>UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。</p>< p>B: EXCEPT 运算符</p>< p>EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。</p>< p>C: INTERSECT 运算符</p>< p>INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。</p>< p>注:使用运算词的几个查询结果行必须是一致的。</p>< p>12、说明:使用外连接</p>< p>A、left outer join:</p>< p>左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。</p>< p>SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c</p>< p>B:right outer join:</p>< p>右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。</p>< p>C:full outer join:</p>< p>全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。</p>< p>其次,大家来看一些不错的sql语句</p>< p>1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)</p>< p>法一:select * into b from a where 1&lt;&gt;1</p>< p>法二:select top 0 * into b from a</p>< p>2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)</p>< p>insert into b(a, b, c) select d,e,f from b;</p>< p>3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)</p>< p>insert into b(a, b, c) select d,e,f from b in& lsquo;具体数据库&rsquo; where 条件</p>< p>例子:..from b in '&quot;&amp;Server.MapPath(&quot;.&quot;)&amp;&quot;\data.mdb&quot;& amp;&quot;' where..</p>< p>4、说明:子查询(表名1:a 表名2:b)</p>< p>select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)</p>< p>5、说明:显示文章、提交人和最后回复时间</p>< p>select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b</p>< p>6、说明:外连接查询(表名1:a 表名2:b)</p>< p>select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c</p>< p>7、说明:在线视图查询(表名1:a )</p>< p>select * from (SELECT a,b,c FROM a) T where t.a& gt; 1;</p>< p>8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括</p>< p>select * from table1 where time between time1 and time2</p>< p>select a,b,c, from table1 where a not between 数值1 and 数值2</p>< p>9、说明:in 的使用方法</p>< p>select * from table1 where a [not] in (&lsquo;值1&rsquo;,&rsquo;值2&rsquo;,&rsquo;值4&rsquo;,&rsquo;值6&rsquo;)</p>< p>10、说明:两张关联表,删除主表中已经在副表中没有的信息</p>< p>delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )</p>< p>11、说明:四表联查问题:</p>< p>select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....</p>< p>12、说明:日程安排提前五分钟提醒</p>< p>SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5</p>< p>13、说明:一条sql 语句搞定数据库分页</p>< p>select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段</p>< p>14、说明:前10条记录</p>< p>select top 10 * form table1 where 范围</p>< p>15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)</p>< p>select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)</p>< p>16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表</p>< p>(select a from tableA ) except (select a from tableB) except (select a from tableC)</p>< p>17、说明:随机取出10条数据</p>< p>select top 10 * from tablename order by newid()</p>< p>18、说明:随机选择记录</p>< p>select newid()</p>< p>19、说明:删除重复记录</p>< p>Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)</p>< p>20、说明:列出数据库里所有的表名</p>< p>select name from sysobjects where type='U'</p>< p>21、说明:列出表里的所有的</p>< p>select name from syscolumns where id=object_id('TableName')</p>< p>22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。</p>< p>select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type</p>< p>显示结果:</p>< p>type vender pcs</p>< p>电脑 A 1</p>< p>电脑 A 1</p>< p>光盘 B 2</p>< p>光盘 A 2</p>< p>手机 B 3</p>< p>手机 C 3</p>< p>23、说明:初始化表table1</p>< p>TRUNCATE TABLE table1</p>< p>24、说明:选择从10到15的记录</p>< p>select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc</p>< p>随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)</p>< p>对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP&ldquo;找个随机数&rdquo;然后打印出来。实际上常见的解决方案是建立如下所示的循环:</p>< p>Randomize</p>< p>http://www.downcc.com/tech/3153.htmlOracle2011/09/24 00:29:29<p>1、 选择语言,最好选择ENGLISH。<br /> 一切从英文开始,是个很好的习惯。其实也省了乱码问题。<br /> 2、 磁盘分区。<br /> 如果你磁盘很大,而且不用考虑机器崩溃后的修复,你可以选择自动分区。我虚拟机的磁盘也就20G,所以分7.9G给根分区,1G给/boot,2G给交换分区,剩下10G给/oracle。当然你有更大的硬盘就欢喜了,本人比较穷没办法了。<br /> 关于交换分区的大小,有oracle官网专家给出这样的建议:所需最小RAM为512MB,而所需最小交换空间为1GB。对于RAM小于或等于2GB的系统,交换空间应为RAM数量的两倍;对于RAM大于2GB的系统,交换空间应为RAM数量的一到两倍。<br /> 3、 防火墙:没有<br /> 4、 SELinux:关闭<br /> 5、 安装包:自定义软件安装包<br /> 6、 选上development(开发)一栏下的Development Tools,X Software Development,Legacy Software Development,但最好就注意一下这些选项的detail部分,因为是默认没有装上talnet的。<br /> 7、 等待安装完成。安装完成后,提示输入认证的时候,选择稍后认证,就可以骗过去了,以后都不提醒。<br /> 8、 为了ORACLE有更好的性能。建议关掉以下的服务:<br /> chkconfig cups off<br /> chkconfig sendmail off<br /> chkconfig isdn off<br /> chkconfig smartd off<br /> chkconfig iptables off<br /> chkconfig pcmcia off<br /> 9、 开启FTP、sshd服务及Telnet<br />< br /> 二、ORACLE安装<br /> 1、 检查ORACLE在REDHAT Linux的安装所需要的软件包是否已经装上<br /> binutils<br /> compat-db<br /> compat-libstdc++<br /> gcc<br /> gcc-c++<br /> glibc<br /> glibc-common<br /> libstdc++<br /> libstdc++-devel<br /> make<br /> pdksh<br /> openmotif-2.2.2-16<br /> sysstat<br /> setarch<br /> 可以用一下语句进行检查:<br /> rpm -qa binutils compat-* control-centre gcc* glibc* gnome-libs libstdc* make pdksh sysstat xscreensaver setarch<br /> 需要安装的包: sysstat:第四张盘<br />< br /> 请务必确认以上软件包全部已经安装再继续一步<br />< br /> 2、 创建Oracle组和用户帐户<br /> 用root执行以下语句:<br /> groupadd oinstall<br /> groupadd dba<br /> useradd -m -g oinstall -G dba oracle<br /> id oracle:查询用户信息(确认创建)<br /> passwd oracle<br />< br /> 3、 创建目录<br /> 用root执行以下语句,当然目录随各位看官习惯摆放:<br /> mkdir -p /home/oracle/app/oracle<br /> chown -R oracle:oinstall /home/oracle/app/oracle<br /> chmod -R 775 /home/oracle/app/oracle<br />< br /> 4、 配置Linux内核参数<br /> 下面的配置是oracle10g需要的最小值,如果你的电脑配置比这个大,就不用更改了:<br /> cat& gt;&gt; /etc/sysctl.conf& lt;&lt;EOF<br /> kernel.shmall = 2097152<br /> kernel.shmmax = 2147483648<br /> kernel.shmmni = 4096<br /> kernel.sem = 250 32000 100 128<br /> fs.file-max = 65536<br /> net.ipv4.ip_local_port_range = 1024 65000<br /> net.core.rmem_default=1048576<br /> net.core.wmem_default=262144<br /> net.core.rmem_max=1048576<br /> net.core.wmem_max=262144<br /> EOF<br /> /sbin/sysctl& ndash;p<br />< br /> 对每个参数值做个简要的解释和说明:<br /> (1) shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。<br /> (2) shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。<br /> (3) shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。<br /> (4) sem:该参数表示设置的信号量。<br /> (5) file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。</p>< p>5、 为oracle用户设置Shell限制<br /> cat& gt;&gt; /etc/security/limits.conf& lt;&lt;EOF<br /> oracle soft nproc 2047<br /> oracle hard nproc 16384<br /> oracle soft nofile 1024<br /> oracle hard nofile 65536<br /> EOF<br />< br /> cat& gt;&gt; /etc/pam.d/login& lt;&lt;EOF<br /> session required /lib/security/pam_limits.so<br /> EOF<br />< br />< br /> cat& gt;&gt; /etc/profile& lt;&lt;EOF<br /> if [ \$USER =& quot;oracle&quot; ]; then<br /> if [ \$SHELL =& quot;/bin/ksh&quot; ]; then<br /> ulimit -p 16384<br /> ulimit -n 65536<br /> else<br /> ulimit -u 16384 -n 65536<br /> fi<br /> umask 022<br /> fi<br /> EOF<br />< br /> cat& gt;&gt; /etc/csh.login& lt;&lt;EOF<br /> if ( \$USER ==& quot;oracle&quot; ) then<br /> limit maxproc 16384<br /> limit descriptors 65536<br /> umask 022<br /> endif<br /> EOF<br />< br />< br /> 6、 oracle用户的环境变量<br /> su -<br /> vi .bash_profile<br /> umask 022<br /> export ORACLE_BASE=/home/oracle/app/oracle<br /> export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1<br /> export ORACLE_SID=oracle10<br /> export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin<br />< br /> 其中ORACLE_SID为你将要建立的数据库SID。<br />< br /> 7、 拷贝安装文件,并解压,然后执行<br /> ./runInstaller<br />< br /> 安装概要:<br /> oracle home location:/home/oracle/app/oracle/product/10.2.0/db_1<br /> unix dba group:dba<br /> system identifier(SID):oracle10<br /> gobal database name:oracle10g password oracle10g11<br />< br /> 启动oracle数据库<br />   1,进入sqlplus:<br />   sqlplus /nolog<br />   2,以sysdba的身份连接到数据库,并启动Oracle数据库引擎:<br />   SQL&gt; conn /as sysdba<br />   SQL&gt; startup<br />   3,退出sqlplus,运行Listener<br />   SQL&gt; exit<br />   $ lsnrctl start<br />   这样数据库的TNS也启动了,可以通过网络连接数据库了。一般情况下就启动这两个就够了,如果想用Oracle提供的EM来管理Oracle的话还需要启动EM控制台,运行如下命令:<br />   $ emctl start dbconsole</p>http://www.downcc.com/tech/3110.htmlOracle2011/09/20 01:33:50<p>10g服务器短跟客户端都要下Vista版本的,XP版的不行 服务器需要修改2个refhost.xml,客户端需要修改1个refhost.xml<br />< br /> 改动的地方都是一样的 否则安装时会提示不支持此系统.<br />< br /> 以下是服务器需要修改的文件:<br />< br />< br /> 找到以下内容<br />< br />& lt;OPERATING_SYSTEM&gt;<br />& lt;VERSION VALUE=&quot;6.0&quot;/&gt;<br />& lt;/OPERATING_SYSTEM&gt;<br />< br /> 在此内容以下 添加一段<br />< br />& lt;OPERATING_SYSTEM&gt;<br />& lt;VERSION VALUE=&quot;6.1&quot;/&gt;<br />& lt;/OPERATING_SYSTEM&gt;<br />< br /> 保存之后 以管理员方式运行setup.exe</p>http://www.downcc.com/tech/3037.htmlMySQL2011/09/06 17:32:35<p>使用phpMyadmin创建Mysql数据库,一个7个步骤</p>< h2><font size="2">步骤/方法</font></h2>< ol>< li ><font size="2">首先我们要登陆php MyAdmin。< /font>< div>&nbsp;</div>< /li>< li ><font size="2">创建一个数据库,如下图,在php MyAdmin右边窗口中,填写数据库名称,点创建即可。< img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173416951.jpg" />例如我们这里创建一个名字为:cncmstest 的数据库<br /> 创建成功会有如下提示:<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173417828.jpg" />< /font>< div>&nbsp;</div>< /li>< li ><font size="2">点击左上角的主页按钮,返回php MyAdmin主界面:<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173420993.jpg" />< /font>< div>&nbsp;</div>< /li>< li ><font size="2">在主界面的右边点击&ldquo;权限&rdquo;来创建数据库帐号。<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173420788.jpg" />< /font>< div>&nbsp;</div>< /li>< li ><font size="2">在权限页面中,我们点击&ldquo;添加新用户&rdquo;<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173428600.jpg" />< /font>< div>&nbsp;</div>< /li>< li ><font size="2">在该页面中,我们填写要创建的数据库用户名,该用户的访问范围,及密码。<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173428716.jpg" />如上图,我们填写了用户名为:cncmsuser,该数据库用户只允许本机访问,主机一项选择本地;密码我们使用自动生成的,点下面的&ldquo;Generate&rdquo;会生成一个随机密码,然后点&ldquo;Copy&rdquo;会自动填写到密码框中。<br /> 下面的框都不选,直接拉到页面最下面点执行即可创建一个新用户。<br /> 数据库用户创建成功,会返回如下页面:<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173430138.jpg" />< /font>< div>&nbsp;</div>< /li>< li ><font size="2">最重要的一步,设置该用户的数据库访问权限<br /> 在数据库用户添加成功返回的页面中可以直接设置权限。这里我们选择按数据库指定权限:<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173431157.jpg" />如上图,在数据库列表中选择我们刚刚创建的cncmstest,即会自动进入该数据库的权限设置页面。<img title="" alt="" style="margin: 5px; display: block; clear: both" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-9/201196173434569.jpg" />在上图的权限设置中,我们把&ldquo;数据&rdquo;、&ldquo;结构&rdquo;两列的权限全部选中,管理权限都不要选。点执行即可。</font></li>< /ol>http://www.downcc.com/tech/2787.htmlMySQL2011/05/30 10:12:46<p>MySQL数据库的备份是非常重要的工作之一,通过MySQL数据库的数据备份就能够实现MySQL数据库中数据的绝对安全,MySQL数据库中的数据不会因为什么小故障而丢失,自动备份则是更为方便的一种备份方式,下文中将给出详细的解析。</p>< p>MySql自动备份是非常关键的,特别是对于DBA来说。这里主要用代码来说明这个问题,希望对各位有所帮助。可以将这个脚本放进crontab,每天凌晨执行一次,自动备份。</p>< p>这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上。</p>< p>代码:</p>< p>#!/bin/bash</p>< p>#ThisisaShellScriptForAutoDBBackup</p>< p>#Poweredbyaspbiz</p>< p>#2004-09</p>< p>#Setting</p>< p>#设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,以及备份方式</p>< p>#默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy</p>< p>#默认情况下,用root(空)登录mysql数据库,备份至/root/dbxxxxx.tgz</p>< p>DBName=mysql</p>< p>DBUser=root</p>< p>DBPasswd=</p>< p>BackupPath=/root/</p>< p>LogFile=/root/db.log</p>< p>DBPath=/var/lib/mysql/</p>< p>#BackupMethod=mysqldump</p>< p>#BackupMethod=mysqlhotcopy</p>< p>#BackupMethod=tar</p>< p>#SettingEnd</p>< p>NewFile=&quot;$BackupPath&quot;db$(date+%y%m%d).tgz</p>< p>DumpFile=&quot;$BackupPath&quot;db$(date+%y%m%d)</p>< p>OldFile=&quot;$BackupPath&quot;db$(date+%y%m%d--date='5daysago').tgz</p>< p>echo&quot;-------------------------------------------&quot;&gt;&gt;$LogFile</p>< p>echo$(date+&quot;%y-%m-%d%H:%M:%S&quot;)&gt;&gt;$LogFile</p>< p>echo&quot;--------------------------&quot;&gt;&gt;$LogFile</p>< p>#DeleteOldFile</p>< p>if[-f$OldFile]</p>< p>then</p>< p>rm-f$OldFile&gt;&gt;$LogFile2&gt;&amp;1</p>< p>echo&quot;[$OldFile]DeleteOldFileSuccess!&quot;&gt;&gt;$LogFile</p>< p>else</p>< p>echo&quot;[$OldFile]NoOldBackupFile!&quot;&gt;&gt;$LogFile</p>< p>fi</p>< p>if[-f$NewFile]</p>< p>then</p>< p>echo&quot;[$NewFile]TheBackupFileisexists,Can'tBackup!&quot;&gt;&gt;$LogFile</p>< p>else</p>< p>case$BackupMethodin</p>< p>mysqldump)</p>< p>if[-z$DBPasswd]</p>< p>then</p>< p>mysqldump-u$DBUser--opt$DBName&gt;$DumpFile</p>< p>else</p>< p>mysqldump-u$DBUser-p$DBPasswd--opt$DBName&gt;$DumpFile</p>< p>fi</p>< p>tarczvf$NewFile$DumpFile&gt;&gt;$LogFile2&gt;&amp;1</p>< p>echo&quot;[$NewFile]BackupSuccess!&quot;&gt;&gt;$LogFile</p>< p>rm-rf$DumpFile</p>< p>;;</p>< p>mysqlhotcopy)</p>< p>rm-rf$DumpFile</p>< p>mkdir$DumpFile</p>< p>if[-z$DBPasswd]</p>< p>then</p>< p>mysqlhotcopy-u$DBUser$DBName$DumpFile&gt;&gt;$LogFile2&gt;&amp;1</p>< p>else</p>< p>mysqlhotcopy-u$DBUser-p$DBPasswd$DBName$DumpFile&gt;&gt;$LogFile2&gt;&amp;1</p>< p>fi</p>< p>tarczvf$NewFile$DumpFile&gt;&gt;$LogFile2&gt;&amp;1</p>< p>echo&quot;[$NewFile]BackupSuccess!&quot;&gt;&gt;$LogFile</p>< p>rm-rf$DumpFile</p>< p>;;</p>< p>*)</p>< p>/etc/init.d/mysqldstop&gt;/dev/null2&gt;&amp;1</p>< p>tarczvf$NewFile$DBPath$DBName&gt;&gt;$LogFile2&gt;&amp;1</p>< p>/etc/init.d/mysqldstart&gt;/dev/null2&gt;&amp;1</p>< p>echo&quot;[$NewFile]BackupSuccess!&quot;&gt;&gt;$LogFile</p>< p>;;</p>< p>esac</p>< p>fi</p>< p>echo&quot;-------------------------------------------&quot;&gt;&gt;$LogFile</p>< p>关于MySQL数据库的自动备份就为大家介绍到这里,大家按照上文中讲解的步骤方法去进行MySQL数据库的自动备份工作,相信您一定可以很好的完成MySQL数据库的自动备份工作。</p>http://www.downcc.com/tech/2765.htmlOracle2011/05/27 15:13:25<p style="text-align: left">查询及删除重复记录的SQL语句<br />< br />   1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断<br />< br />   select * from people<br />< br />   where peopleId in (select peopleId from people group by peopleId having count(peopleId)& gt; 1)<br />< br />   2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有 rowid最小的记录<br />< br />   delete from people<br />< br />   where peopleId in (select peopleId from people group by peopleId having count(peopleId)& gt; 1)<br />< br />   and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )&gt;1)<br />< br />   注:rowid为oracle自带不用该.....<br />< br />   3、查找表中多余的重复记录(多个字段)<br />< br />   select * from vitae a<br />< br />   where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)& gt; 1)<br />< br />   4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录<br />< br />   delete from vitae a<br />< br />   where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)& gt; 1)<br />< br />   and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)&gt;1)<br />< br />   5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录<br />< br />   select * from vitae a<br />< br />   where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*)& gt; 1)<br />< br />   and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)&gt;1)<br />< br />   (二)<br />< br />   比方说<br />< br />   在A表中存在一个字段&ldquo;name&rdquo;,<br />< br />   而且不同记录之间的&ldquo;name&rdquo;值有可能会相同,<br />< br />   现在就是需要查询出在该表中的各记录之间,&ldquo;name&rdquo;值存在重复的项;<br />< br />   Select Name,Count(*) From A Group By Name Having Count(*)& gt; 1<br />< br />   如果还查性别也相同大则如下:<br />< br />   Select Name,sex,Count(*) From A Group By Name,sex Having Count(*)& gt; 1<br />< br />   (三)<br />< br />   方法一<br />< br />   declare @max integer,@id integer<br />< br />   declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*)& gt;; 1<br />< br />   open cur_rows<br />< br />   fetch cur_rows into @id,@max<br />< br />   while @@fetch_status=0<br />< br />   begin<br />< br />   select @max = @max -1<br />< br />   set rowcount @max<br />< br />   delete from 表名 where 主字段 = @id<br />< br />   fetch cur_rows into @id,@max<br />< br />   end<br />< br />   close cur_rows<br />< br />   set rowcount 0 方法二<br />< br />   &quot;重复记录&quot;有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。<br />< br />   1、对于第一种重复,比较容易解决,使用<br />< br />   select distinct * from tableName<br />< br />   就可以得到无重复记录的结果集。<br />< br />   如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除<br />< br />   select distinct * into #Tmp from tableName<br />< br />   drop table tableName<br />< br />   select * into tableName from #Tmp<br />< br />   drop table #Tmp<br />< br />   发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。<br />< br />   2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下<br />< br />   假设有重复的字段为 Name,Address,要求得到这两个字段唯一的结果集<br />< br />   select identity(int,1,1) as autoID, * into #Tmp from tableName<br />< br />   select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID<br />< br />   select * from #Tmp where autoID in(select autoID from #tmp2)<br />< br />   最后一个select即得到了 Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)<br />< br />   (四)<br />< br />   查询重复<br />< br />   select * from tablename where id in (<br />< br />   select id from tablename<br />< br />   group by id<br />< br />   having count(id)& gt; 1<br />< br />   )</p>http://www.downcc.com/tech/2734.htmlMySQL2011/05/17 15:05:02<p>本文详细介绍Ubuntu下MySQL数据库安装后初步设置。</p>< p>1、安装MySQL 这个应该很简单了,而且我觉得大家在安装方面也没什么太大问题,所以也就不多说了,下面我们来讲讲配置。</p>< p>2、配置MySQL 注意,在Ubuntu下MySQL缺省是只允许本地访问的,如果你要其他机器也能够访问的话,那么需要改变/etc/mysql/my.cnf配置文件了!</p>< p>默认的MySQL安装之后根用户是没有密码的,所以首先用根用户进入: $mysql -u root 在这里之所以用-u root是因为我现在是一般用户(firehare),如果 不加-u root的话,mysql会以为是firehare在登录。</p>< p>注意,我在这里没有进入根用户模式,因为没必要。一般来说,对mysql中的数据库进行操作,根本没必要进入根用户模式,只有在设置时才有这种可能。进入mysql之后,最要紧的就是要设置Mysql中的root用户密码了,否则,Mysql服务无安全可言了。</p>< p>mysql&gt; GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY& quot;123456&quot;;</p>< p>注意,我这儿用的是123456做为root用户的密码,但是该密码是不安全的,请大家最好使用大小写字母与数字混合的密码,且不少于8位。这样的话,就设置好了MySQL中的root用户密码了,然后就用root用户建立你所需要的数据库。</p>< p>我这里就以xoops为例:</p>< center><ccid_nobr></ccid_nobr>< table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">< tbody>< tr>< td bgcolor="#e6e6e6" style="font-size: 9pt">< pre><ccid_code></ccid_code>mysql&gt;CREATE DATABASE xoops; mysql&gt; GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@localhost IDENTIFIED BY& quot;654321&quot;;</pre>< /td>< /tr>< /tbody>< /table>< /center>< p>这样就建立了一个xoops_roots的用户,它对数据库xoops有着全部权限。以后就用xoops_root来对xoops数据库进行管理,而无需要再用root用户了,而该用户的权限也只被限定在xoops数据库中。</p>< p>如果你想进行远程访问或控制,那么你要做两件事:</p>< p>其一:</p>< p>mysql&gt;GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@&quot;%&quot; IDENTIFIED BY& quot;654321&quot;;</p>< p>允许xoops_root用户可以从任意机器上登入MySQL。</p>< p>其二:</p>< p>$sudogedit /etc/mysql/my.cnf& gt;skip-networking =&gt; # skip-networking</p>< p>这样就可以允许其他机器访问MySQL了。</p>< p>在Ubuntu下连接数据库的GUI软件:mysql-admin mysql-query-browser。</p>< p>dapper升级到MySQL5+PHP5出现乱码的处理办法问题发生在采用gbk为网站内码的数据。</p>< p>一:导出数据:</p>< center><ccid_nobr></ccid_nobr>< table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">< tbody>< tr>< td bgcolor="#e6e6e6" style="font-size: 9pt">< pre><ccid_code></ccid_code>mysqldump -uroot -p --default-character-set =latin1 --set-charset=gbk --skip-opt mydatabse& gt; d.sql</pre>< /td>< /tr>< /tbody>< /table>< /center>< p>二:建立新的数据库:</p>< center><ccid_nobr></ccid_nobr>< table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">< tbody>< tr>< td bgcolor="#e6e6e6" style="font-size: 9pt">< pre><ccid_code></ccid_code>CREATE DATABASE `newmydatabase` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;</pre>< /td>< /tr>< /tbody>< /table>< /center>< p>三:重新导入数据:</p>< center><ccid_nobr></ccid_nobr>< table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">< tbody>< tr>< td bgcolor="#e6e6e6" style="font-size: 9pt">< pre><ccid_code></ccid_code>mysql -uroot -p --default-character-set= gbk -f newmydatabase& gt;source d.sql .....& gt;exit</pre>< /td>< /tr>< /tbody>< /table>< /center>< p>将你的论坛或者网站的数据修改为newmydatabase就好了。</p>http://www.downcc.com/tech/2733.htmlMySQL2011/05/17 15:02:49<p>其实以前写过一次phpmyadmin无法导入大文件的解决方案,然而有些东西,若不点透,还是会有很大批的网友不明白怎么操作。所以下面我只告诉步骤,不再讲任何原理,事实证明,任何原理,懂的人没有必要看,不懂的人他们不会去看,即使原理很浅显。</p>< p><strong>考虑用帝国备份王可忽视本文</strong>,不过方法还是值得大家了解学习。</p>< p><strong>首先在原来的phpmyadmin中分两步导出mysql数据库</strong></p>< p>请分两个步骤导出</p>< p>第一步:导出数据库结构。数据库结构文件一般很小,几乎不可能超过2M,所以可以直接在另外一个phpmyadmin的上面直接恢复;</p>< p>第二步:导出数据内容。这个文件若是太大,则可以采用cosbeta写的程序进行恢复(程序下载在本页最后,别急,请看完步骤再去下载)。</p>< p><strong>导出数据库结构</strong></p>< p>进入phpmyadmin,按照如下截图导出数据:</p>< p>1.点击要导出的数据库名</p>< p align="center"><img title="wordpress数据库转移" height="201" alt="" width="210" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171548551.jpg" /></p>< p>2.点击导出按钮。</p>< p align="center"><img title="大数据库的转移" height="89" alt="" width="348" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171548871.jpg" /></p>< p>3.选择只导出结构</p>< p align="center"><img title="大数据库的转移" height="338" alt="" width="294" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171548449.jpg" /></p>< p>仔细看上面的选项,只需要把data那个勾去掉即可。只导出数据就恰恰相反,把structure勾去掉,data的勾选上</p>< p>4.下载数据库结构</p>< p align="center"><img height="166" alt="" width="434" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171548185.jpg" /></p>< p>数据库结构的文件非常小,所以一般几秒钟即可搞定。</p>< p><strong>导出数据库内容</strong></p>< p>1.进入phpmyadmin,按照如下截图导出数据:</p>< p align="center"><img height="419" alt="" width="394" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171548974.jpg" /></p>< p>仔细看上面的选项,只需要把structure那个勾去掉即可。</p>< p>2.下载数据库内容</p>< p align="center"><img height="166" alt="" width="434" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171548185.jpg" /></p>< p>因为您需要看了我这篇日志,所以,您的数据库文件应该不小,请耐心等待下载。</p>< p><strong>导入数据库结构</strong></p>< p>同样恢复数据库也分两步:1.恢复数据库结构;2.恢复数据库内容;</p>< p>由于结构的备份文件相当小,所以恢复结构请直接在phpmyadmin中恢复,恢复过程参见下图:</p>< p align="center"><img title="恢复数据库" height="83" alt="" width="372" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171549659.jpg" /></p>< p>选择数据库结构文件</p>< p align="center"><img title="mysq导入" height="123" alt="" width="393" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171549563.jpg" /></p>< p><strong>导入数据库数据</strong></p>< p>本文的重点来了,你之所以看这篇日志,是因为您的数据太大,无法直接phpmyadmin,导入,所以我特意你写了一个脚本,直接在服务器上导入即可。</p>< p>导入方法(请保证已经将数据库结构导入了新的数据库):</p>< p>1.下载这个文件 import,解压缩,放置在根目录中;</p>< p>2.用记事本打开import.php,修改前面4行,您应该知道如何修改,就是把数据库密码和数据库用户名等等给填写正常;</p>< p>3.解压缩刚才已经备份下来的数据库内容文件,重命名为 db.sql,上传到网站根目录;</p>< p>4.打开你的网站 http://您的域名/import.php ,若设置正确的话,数据库将在数秒之内导入成功,即使10M的数据库也不会超时。</p>http://www.downcc.com/tech/2732.htmlMySQL2011/05/17 15:00:58<p>自己用的MYSQL都是用MYISAM数据库,还没涉及到需要INNODB,因此打算直接不加载INNODB引擎。< br /> 在my.ini(linux下/etc/my.cnf)加上skip-innodb,就可以了。< br /> 我这样设置后,在linux下都没问题,今天在我本机winXP启动MYSQL,提示启动不起来。看下mysql目录的错误日志:< br /> 引用< br /> 090613 10:15:27 [ERROR] Default storage engine (InnoDB) is not available< br /> 090613 10:15:27 [ERROR] Aborting< br />< br /> 090613 10:15:27 [Note] C:\www\mysql\bin\mysqld-nt: Shutdown complete< br />< br /> 估计是上次加了参数后,一直没启动起来。。。已经很久没用本机的mysql了。< br /> 查了下,原来my.ini里有一句:default-storage-engine=INNODB,把默认的engine设为INNODB,而我又加了skip-innodb,怪不得启不来了。< br />< br /> 将default-storage-engine改为MYISAM,MYSQL启动OK!< br /> 在skip-innodb下,data目录下的ibdata1,ib_logfile0,ib_logfile1这三个文件就不需要了,就可以删除。< br />< br /> 测试了下,在没加skip-innodb时,删除了这三个文件,启动时会自动创建这三个文件,日志如下:< br /> 引用< br /> InnoDB: The first specified data file .\ibdata1 did not exist:< br /> InnoDB: a new database to be created!< br /> 090613 10:19:37 InnoDB: Setting file .\ibdata1 size to 10 MB< br /> InnoDB: Database physically writes the file full: wait...< br /> 090613 10:19:37 InnoDB: Log file .\ib_logfile0 did not exist: new to be created< br /> InnoDB: Setting log file .\ib_logfile0 size to 24 MB< br /> InnoDB: Database physically writes the file full: wait...< br /> 090613 10:19:38 InnoDB: Log file .\ib_logfile1 did not exist: new to be created< br /> InnoDB: Setting log file .\ib_logfile1 size to 24 MB< br /> InnoDB: Database physically writes the file full: wait...< br /> InnoDB: Doublewrite buffer not found: creating new< br /> InnoDB: Doublewrite buffer created< br /> InnoDB: Creating foreign key constraint system tables< br /> InnoDB: Foreign key constraint system tables created< br /> 090613 10:19:39 InnoDB: Started; log sequence number 0 0< br /> 090613 10:19:39 [Note] C:\www\mysql\bin\mysqld-nt: ready for connections.< br />< br />< br /> 再删除这三个文件,加了skip-innodb后,启动日志:< br /> 引用< br />< br /> 090613 10:30:12 [Note] C:\www\mysql\bin\mysqld-nt: Normal shutdown< br />< br /> 090613 10:30:12 [Note] C:\www\mysql\bin\mysqld-nt: Shutdown complete< br />< br /> 090613 10:30:17 [Note] C:\www\mysql\bin\mysqld-nt: ready for connections.< br /> Version: '5.0.45' socket: '' port: 3306 Source distribution< br />< br /> 那三个文件就不会自动产生了。</p>http://www.downcc.com/tech/2731.htmlMySQL2011/05/17 14:50:45<p>&nbsp;&nbsp;&nbsp;系统不能连接数据库,关键要看两个数据:&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;2、数据库当前的连接线程数threads_connected。这是动态变化的。&nbsp;< br />& nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;查看max_connections、max_connections的办法见后。&nbsp;< br />< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;如果&nbsp;threads_connected&nbsp;==&nbsp;max_connections&nbsp;时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,但强坛系统估计不会发生这种低级的编程错误。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而&nbsp;threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技术,&nbsp;threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;从强坛出错的情况看,更大的可能性是数据库系统没能进行适当地配置。下面提出一点建议。供参考&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;让你们的工程师把MySQL的最大允许连接数从默认的100调成32000。这就不会老出现连接过多的问题了。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;查看max_connections&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;进入MySQL,用命令:show&nbsp;variables&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;查看数据库最大可连接数的变量值:max_connections&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;查看threads_connected&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;进入MySQL,用命令:show&nbsp;status&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;查看当前活动的连接线程变量值:threads_connected&nbsp;< br />< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;设置max_connections&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;设置办法是在my.cnf文件中,添加下面的最后红色的一行:&nbsp;< br />< br /> --------------------------------------------------------------------------------&nbsp;< br />< br /> [mysqld]&nbsp;< br /> port=3306&nbsp;< br /> #socket=MySQL&nbsp;< br /> skip-locking&nbsp;< br /> set-variable&nbsp;=&nbsp;key_buffer=16K&nbsp;< br /> set-variable&nbsp;=&nbsp;max_allowed_packet=1M&nbsp;< br /> set-variable&nbsp;=&nbsp;thread_stack=64K&nbsp;< br /> set-variable&nbsp;=&nbsp;table_cache=4&nbsp;< br /> set-variable&nbsp;=&nbsp;sort_buffer=64K&nbsp;< br /> set-variable&nbsp;=&nbsp;net_buffer_length=2K&nbsp;< br /> set-variable&nbsp;=&nbsp;max_connections=32000&nbsp;< br />< br />< br /> --------------------------------------------------------------------------------&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;注意:&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥;&nbsp;</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;3、添加了最大允许连接数,对系统消耗增加不大。&nbsp;<br />< br />& nbsp;&nbsp;&nbsp;&nbsp;4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。</p>http://www.downcc.com/tech/2730.htmlMySQL2011/05/17 14:34:46<p>随着数据的增多,数据的备份显得日益重要,下面是mysql常用的数据导入导出命令。< br />< br />   1.导出整个数据库< br />< br />   格式:mysqldump -u 用户名 -p 数据库名& gt; 导出的文件名< br />< br />   举例:< br />< br />   C:Documents and SettingsOwner&gt;mysql -u root -p< br />< br />   Enter password:< br />< br />   Welcome to the MySQL monitor.  Commands end with ; or g.< br />< br />   Your MySQL connection id is 5 to server version: 5.0.7-beta-nt< br />< br />   Type 'help;' or 'h' for help. Type 'c' to clear the buffer.< br />< br /> mysql&gt; use testdb< br /> Database changed< br /> mysql&gt; select * from user;< br /> +--------+----------+----------+---------------+< br /> | userid | username | password | email     |< br /> +--------+----------+----------+---------------+< br /> |    1 | aaa    | aaa    | aaaa      |< br /> |    2 | bbb    | bbbb   | bbbb@sina.com|< br /> +--------+----------+----------+---------------+< br /> 2 rows in set (0.00 sec)< br />   < br /> mysql&gt; select * from user1;< br /> +--------+----------+----------+---------------+< br /> | userid | username | password | email     |< br /> +--------+----------+----------+---------------+< br /> |    1 | cccc   | cccc   | cccc      |< br /> |    2 | cccc   | cccc   | cccc@sina.com|< br /> +--------+----------+----------+---------------+< br /> 2 rows in set (0.00 sec)< br />< br />   在mysql的bin目录里面执行如下命令< br />< br />   C:MySQLMySQL Server 5.0bin&gt;mysqldump -u root -p testdb& gt; testdb.sql< br />< br />  Enter password:< br />< br />   C:MySQLMySQL Server 5.0bin&gt;< br />< br />   testdb.sql内容如下:< br />< br /> -- MySQL dump 10.10< br /> --< br /> -- Host: localhost   Database: testdb< br /> -- ------------------------------------------------------< br /> -- Server version 5.0.7-beta-nt< br />   < br /> /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;< br /> /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;< br /> /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;< br /> /*!40101 SET NAMES utf8 */;< br /> /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;< br /> /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;< br /> /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO__ON_ZERO' */;< br /> /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;< br />   < br /> --< br /> -- Table structure for table `user`< br /> --< br />   < br /> DROP TABLE IF EXISTS `user`;< br /> CREATE TABLE `user` (< br />   `userid` int(11) NOT NULL,< br />   `username` varchar(20) NOT NULL,< br />   `password` varchar(50) NOT NULL,< br />   `email` varchar(50) default NULL,< br />   PRIMARY KEY  (`userid`)< br /> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;< br />   < br /> --< br /> -- Dumping data for table `user`< br /> --< br />   < br /> /*!40000 ALTER TABLE `user` DISABLE KEYS */;< br /> LOCK TABLES `user` WRITE;< br /> INSERT INTO `user` S (1,'aaa','aaa','aaaa'),(2,'bbb','bbbb','bbbb@sina.com');< br /> UNLOCK TABLES;< br /> /*!40000 ALTER TABLE `user` ENABLE KEYS */;< br />   < br /> --< br /> -- Table structure for table `user1`< br /> --< br />   < br /> DROP TABLE IF EXISTS `user1`;< br /> CREATE TABLE `user1` (< br />   `userid` int(11) NOT NULL,< br />   `username` varchar(20) NOT NULL,< br />   `password` varchar(50) NOT NULL,< br />   `email` varchar(50) default NULL,< br />   PRIMARY KEY  (`userid`)< br /> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;< br />   < br /> --< br /> -- Dumping data for table `user1`< br /> --< br />   < br /> /*!40000 ALTER TABLE `user1` DISABLE KEYS */;< br /> LOCK TABLES `user1` WRITE;< br /> INSERT INTO `user1` S (1,'cccc','cccc','cccc'),(2,'cccc','cccc','cccc@sina.com');< br /> UNLOCK TABLES;< br /> /*!40000 ALTER TABLE `user1` ENABLE KEYS */;< br />   < br /> /*!40101 SET SQL_MODE=@OLD_SQL_MODE*/;< br /> /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/;< br /> /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS*/;< br /> /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT*/;< br /> /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS*/;< br /> /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION*/;< br /> /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES*/;</p>< p> 2.导出一个表< br />< br />   格式:mysqldump -u 用户名 -p 数据库名 表名&gt; 导出的文件名< br />< br />   举例:表结构与上面的相同,命令如下:< br />< br />   C:MySQLMySQL Server 5.0bin&gt;mysqldump -u root -p testdb user& gt; user.sql< br />< br />   Enter password:< br />< br />   C:MySQLMySQL Server 5.0bin&gt;< br />< br />   user.sql内容如下:< br />< br /> -- MySQL dump 10.10< br /> --< br /> -- Host: localhost   Database: testdb< br /> -- ------------------------------------------------------< br /> -- Server version 5.0.7-beta-nt< br />   < br /> /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;< br /> /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;< br /> /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;< br /> /*!40101 SET NAMES utf8 */;< br /> /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;< br /> /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;< br /> /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO__ON_ZERO' */;< br /> /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;< br />   < br /> --< br /> -- Table structure for table `user`< br /> --< br />   < br /> DROP TABLE IF EXISTS `user`;< br /> CREATE TABLE `user` (< br />   `userid` int(11) NOT NULL,< br />   `username` varchar(20) NOT NULL,< br />   `password` varchar(50) NOT NULL,< br />   `email` varchar(50) default NULL,< br />   PRIMARY KEY  (`userid`)< br /> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;< br />   < br /> --< br /> -- Dumping data for table `user`< br /> --< br />   < br /> /*!40000 ALTER TABLE `user` DISABLE KEYS */;< br /> LOCK TABLES `user` WRITE;< br /> INSERT INTO `user` S (1,'aaa','aaa','aaaa'),(2,'bbb','bbbb','bbbb@sina.com');< br /> UNLOCK TABLES;< br /> /*!40000 ALTER TABLE `user` ENABLE KEYS */;< br />   < br /> /*!40101 SET SQL_MODE=@OLD_SQL_MODE*/;< br /> /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/;< br /> /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS*/;< br /> /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT*/;< br /> /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS*/;< br /> /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION*/;< br /> /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES*/;< br />< br />  3.导出一个数据库结构< br />< br />   格式:mysqldump -u 用户名 -p -d --add-drop-table 数据库& gt; 导出的文件名< br />< br />   说明:-d 选项表示没有数据    < br />< br />   --add-drop-table 选项说明在每个create语句之前增加一个drop table< br />< br />   举例:表结构与上面的相同< br />< br />   C:MySQLMySQL Server 5.0bin&gt;mysqldump -u root -p -d --add-drop-table testdb& gt; testdbstruct.sql< br />< br />   Enter password:< br />< br />   C:MySQLMySQL Server 5.0bin&gt;< br />< br />   testdbstruct.sql内容如下:< br />< br /> -- MySQL dump 10.10< br /> --< br /> -- Host: localhost   Database: testdb< br /> -- ------------------------------------------------------< br /> -- Server version 5.0.7-beta-nt< br />   < br /> /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;< br /> /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;< br /> /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;< br /> /*!40101 SET NAMES utf8 */;< br /> /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;< br /> /*!400http://www.downcc.com/tech/2729.htmlMySQL2011/05/17 14:29:35<p>摘要:解决不能通过mysql.sock连接MySQL问题 这个问题主要提示是,不能通过 '/tmp/mysql.sock'连到服务器,而php标准配置正是用过'/tmp/mysql.sock',但是一些mysql安装方法将 mysql.sock放在/var/lib/mysql.sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可以看到如下的东东:</p>< p>&nbsp;  [mysqld]< br />   socket=/var/lib/mysql.sock< br />   改一下就好了,但也会引起其他的问题,如mysql程序连不上了,再加一点:< br />   [mysql]< br />   socket=/tmp/mysql.sock< br />   或者还可以通过修改php.ini中的配置来使php用其他的mysql.sock来连,这个大家自己去找找<br />   <br />   或者用这样的方法:<br />   ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock< br />   <br />   还有:<br />   phpmyadmin的说明书有说< br />   The error message& quot;Warning: MySQL Connection Failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)...&quot; is displayed. What can I do?< br />   <br />   For RedHat users, Harald Legner suggests this on the mailing list:< br />   <br />   On my RedHat-Box the socket of mysql is /var/lib/mysql/mysql.sock. In your php.ini you will find a line< br />   mysql.default_socket = /tmp/mysql.sock< br />   change it to< br />   mysql.default_socket = /var/lib/mysql/mysql.sock</p>< p>  Then restart apache and it will work.< br />   <br />   Here is a fix suggested by Brad Ummer in the phpwizard forum:< br />   <br />   First, you need to determine what socket is being used by MySQL.< br />   To do this, telnet to your server and go to the MySQL bin directory. In this directory there should be a file named mysqladmin. Type ./mysqladmin variables, and this should give you a bunch of info about your MySQL server, including the socket (/tmp/mysql.sock, for example).< br />   Then, you need to tell PHP to use this socket.< br />   Assuming you are using PHP 3.0.10 or better, you can specify the socket to use when you open the connection. To do this in phpMyAdmin, you need to complete the socket information in the config.inc.php</p>< p>3.< br />   For example: $cfg['Servers'][$i]['socket'] = '/tmp/mysql.sock'; (T113)</p>http://www.downcc.com/tech/2726.htmlMySQL2011/05/17 14:04:54<p>初学php接触mysql,遇到一些问题,卸载重装后,无法启动mysql服务,网络上有很多种说法,我这里将我解决这个问题的办法提出</p>< p>1、重装后启动mysql服务,提示< br /> 本地计算机无法启动 mysql 服务 错误 1067:进程意外终止。</p>< p>2、查看mysql根目录下有一 计算机名.err 打开一看全是英文的错误提示;</p>< p>3、根据其中的有一条错误,分析;</p>< p>4、打开my.ini或my.cnf文件,找到default-storage-engine这一行,把它改成default-storage-engine=MyISAM。</p>< p>重启服务,问题解决。一个小的问题,新手要是遇到,可能会有帮助。</p>http://www.downcc.com/tech/2725.htmlMySQL2011/05/17 14:01:19<p>机连接上数据库服务器,如果想让用户通过另外一台机器连接上数据库服务器必须手动进行修改:</p>< p>1、在控制台执行 mysql -u root -p mysql,系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台,这个命令的第一个mysql是执行命令,第二个mysql是系统数据名称,不一样的。</p>< p>2、在mysql控制台执行 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MyPassword' WITH GRANT OPTION;</p>< p>3、在mysql控制台执行命令中的 'root'@'%' 可以这样理解: root是用户名,%是主机名或IP地址,这里的%代表任意主机或IP地址,你也可替换成任意其它用户名或指定唯一的IP地址;'MyPassword'是给授权用户指定的登录数据库的密码;另外需要说明一点的是我这里的都是授权所有权限,可以指定部分权限,GRANT具体操作详情见:http://dev.mysql.com/doc/refman/5.1/en/grant.html</p>< p>4、不放心的话可以在mysql控制台执行 select host, user from user; 检查一下用户表里的内容,我的检查如下图所示:</p>< p align="center"><img height="289" alt="MySQL数据库服务器支持远程连接的设置方法_downcc.com" width="550" border="0" style="cursor: hand" src="http://pic.pdowncc.com/upload/tech/UploadPic/2011-5/20115171423328.jpg" />&nbsp;</p>http://www.downcc.com/tech/2652.htmlMySQL2011/05/05 18:05:46<p>这两天在使用MySQL做点东西,可是从前天开始,系统启动时经常出现类似Can&rsquo;t create/write to file& lsquo;c:\temp/#sql-XXX.MYI&prime; (Errcode: 13)&quot;的错误,我以为可能是我的系统的问题,于是重启应用和MySQL,该问题还是陆陆续续会出现,但又不是始终出现。我注意到该问题一般都在查询数据量比较大的时候才出现,我想应该是在做大数据量的数据库操作,MySQL想往temp目录写临时文件时,则于某种原因无法写入导致了该问题,于我,我尝试着着按以下步骤进行分析处理。</p>< p>一、这可能是MySQL以前生成的临时文件还存在,但具有只读属性导致无法写入。我仔细查看temp目录,却没有找到扩展名为&ldquo;MYI&rdquo;的文件,于是把临时目录下的所有文件都删除。重新启动MySQL和应用系统,但问题还是会出现;</p>< p>二、我怀疑是不是temp目录具有只读属性或对MySQL用户禁止写入,但我的在WindowsXP上,而且临时目录里会有别的系统产生的临时文件,说明该目录是可以读写的,而且我启动MySQL用的是超级用户,所以不存在目录无写权限的问题;</p>< p>三、会不会是杀毒软件的实时文件保护导致无法写临时文件呢?因为我的杀软的病毒库是天天升级的,前几天也系统没出现过该问题,而这几天可以,是不是我升级了病毒库后,杀软阻止了MySQL产生临时文件呢?我在杀软中把temp目录设为不检测,再重启MySQL和应用,再看着temp目录,里面会出现#sql-XXX.MYI或#sql-XXX.MYD等临时文件,应用系统启动正常。看来问题就出在杀软禁止MySQL产生&ldquo;MYI&rdquo;或&ldquo;MYD&rdquo;临时文件导致了该问题。</p>< p>至此,我以为问题就这样解决了,可是在接下来的一次启动中,我看到临时文件产生了,我就在临时文件#sql-XXX.MYI上点右键,想看看文件属性,这一点可好,应用系统又出现了原来的错误,咋回事?我再次停掉应用然后重启,重启过程中不对临时文件作任何操作,应用启动都正常。这是为什么呢?</p>< p>我分析原因可能是这样的:MySQL产生的临时文件存在时间很短,MySQL在产生临时文件后需要马上使用马上删除,这时候如果有另外一个软件对这些临时文件进行访问或操作的话,MySQL就无法及时获得文件访问权限,就抛出错误。杀软由于启用了文件保护功能,当MySQL产生临时文件后,即锁定文件进行病毒检测,导致了MySQL自己不能马上操作这些文件从而抛出错误,同样的,当我试图查看文件属性时,操作系统对文件也进行了短时间的锁定,而这一锁定导致MySQL自己无法操作,所以也抛出这个错误来。</p>< p>现在这个问题貌似已经解决,但是否真的已解决还有待接下来几天观察,我的分析是不是正确也有待历史来作出裁定,呵呵。</p>< p>另外,我也在网上搜了一把,发现很多人也遇到这个问题,但多数人都认为是目录没有写权限而导致,也有部分人知道是杀软导致的这个问题,却没有深入的分析其原因,我就当给有相同遭遇的弟兄抛个砖吧。</p>http://www.downcc.com/tech/2351.htmlMySQL2011/03/25 17:07:37<p>  mysql有时候忘记密码了怎么办?我给出案例和说明!一下就解决了!</p>< p>  Windows下的实际操作如下</p>< p>  1.关闭正在运行的MySQL。</p>< p>  2.打开DOS窗口,转到mysql\bin目录。</p>< p>  3.输入mysqld --skip-grant-tables回车。如果没有出现提示信息,那就对了。</p>< p>  4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。</p>< p>  5.输入mysql回车,如果成功,将出现MySQL提示符& gt;</p>< p>  6. 连接权限数据库&gt;use mysql; (&gt;是本来就有的提示符,别忘了最后的分号)</p>< p>  6.改密码:&gt; update user set password=password(&quot;520&quot;) where user=&quot;root&quot;; (别忘了最后的分号)</p>< p>  7.刷新权限(必须的步骤)&gt;flush privileges;</p>< p>  8.退出& gt; \q</p>< p>  9.注销系统,再进入,开MySQL,使用用户名root和刚才设置的新密码123456登陆。</p>< p>  第一步</p>< p>  C:\Documents and Settings\Administrator&gt;cd D:\web\www.downcc.com\Mysql\MySQL Se</p>< p>  rver5.5\bin</p>< p>  C:\Documents and Settings\Administrator&gt;d:</p>< p>  D:\web\www.downcc.com\Mysql\MySQL Server5.5\bin&gt;mysqld --skip-grant-tables</p>< p>  第二步</p>< p>  Microsoft Windows [版本 5.2.3790]</p>< p>  (C) 版权所有 1985-2003 Microsoft Corp.</p>< p>  C:\Documents and Settings\Administrator&gt;cd D:\web\www.downcc.com\Mysql\MySQL Se</p>< p>  rver5.5\bin</p>< p>  C:\Documents and Settings\Administrator&gt;d:</p>< p>  D:\web\www.downcc.com\Mysql\MySQL Server5.5\bin&gt;mysql</p>< p>  Welcome to the MySQL monitor. Commands end with ; or \g.</p>< p>  Your MySQL connection id is 1</p>< p>  Server version: 5.5.10 MySQL Community Server (GPL)</p>< p>  Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.</p>< p>  Oracle is a registered trademark of Oracle Corporation and/or its</p>< p>  affiliates. Other names may be trademarks of their respective</p>< p>  owners.</p>< p>  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.</p>< p>  mysql&gt; use mysql;</p>< p>  Database changed</p>< p>  mysql&gt; update user set password=password(&quot;520&quot;) where user=&quot;root&quot;;</p>< p>  Query OK, 1 row affected (0.00 sec)</p>< p>  Rows matched: 1 Changed: 1 Warnings: 0</p>< p>  mysql&gt; flush privileges;</p>< p>  Query OK, 0 rows affected (0.00 sec)</p>< p>  mysql&gt; \q</p>< p>  Bye</p>< p>  D:\web\www.downcc.com\Mysql\MySQL Server5.5\bin&gt;</p>http://www.downcc.com/tech/2331.htmlOracle2011/03/22 13:07:39<p>最近需要写一个数据迁移脚本,将单一Oracle中的数据迁移到MySQL Sharding集群,刚好最近在学习python,就用它来练手。</p>< p>很快搞定了MySQL,只需要安装一个MySQLdb的python模块就可以了。但是对于Oracle客户端,不只需要安装相应的python模块(这里我用了Oracle官方的python模块&mdash;&mdash;cx_Oracle),还需要安装Oracle Client,一般选择Instant Client就足够了,还需要配置tnsnames.ora(当然也可以简单的通过host:port/schema访问)。</p>< p>下面是具体步骤。</p>< p>首先确定版本。因为我们的Oracle数据是在是有点老,所以我选择了一个比较老的版本&mdash;&mdash;Oracle Instant Client 10.2.0.4。一般从官方网站下载就可以了。下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html。这里要严重BS Oracle,居然要先注册才能下载,这也算了,关键是注册的时候,密码居然要求有数字有字母,字母还要有大小写,还必须至少8位。逼迫我搞了一个比我银行密码还要安全的密码(好吧,现在我已经忘记我填了什么了。。)。下载的时候要特别注意,一定要下载rpm包,zip不知道是什么。下basic就可以了。</p>< p>forrest@Ubuntu:~/Sources$ wget http://download.oracle.com/otn/linux/instantclient/10204/oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm</p>< p>由于是rpm包,在Ubuntu下先将其转成deb包:</p>< p>forrest@Ubuntu:~/Sources$ sudo alien oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm</p>< p>得到oracle-instantclient-basic_10.2.0.4-2_amd64.deb。</p>< p>可以安装了,</p>< p>forrest@Ubuntu:~/Sources$ sudo dpkg -i oracle-instantclient-basic_10.2.0.4-2_amd64.deb</p>< p>这样会安装在默认的目录下&mdash;&mdash;/usr/lib/oracle/10.2.0.4/client64/</p>< p>forrest@Ubuntu:/usr/lib/oracle/10.2.0.4/client64$ ls</p>< p>bin lib</p>< p>安装完成之后,还需要暴露一些环境变量,否则会报错:</p>< p>* import cx_Oracle gave ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory until I set LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/</p>< p>* conn = cx_Oracle.Connection('scott/tiger@xe') gave RuntimeError: Unable to acquire Oracle environment handle until I set ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server</p>< p>forrest@Ubuntu:~/Sources$ sudo vim ~/.profile</p>< p>在最后添加如下语句:</p>< p>export ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64</p>< p>export PATH=$PATH:$ORACLE_HOME/bin</p>< p>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib</p>< p>export TNS_ADMIN=$ORACLE_HOME/network/admin</p>< p>注意到TNS_ADMIN所在目录其实并不存在,是要自己创建的(这个也很恶心,我一开始以为还要安装什么东东。。)</p>< p>$sudo mkdir -p $ORACLE_HOME/network/admin</p>< p>$sudo cp tnsnames.ora $ORACLE_HOME/network/admin</p>< p>如果你有安装sqlplus,此时就可以用它来测试安装是否正确了:</p>< p>$sqlplus 'username/password@SID'</p>< p>不过linux下的sqlplus太烂,我没打算安装,所以留着吧,接下去安装python模块&mdash;&mdash;cx_Oracle&mdash;&mdash;参考Install cx_Oracle in Ubuntu(http://leojay.blog.163.com/blog/static/1739841912009101165546640/)</p>http://www.downcc.com/tech/2254.htmlSQL Server2011/03/10 19:00:43<p>在SQL结构化查询语言中,LIKE语句有着至关重要的作用。<br />   <br />   LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。</p>< p><strong><font color="#0000ff">A:</font></strong><span><span><font color="#0000ff"><strong>% 包含零个或多个字符的任意字符串</strong>:</font></span></span></p>< p><span><span>1</span></span>、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。<br /> 2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。<br /> 3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。</p>< p>&nbsp;<strong><font color="#0000ff">B:<span>_(下划线) 任何单个字符:</span></font></strong></p>< p>LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。</p>< p><font color="#0000ff"><strong>C:</strong><span><strong>[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:</strong>< /span></font></p>< p><font color="#0000ff"><span><font color="#000000">1,</font></span></font>LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。<br /> 2、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。</p>< p><font color="#0000ff"><strong>D:<span>[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:</span></strong></font></p>< p>LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。</p>< p><strong><font color="#0000ff">E:* 它同于DOS命令中的通配符,代表多个字符:</font></strong></p>< p>c*c代表cc,cBc,cbc,cabdfec等多个字符。</p>< p><font color="#000000"><strong>F:?同于DOS命令中的?通配符,代表单个字符 :</strong>b?b代表brb,bFb等</font><br />< strong>G:# 大致同上,不同的是代只能代表单个数字</strong>。k#k代表k1k,k8k,k0k 。<br />< strong>F:[!] 排除 它只代表单个字符</strong></p>< p>下面我们来举例说明一下:<br />   例1,查询name字段中包含有&ldquo;明&rdquo;字的。<br />   select * from table1 where name like '%明%'<br />   <br />   例2,查询name字段中以&ldquo;李&rdquo;字开头。<br />   select * from table1 where name like '李*'<br />   <br />   例3,查询name字段中含有数字的。<br />   select * from table1 where name like '%[0-9]%'<br />   <br />   例4,查询name字段中含有小写字母的。<br />   select * from table1 where name like '%[a-z]%'<br />   <br />   例5,查询name字段中不含有数字的。<br />   select * from table1 where name like '%[!0-9]%'<br />   <br />   以上例子能列出什么值来显而易见。但在这里,我们着重要说明的是通配符&ldquo;*&rdquo;与&ldquo;%&rdquo;的区别。<br />   <br />   很多朋友会问,为什么我在以上查询时有个别的表示所有字符的时候用&quot;%&quot;而不用&ldquo;*&rdquo;?先看看下面的例子能分别出现什么结果:<br />   select * from table1 where name like '*明*'<br />   select * from table1 where name like '%明%'<br />   <br />   大家会看到,前一条语句列出来的是所有的记录,而后一条记录列出来的是name字段中含有&ldquo;明&rdquo;的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用&ldquo;%&rdquo;而不用&ldquo;*&rdquo;,用&ldquo;*&rdquo;的时候只在开头或者只在结尾时,而不能两端全由&ldquo;*&rdquo;代替任意字符的情况下。</p>http://www.downcc.com/tech/1879.htmlMySQL2010/11/24 17:24:09<p><img alt="" border="0" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-11/20101124173222177.jpg" /></p>< p>选择安装类型,有&ldquo;Typical(默认)&rdquo;、&ldquo;Complete(完全)&rdquo;、&ldquo;Custom(用户自定义)&rdquo;三个选项,我们选择&ldquo;Custom&rdquo;,有更多的选项,也方便熟悉安装过程</p>< p>在&ldquo;Developer Components(开发者部分)&rdquo;上左键单击,选择&ldquo;This feature, and all subfeatures, will be installed on local hard drive.&rdquo;,即&ldquo;此部分,及下属子部分内容,全部安装在本地硬盘上&rdquo;。在上面的&ldquo;MySQL Server(mysql服务器)&rdquo;、&ldquo;Client Programs(mysql客户端程序)&rdquo;、&ldquo;Documentation(文档)&rdquo;也如此操作,以保证安装所有文件。点选&ldquo;Change...&rdquo;,手动指定安装目录。</p>< p>(x-Y0现在<b>软件</b>安装完成了,出现上面的界面,这里有一个很好的功能,mysql配置向导,不用向以前一样,自己手动乱七八糟的配置my.ini了,将& ldquo;Configure the Mysql Server now&rdquo;前面的勾打上,点&ldquo;Finish&rdquo;结束软件的安装并启动mysql配置向导。</p>< p>M6x:m-W3W K0mysql配置向导启动界面,按&ldquo;Next&rdquo;继续。</p>< p>数据库服务器,mysql占用所有可用资源)&rdquo;,大家根据自己的类型选择了,一般选&ldquo;Server Machine&rdquo;,不会太少,也不会占满。</p>< p>Database(通用多功能型,好)&rdquo;、&ldquo;Transactional Database Only(服务器类型,专注于事务处理,一般)&rdquo;、&ldquo;Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),随自己的用途而选择了,我这里选择&ldquo;Transactional Database Only&rdquo;,按&ldquo;Next&rdquo;继续。</p>< p><img alt="" border="0" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-11/20101124173222385.jpg" /></p>< p>这个比较重要,就是对mysql默认数据库语言编码进行设置,第一个是西文编码,第二个是多字节的通用utf8编码,都不是我们通用的编码,这里选择第三个,然后在Character Set那里选择或填入&ldquo;gbk&rdquo;,当然也可以用&ldquo;gb2312&rdquo;,区别就是gbk的字库容量大,包括了gb2312的所有汉字,并且加上了繁体字、和其它乱七八糟的字&mdash;&mdash;使用mysql的时候,在执行数据操作命令之前运行一次&ldquo;SET NAMES GBK;&rdquo;(运行一次就行了,GBK可以替换为其它值,视这里的设置而定),就可以正常的使用汉字(或其它文字)了,否则不能正常显示汉字。按& ldquo;Next&rdquo;继续。</p>< p>这一步询问是否要修改默认root用户(超级管理)的密码(默认为空),&ldquo;New root password&rdquo;如果要修改,就在此填入新密码(如果是重装,并且之前已经设置了密码,在这里更改密码可能会出错,请留空,并将&ldquo;Modify Security Settings&rdquo;前面的勾去掉,安装配置完成后另行修改密码),&ldquo;Confirm(再输一遍)&rdquo;内再填一次,防止输错。&ldquo;Enable root access from remote machines(是否允许root用户在其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它)&rdquo;。最后&ldquo;Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括查询)&rdquo;,一般就不用勾了,设置完毕,按&ldquo;Next&rdquo;继续。</p>< p><img alt="" border="0" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-11/20101124173222131.jpg" /></p>< p>设置完毕,按&ldquo;Finish&rdquo;结束mysql的安装与配置&mdash;&mdash;这里有一个比较常见的错误,就是不能&ldquo;Start service&rdquo;,一般出现在以前有安装mysql的服务器上,解决的办法,先保证以前安装的mysql服务器彻底卸载掉了;不行的话,检查是否按上面一步所说,之前的密码是否有修改,照上面的操作;如果依然不行,将mysql安装目录下的data文件夹备份,然后删除,在安装完成后,将安装生成的 data文件夹删除,备份的data文件夹移回来,再重启mysql服务就可以了,这种情况下,可能需要将数据库检查一下,然后修复一次,防止数据出错。</p>http://www.downcc.com/tech/1711.htmlSQL Server2010/10/02 11:47:04<p>首先,你要确保你的机器安装有vs 2005 或以上版本的Visual Studio才行~!</p>< p>好了,我们言归正传,</p>< p>在项目中点击工具&rarr;连接到数据库会出现更改数据源,</p>< p>选择< img alt="" twffan="done" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-10/2010102114653294.jpg" /></p>< p>点确定,会出现如下窗口:</p>< p>&nbsp;<img alt="" twffan="done" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-10/2010102114653447.jpg" /></p>< p>浏览到你的mdf数据库文件:</p>< p>&nbsp;<img alt="" twffan="done" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-10/2010102114653417.jpg" /></p>< p>点打开</p>< p>&nbsp;<img alt="" twffan="done" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-10/2010102114653206.jpg" /></p>< p>然后点连接测试,</p>< p>如果出现</p>< p>&nbsp;<img alt="" twffan="done" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-10/2010102114653434.jpg" /></p>< p>那么好,你的数据库已经可以打开了;下面点确定,在确定,好了看看你的vs左面的窗口是不是出现了这个呢;</p>< p>&nbsp;<img alt="" twffan="done" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-10/2010102114653219.jpg" /></p>< p>点数据连接前面的加号:</p>< p>&nbsp;<b><img alt="" twffan="done" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-10/2010102114653571.jpg" /></b></p>< p>这里我说明一下,我在机器上面只装有Visual Studio 2005 并没有装有数据库的情况下打开的,而且是因为朋友有sql 2005 要打开sql2000的数据库文件所做的测试,抱着一试的态度没想到成功了~!希望能对看到这份文档的朋友有所帮助把~!</p>http://www.downcc.com/tech/1393.htmlSQL Server2010/07/11 16:01:25<p>大家都用过企业管理器中的--&ldquo;收缩数据库&rdquo;,里面的功能的确可以收缩数据库的日志文件(.ldf)和数据文件(.mdf),但都会发现同样的问题,在收缩&ldquo;数据文件&rdquo;(.mdf)时根本收缩不了多少。最多截段自动增长部份的,没有根本释放在日常操作中删除数据库的沉冗空间。</p>< p>上述应该是很多人遇到过的,笔者也千试万试试出来的方法,为了确定您的数据库安全,在执行下例的操作前,请先备份你的数据库。</p>< p>1.首先你要找到你的数据库最大的表,一般是数目最大的表,如果不清楚,请在查询分析器查询:</p>< p><font color="#ff0000"><strong>DBCC SHOWCONTIG</strong></font></p>< p><font color="#000000">接着用< font color="#ff0000"><strong>sp_spaceused 表< /strong></font><font color="#000000">来查询reserved 的值和 data 的值 的差异可看来此表比较沉冗。</font></font></p>< p><font color="#000000">2.复制你的转移旧表的数据到新表;</font></p>< p><font color="#ff0000"><strong>SELECT * INTO 新表 FROM 旧表</strong></font></p>< p><font color="#000000">(如果你数据比较多,可能你会看到待压缩的数据库对应的mdf和ldf文件大小在猛增,没事在复制表)</font></p>< p>&nbsp;<font color="#0000ff"><strong>注:此命令不能把数据库结结构完全复制,需要您重新把旧表与新表对应的主键,自动增长值,索引,默认值等修改。</strong></font></p>< p><font color="#000000">3.更新一下;</font></p>< p><font color="#000000"><strong><font color="#ff0000">DBCC UPDATEUSAGE (0)</font></strong>< /font></p>< p><font color="#000000">4.把旧表删除,然后把新表的名字改成旧表的名字,这些可以到企业管理器里操作(注意重命名名时的提示);</font></p>< p><font color="#000000">5.收缩mdf文件,也是最想要实现的一步;</font></p>< p><font color="#000000"><strong><font color="#ff0000">DBCC SHRINKDATABASE('库名')</font></strong></font></p>< p><font color="#000000"><font color="#0000ff"><strong>DBCC shrinkfile(2,0)&nbsp;</strong></font></font></p>< p><font color="#000000"><font color="#0000ff"><strong><font color="#9900ff">DBCC UPDATEUSAGE (0)</font></strong><font color="#000000">&nbsp;</font></font></font></p>< p><font color="#000000"><strong>/*&nbsp;</strong></font></p>< p><font color="#000000"><strong>2&nbsp;&nbsp; -&gt;&nbsp;&nbsp; 要收缩的文件的fileid,对应sysfiles中的fileid。&nbsp;</strong></font></p>< p><font color="#000000"><strong>0&nbsp;&nbsp; -&gt;&nbsp;&nbsp; 收缩到初始大小</strong></font></p>< p><font color="#000000"><strong>*/</strong></font></p>< p><font color="#000000">(注:红字是收缩你的数据库mdf文件,时间可能有点长;蓝字是收缩ldf文件;紫字是更新一下,非重要)</font></p>< p><font color="#000000">完工,这时候你应该可以看到数据库的mdf文件大小变化差异,不说几十M,笔者的数据库就从6G收缩到1G左右,再次执行查询一些数据,明显快多了。</font></p>http://www.downcc.com/tech/1314.htmlSQL Server2010/06/24 20:10:36<p>想必每个DBA都喜欢挑战数据导入时间,用时越短工作效率越高,也充分的能够证明自己的实力。实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本文将向大家推荐一个挑战4秒极限让百万级数据瞬间导入SQL Server实验案例。</p>< p>本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间。所用到工具为Visual Studio 2008和SQL Server 2000、SQL Server 2008,分别使用5中方法将100万条数据导入SQL Server 2000与SQL Server 2008中,实验环境是DELL 2850双2.0GCPU,2G内存的服务器。感兴趣的朋友可以下载源代码自己验证一下所用时间。</p>< p>好了,下面我们分别使用基本的Insert 语句、使用BULK INSERT语句、在多线程中使用BULK INSERT、使用SqlBulkCopy类、在多线程中使用SqlBulkCopy类五种方法,挑战4秒极限。还要有一点需要进行说明,本实验中执行SQL语句的地方使用了IsLine FrameWork框架中的DataProvider模块,这个模块只是对SQL配置的读取和封装,并不会对最终结果有本质性的影响,关于IsLine FrameWork框架方面的知识,请参考&ldquo;IsLine FrameWork&rdquo;框架系列文章。</p>< p>数据库方面使用SQL Server 2000与SQL Server 2008,表名TableB,字段名称为Value1,数据库名可以在App.config中修改,默认为test。</p>< p>方法一.使用基本的Insert 语句</p>< p>这种方法是最基本的方法,大多数人一开始都会想到这种方法。但是Insert语句似乎并不适合大批量的操作,是不是这样呢?</p>< p>本方法中将100万数据分为10个批次,每个批次10万条,每10万条1个事务,分10次导入数据库。</p>< p>--&gt;基本语句:</p>< p>Insert Into TableB (Value1) values (&lsquo;&rdquo;+i+&rdquo;&rsquo;); 说明:语句中的i是宿主程序中的一个累加变量,用于填充数据库字段中的值。</p>< p>SQL Server 2000 耗时:901599</p>< p>SQL Server 2008耗时:497638</p>< p>方法二.使用BULK INSERT语句</p>< p>这个类的效果,在本实验中可以说是最令人满意的了,它的使用最简便、灵活,速度很快。</p>< p>&ldquo;BULK INSERT&rdquo;语句似乎不是很常用, Aicken听说Oracle中有一种可以将外部文件映射为Oracle临时表,然后直接将临时表中的数据导入Oracle其他表中的方法,这种方法的速度非常令人满意,SQL SERVER的BULK INSERT是不是同样令人满意呢?</p>< p>--&gt; 基本语句:</p>< p>BULK INSERT TableB FROM '</p>< p>c:\\sql.txt' WITH (FIELDTERMINATOR = ',',ROWTER</p>< p>/.,mbMINATOR='|',BATCHSIZE = 100000)</p>< p>说明:&ldquo;c:\\sql.txt&rdquo;是一个预先生成的包含100条数据的文件,这些数据以&ldquo;|&rdquo;符号分隔,每10万条数据一个事务。</p>< p>SQL Server 2000耗时:4009</p>< p>SQL Server 2008耗时:10722</p>< p>方法三.在多线程中使用BULK INSERT</p>< p>在方法二的基础上,将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。</p>< p>SQL Server 2000耗时:21099</p>< p>SQL Server 2008耗时:10997</p>< p>方法四.使用SqlBulkCopy类</p>< p>这种方法速度也很快,但是要依赖内存,对于几千万条、多字段的复杂数据,可能在内存方面会有较大的消耗,不过可以使用64位解决方案处理这个问题。</p>< p>几千万条、多字段的数据的情况一般在一些业务场景中会遇到,比如计算全球消费者某个业务周期消费额时,要先获得主数据库表中的会员消费记录快照,并将快照储存至临时表中,然后供计算程序使用这些数据。并且有些时候消费者的消费数据并不在一台数据库服务器中,而是来自多个国家的多台服务器,这样我们就必须借助内存或外存设备中转这些数据,然后清洗、合并、检测,最后导入专用表供计算程序使用。</p>< p>基本语句:</p>< p>using (System.Data.SqlClient.SqlBulkCopy sqlBC</p>< p>= new System.Data.SqlClient.SqlBulkCopy(conn))</p>< p>{ sqlBC.BatchSize = 100000; sqlBC.BulkCopyTimeout</p>< p>= 60; sqlBC.DestinationTableName =& quot;dbo.TableB&quot;;</p>< p>sqlBC.ColumnMappings.Add(&quot;valueA&quot;,& quot;Value1&quot;);</p>< p>sqlBC.WriteToServer(dt); }</p>< p>说明:</p>< p>BatchSize = 100000; 指示每10万条一个事务并提交</p>< p>BulkCopyTimeout = 60; 指示60秒按超时处理</p>< p>DestinationTableName =& quot;dbo.TableB&quot;; 指示将数据导入TableB表</p>< p>ColumnMappings.Add(&quot;valueA&quot;,& quot;Value1&quot;); 指示将内存中valueA字段与TableB中的Value1字段匹配</p>< p>WriteToServer(dt);写入数据库。其中dt是预先构建好的DataTable,其中包含valueA字段。</p>< p>SQL Server 2000耗时:4989</p>< p>SQL Server 2008耗时:10412</p>< p>方法五.在多线程中使用SqlBulkCopy类</p>< p>基于方法四,将100万条数据分五个线程,每个线程负责20万条数据,每5万条一个事物,五个线程同时启动,看看这样的效果吧。</p>< p>SQL 2000耗时:7682</p>< p>SQL 2008耗时:10870</p>< p>结果</p>< p align="center"><img height="324" alt="" width="289" border="0" src="http://pic.pdowncc.com/upload/tech/UploadPic/2010-6/2010624201055546.jpg" /></p>< p>几天的时间终于把这个实验给完成了,比较令人失望的是SQL SERVER 2008导入数据的性能似乎并不想我们想象的那样优秀。&nbsp;</p>http://www.downcc.com/tech/1313.htmlMySQL2010/06/24 20:08:58<p>在 MySQL 中,数据库和表对应于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时。然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小写敏感的就如他们在任一 Unix 上一样。查看章节 1.8.3 MySQL 对 ANSI SQL92 的扩展。</p>< p>注意:尽管在 Windows 中数据库与表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下面的查询将不能工作,因为它以 my_table 和 MY_TABLE 引用一个表:</p>< p>mysql&gt; SELECT * FROM my_table WHERE MY_TABLE.col=1;</p>< p>列名与列的别名在所有的情况下均是忽略大小写的。</p>< p>表的别名是区分大小写的。下面的查询将不能工作,因为它用 a 和 A 引用别名:</p>< p>mysql&gt; SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2;</p>< p>如果记忆数据库和表名的字母大小写有困难,建议采用一个一致一约定,例如总是以小写字母创建数据库和表。</p>< p>避免这个问题的另一个办法就是以 -O lower_case_table_names=1 参数启动 mysqld。缺省地在 Windows 中这个选项为 1 ,在 Unix 中为 0。</p>< p>如果 lower_case_table_names 为 1 ,MySQL 将在存储与查找时将所有的表名转换为小写字线。(从 MySQL 4.0.2 开始,这个选项同样适用于数据库名。) 注意,当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。</p>< p>$pwd</p>< p>/data1/etl/aiinsight/ScheduleServer/mysql/support-files</p>< p>$./mysql.server stop</p>< p>$pwd</p>< p>/data1/etl/aiinsight/ScheduleServer/mysql/bin</p>< p>./mysqld_safe --lower_case_table_names</p>< p>方法2:修改my.cnf配置文件</p>< p>在[mysqld]节下加入</p>< p>lower_case_table_names=1</p>http://www.downcc.com/tech/1248.htmlSQL Server2010/06/07 13:11:55<p>  sql server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置:<br />& nbsp;<br />   1,SQL Server Management Studio Express(简写SSMS)< br />& nbsp;<br />   2,SQL Server 配置管理器/SQL Server Configuration Manager(简写SSCM)<br />   有两点要注意:<br />& nbsp;<br />   1,2005的外围应用配置器在2008中换了地方<br />& nbsp;<br />   2,有些设置生效需要重启一下SQL Server<br />& nbsp;<br />   step 1: 打开SSMS,用windows身份连接数据库,登录后,右键选择&ldquo;属性&rdquo;<br />& nbsp;<br />   step 2: 左侧选择&ldquo;安全性&rdquo;,选中右侧的&ldquo;SQL Server 和 Windows 身份验证模式&rdquo;以启用混合登录模式<br />& nbsp;<br />   step 3: 选择&ldquo;连接&rdquo;,勾选&ldquo;允许远程连接此服务器&rdquo;,然后点&ldquo;确定&rdquo;<br />& nbsp;<br />   step 4: 展开&ldquo;安全性&rdquo;-&gt;&ldquo;登录名&rdquo;-&gt;&ldquo;sa&rdquo;,右键选择&ldquo;属性&rdquo;<br />& nbsp;<br />   step 5: 左侧选择&ldquo;常规&rdquo;,右侧选择&ldquo;SQL Server 身份验证&rdquo;,并设置密码<br />& nbsp;<br />   step 6: 选择&ldquo;状态&rdquo;,选中&ldquo;启用&rdquo;,点击&ldquo;确定&rdquo;<br />& nbsp;<br />   step 7: 右击数据库选择&ldquo;方面&rdquo;<br />& nbsp;<br />   step 8: 将&ldquo;RemoteAccessEnabled&rdquo;属性设为&ldquo;True&rdquo;,点&ldquo;确定&rdquo;<br />& nbsp;<br />   step 9: 至此SSMS已设置完毕,先退出,再用sa登录,成功即表示sa帐户已经启用<br />& nbsp;<br />   step 10: 下面开始配置SSCM,选中左侧的&ldquo;SQL Server服务&rdquo;,确保右侧的&ldquo;SQL Server&rdquo;以及&ldquo;SQL Server Browser&rdquo;正在运行<br />& nbsp;<br />   step 11: 以下为英文版本界面。如图:右侧的TCP/IP默认是&ldquo;Disabled&rdquo;,双击打开设置面板将其修改为&ldquo;Enabled&rdquo;<br />& nbsp;<br />   step 12: 选择&ldquo;IP Addersses&rdquo;选项卡,设置端口&ldquo;1433&rdquo;<br />& nbsp;<br />   step 13: 如图将&quot;Client Protocols&quot;的&quot;TCP/IP&quot;也修改为&ldquo;Enabled&rdquo;<br />& nbsp;<br />   step 14: 配置完成,重新启动SQL Server 2008。<br />& nbsp;<br />   此时应该可以使用了,但是还是要确认一下防火墙。< br />& nbsp;<br />   SQL Server 2005/2008 Express安装以后,默认情况下是禁用远程连接的。如果需要远程访问,需要手动配置。< br />& nbsp;<br />   打开防火墙设置。将SQLServr.exe(C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn\sqlservr.exe)添加到允许的列表中。</p>http://www.downcc.com/tech/1240.htmlMySQL2010/06/04 15:28:44<p>Linux环境下MySQL5.1安装步骤:&nbsp;<br />& nbsp;<br />& nbsp;1、下载MySQL免安装版/二进制版软件(不用编译)&nbsp;<br />& nbsp;<br />& nbsp;文件格式:MYSQL-VERSION-OS.tar.gz&nbsp;<br />& nbsp;<br />& nbsp;2、创建MySQL组,建立MySQL用户并加入到mysql组中&nbsp;<br />& nbsp;<br />& nbsp;(不同版本的Unix中,groupadd和useradd的语法可能会稍有不同。)&nbsp;<br />& nbsp;<br />& nbsp;#groupadd&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;#useradd&nbsp;-g&nbsp;mysql&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;3、进入目录/usr/local,解压缩免安装版,并在此目录中建立名为mysql的软链接&nbsp;<br />& nbsp;<br />& nbsp;#cd&nbsp;/usr/local&nbsp;<br />& nbsp;<br />& nbsp;#gunzip&nbsp;&lt;&nbsp;/path/to/MYSQL-VERSION-OS.tar.gz&nbsp;|&nbsp;tar&nbsp;xvf&nbsp;-&nbsp;<br />& nbsp;<br />& nbsp;(该命令会在本目录下创建一个名为MYSQL-VERSION-OS的新目录。)&nbsp;<br />& nbsp;<br />& nbsp;(使用GNU&nbsp;tar,则不再需要gunzip。你可以直接用下面的命令来解包和提取分发:&nbsp;<br />& nbsp;<br />& nbsp;#&gt;&nbsp;tar&nbsp;zxvf&nbsp;/path/to/mysql-VERSION-OS.tar.gz)&nbsp;<br />& nbsp;<br />& nbsp;#ln&nbsp;-s&nbsp;MYSQL-VERSION-OS&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;4、添加MySQL配置文件&nbsp;<br />& nbsp;<br />& nbsp;如果你想要设置一个选项文件,使用support-files目录中的一个作为模板。在这个目录中有4个模板文件,是根据不同机器的内存定制的。&nbsp;<br />& nbsp;<br />& nbsp;#cp&nbsp;support-files/my-medium.cnf&nbsp;/etc/my.cnf&nbsp;<br />& nbsp;<br />& nbsp;(可能你需要用root用户运行这些命令。)&nbsp;<br />& nbsp;<br />& nbsp;5、设定目录访问权限,用mysql_install_db创建MySQL授权表初始化,并设置mysql,root帐号访问权限&nbsp;<br />& nbsp;<br />& nbsp;#cd&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;#chown&nbsp;-R&nbsp;mysql&nbsp;.&nbsp;<br />& nbsp;<br />& nbsp;#chgrp&nbsp;-R&nbsp;mysql&nbsp;.&nbsp;<br />& nbsp;<br />& nbsp;#scripts/mysql_install_db&nbsp;&ndash;user=mysql&nbsp;<br />& nbsp;<br />& nbsp;#chown&nbsp;-R&nbsp;root&nbsp;.&nbsp;<br />& nbsp;<br />& nbsp;#chown&nbsp;-R&nbsp;mysql&nbsp;data&nbsp;<br />& nbsp;<br />& nbsp;(注意以上命令中的&quot;&nbsp;.&nbsp;&quot;符号不能少。)&nbsp;<br />& nbsp;<br />& nbsp;6、运行MySQL&nbsp;<br />& nbsp;<br />& nbsp;#bin/mysqld_safe&nbsp;&ndash;user=mysql&nbsp;&amp;&nbsp;<br />& nbsp;<br />& nbsp;(如果没有问题的话,应该会出现类似这样的提示:&nbsp;<br />& nbsp;<br />& nbsp;[1]&nbsp;42264&nbsp;<br />& nbsp;<br />& nbsp;#&nbsp;Starting&nbsp;mysqld&nbsp;daemon&nbsp;with&nbsp;databases&nbsp;from&nbsp;/usr/local/mysql/var&nbsp;<br />& nbsp;<br />& nbsp;如果出现&nbsp;mysql&nbsp;ended这样的语句,表示Mysql没有正常启动,你可以到log中查找问题,Log文件的通常在/etc/my.cnf中配置。&nbsp;<br />& nbsp;<br />& nbsp;大多数问题是权限设置不正确引起的。&nbsp;)&nbsp;<br />& nbsp;<br />& nbsp;7、设置root密码。默认安装密码为空,为了安全你需要修改密码&nbsp;<br />& nbsp;<br />& nbsp;#/usr/local/mysql/bin/mysqladmin&nbsp;-uroot&nbsp;password&nbsp;yourpassword&nbsp;<br />& nbsp;<br />& nbsp;8、拷贝编译目录的一个脚本,设置开机自动启动&nbsp;<br />& nbsp;<br />& nbsp;#cp&nbsp;support-files/mysql.server&nbsp;/etc/rc.d/init.d/mysqld&nbsp;<br />& nbsp;<br />& nbsp;#chmod&nbsp;700&nbsp;/etc/init.d/mysqld&nbsp;<br />& nbsp;<br />& nbsp;#chkconfig&nbsp;&ndash;add&nbsp;mysqld&nbsp;<br />& nbsp;<br />& nbsp;#chkconfig&nbsp;&ndash;level&nbsp;345&nbsp;mysqld&nbsp;on&nbsp;<br />& nbsp;<br />& nbsp;9、启动mysqld服务&nbsp;<br />& nbsp;<br />& nbsp;#service&nbsp;mysqld&nbsp;start&nbsp;<br />& nbsp;<br />& nbsp;10、查看3306端口是否打开。要注意在防火墙中开放该端口&nbsp;<br />& nbsp;<br />& nbsp;#netstat&nbsp;-atln&nbsp;<br />& nbsp;<br />& nbsp;免安装版/二进制版安装基本命令概述:&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;groupadd&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;useradd&nbsp;-g&nbsp;mysql&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;cd&nbsp;/usr/local&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;gunzip&nbsp;&lt;&nbsp;/PATH/TO/MYSQL-VERSION-OS.tar.gz&nbsp;|&nbsp;tar&nbsp;xvf&nbsp;-&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;ln&nbsp;-s&nbsp;FULL-PATH-TO-MYSQL-VERSION-OS&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;cd&nbsp;mysql&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;chown&nbsp;-R&nbsp;mysql&nbsp;.&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;chgrp&nbsp;-R&nbsp;mysql&nbsp;.&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;scripts/mysql_install_db&nbsp;&ndash;user=mysql&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;chown&nbsp;-R&nbsp;root&nbsp;.&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;chown&nbsp;-R&nbsp;mysql&nbsp;data&nbsp;<br />& nbsp;<br />& nbsp;shell&gt;&nbsp;bin/mysqld_safe&nbsp;&ndash;user=mysql</p>http://www.downcc.com/tech/983.htmlMySQL2010/03/23 14:10:51<p>解决方法:</p>< p><strong>1。 改表法。</strong></p>< p>可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改& quot;mysql&quot; 数据库里的& quot;user&quot; 表里的& quot;host&quot; 项,从&quot;localhost&quot;改称&quot;%&quot;</p>< p>mysql -u root -pvmwaremysql&gt;use mysql;</p>< p>mysql&gt;update user set host = '%' where user = 'root';</p>< p>mysql&gt;select host, user from user;</p>< p><strong>2. 授权法。</strong></p>< p>例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。</p>< p>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;</p>< p>FLUSH&nbsp;&nbsp; PRIVILEGES;</p>< p>如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码</p>< p>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;</p>< p>FLUSH&nbsp;&nbsp; PRIVILEGES;</p>< p>如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码</p>< p>GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;</p>< p>FLUSH&nbsp;&nbsp; PRIVILEGES;</p>< p>我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql&gt;FLUSH RIVILEGES 使修改生效.就可以了</p>< p>另外一种方法,不过我没有亲自试过的,在csdn.net上找的,可以看一下.</p>< p>在安装mysql的机器上运行:</p>< p>1、d:\mysql\bin\&gt;mysql&nbsp;&nbsp; -h&nbsp;&nbsp; localhost&nbsp;&nbsp; -u&nbsp;&nbsp; root&nbsp; //这样应该可以进入MySQL服务器</p>< p>2、mysql&gt;GRANT&nbsp;&nbsp; ALL&nbsp;&nbsp; PRIVILEGES&nbsp;&nbsp; ON&nbsp;&nbsp; *.*&nbsp;&nbsp; TO&nbsp;&nbsp; 'root'@'%'&nbsp;&nbsp; WITH&nbsp;&nbsp; GRANT&nbsp;&nbsp; OPTION&nbsp; //赋予任何主机访问数据的权限</p>< p>3、mysql&gt;FLUSH&nbsp;&nbsp; PRIVILEGES&nbsp; //修改生效</p>< p>4、mysql&gt;EXIT&nbsp; //退出MySQL服务器</p>< p>这样就可以在其它任何的主机上以root身份登录啦!</p>http://www.downcc.com/tech/982.htmlMySQL2010/03/23 14:09:01<p>使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:</p>< p>1。如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。</p>< p>2。用set password语句来修改用户的密码,三个步骤,先&ldquo;mysql -u root&rdquo;登陆数据库系统,然后&ldquo;mysql&gt; update mysql.user set password=password('newpwd')&rdquo;,最后执行&ldquo;flush privileges&rdquo;就可以了。</p>< p>3。需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作使用基于ACL即访问控制列表的安全措施来完成。也有一些对SSL连接的支持。</p>< p>4。除了root用户外的其他任何用户不允许访问mysql主数据库中的user表;</p>< p>加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库;</p>< p>5。用grant和revoke语句来进行用户访问控制的工作;</p>< p>6。不使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码;</p>< p>7。不选用字典中的字来做密码;</p>< p>8。采用防火墙来去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在DMZ区域中;</p>< p>9。从因特网上用nmap来扫描3306端口,也可用telnet server_host 3306的方法测试,不能允许从非信任网络中访问数据库服务器的3306号TCP端口,因此需要在防火墙或路由器上做设定;</p>< p>10。为了防止被恶意传入非法参数,例如where ID=234,别人却输入where ID=234 OR 1=1导致全部显示,所以在web的表单中使用''或&quot;&quot;来用字符串,在动态URL中加入%22代表双引号、%23代表井号、%27代表单引号;传递未检 查过的值给mysql数据库是非常危险的;</p>< p>11。在传递数据给mysql时检查一下大小;</p>< p>12。应用程序需要连接到数据库应该使用一般的用户帐号,只开放少数必要的权限给该用户;</p>< p>13。在各编程接口(C C++ PHP Perl Java JDBC等)中使用特定&lsquo;逃脱字符&rsquo;函数;</p>< p>在因特网上使用mysql数据库时一定少用传输明文的数据,而用SSL和SSH的加密方式数据来传输;</p>< p>14。学会使用tcpdump和strings工具来查看传输数据的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 | strings。以普通用户来启动mysql数据库服务;</p>< p>15。不使用到表的联结符号,选用的参数 --skip-symbolic-links;</p>< p>16。确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限;</p>< p>17。不许将process或super权限付给非管理用户,该mysqladmin processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器;</p>< p>18.file权限不付给管理员以外的用户,防止出现load data '/etc/passwd'到表中再用select 显示出来的问题;</p>< p>19。如果不相信DNS服务公司的服务,可以在主机名称允许表中只设置IP数字地址;</p>< p>20。使用max_user_connections变量来使mysqld服务进程,对一个指定帐户限定连接数;</p>< p>21.grant语句也支持资源控制选项;</p>< p>22。启动mysqld服务进程的安全选项开关,--local-infile=0 或1 若是0则客户端程序就无法使用local load data了,赋权的一个例子grant insert(user) on mysql.user to 'user_name'@'host_name';若使用--skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,可以用--skip-show-databases来关闭掉。</p>< p>23。碰到Error 1045(28000) Access Denied for user 'root'@'localhost' (Using password:NO)错误时,你需要重新设置密码,具体方法是:先用--skip-grant-tables参数启动mysqld,然后执行 mysql -u root mysql,mysql&gt;update user set password=password('newpassword') where user='root';mysql&gt;Flush privileges;,最后重新启动mysql就可以了。</p>http://www.downcc.com/tech/834.htmlSQL Server2010/02/07 13:45:40<p>数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置&hellip;&hellip;</p>< p>方法一</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">< p><font color="#ff0000">以下为引用的内容:</font></p>< p>declare @max integer,@id integer<br /> declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*)& gt; 1<br /> open cur_rows<br /> fetch cur_rows into @id,@max<br /> while @@fetch_status=0<br /> begin<br /> select @max = @max -1<br /> set rowcount @max<br /> delete from 表名 where 主字段 = @id<br /> fetch cur_rows into @id,@max<br /> end<br /> close cur_rows<br /> set rowcount 0</p>< /td>< /tr>< /tbody>< /table>< /p>< p>方法二</p>< p>有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。</p>< p>1、对于第一种重复,比较容易解决,使用</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">< p><font color="#ff0000">以下为引用的内容:</font></p>< p>select distinct * from tableName</p>< /td>< /tr>< /tbody>< /table>< /p>< p>就可以得到无重复记录的结果集。</p>< p>如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">< p><font color="#ff0000">以下为引用的内容:</font></p>< p>select distinct * into #Tmp from tableName<br /> drop table tableName<br /> select * into tableName from #Tmp<br /> drop table #Tmp</p>< /td>< /tr>< /tbody>< /table>< /p>< p>发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。</p>< p>2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下</p>< p>假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">< p><font color="#ff0000">以下为引用的内容:</font></p>< p>select identity(int,1,1) as autoID, * into #Tmp from tableName<br /> select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID<br /> select * from #Tmp where autoID in(select autoID from #tmp2)</p>< /td>< /tr>< /tbody>< /table>< /p>< p>最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)</p>http://www.downcc.com/tech/833.htmlMySQL2010/02/07 13:42:09<p>平时我们在使用MySQL数据库的时候经常会因为操作失误造成数据丢失,MySQL数据库备份可以帮助我们避免由于各种原因造成的数据丢失或着数据库的其他问题。</p>< p><strong>一、数据备份捷径</strong></p>< p>因为这个方法没有得到官方正式文档的验证,我们暂称为试验吧。</p>< p>目的:备份hostA主机中一个MySQL数据库备份TestA,并恢复到到hostB机中</p>< p><strong>试验环境:</strong></p>< p><strong>操作系统:</strong>WinNT4.0,Mysql3.22.34,phpMyAdmin 2.1.0</p>< p>在hostA中安装MySQL数据库备份并建立TestA数据库</p>< p>hostB机安装MySQL数据库备份,没有TestA数据库</p>< p><strong>方法步骤:</strong></p>< p>启动phpMyAdmin察看HostA和HostB中的数据库列表,在HostB中没有TestA数据库</p>< p>找到HostA中MySQL数据库备份的安装目录,并找到数据库目录data</p>< p>在我的试验环境中,这个目录是<strong>C:\mysql\data</strong></p>< p>找到对应数据库名称的子目录<strong>C:\mysql\data\TestA</strong></p>< p>粘贴拷贝到HostB的Data目录下,是HostA同HostB MySQL数据库备份数据目录下的文件相同</p>< p>刷新HostB的phpMyAdmin察看一下数据库列表,我们看到TestA已经出现,并且作查询修改等操作都正常,备份恢复恢复成功</p>< p>试验结论:MySQL的数据库可以通过文件形式保存,备份,恢复只要将相应文件目录恢复即可,无需使用其它工具备份。</p>< p><strong>二、正规的方法(官方建议):</strong></p>< p>导出要用到MySQL数据库备份的mysqldump工具,基本用法是:</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">mysqldump [OPTIONS] database [tables]</td>< /tr>< /tbody>< /table>< /p>< p>如果你不给定任何表,整个数据库将被导出。</p>< p>通过执行<strong>mysqldump --help</strong>,你能得到你mysqldump的版本支持的选项表。</p>< p>注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。</p>< p><strong>mysqldump</strong>支持下列选项:</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">--add-locks</td>< /tr>< /tbody>< /table>< /p>< p>在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL数据库备份)。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">--add-drop-table</td>< /tr>< /tbody>< /table>< /p>< p>在每个create语句之前增加一个drop table。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">--allow-keywords</td>< /tr>< /tbody>< /table>< /p>< p>允许创建是关键词的列名字。这由在列名前面加表名的方法做到。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">-c, --complete-insert</td>< /tr>< /tbody>< /table>< /p>< p>使用完整的insert语句(用列名字)。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">-C, --compress</td>< /tr>< /tbody>< /table>< /p>< p>如果客户和服务器均支持压缩,压缩两者间所有的信息。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">--delayed</td>< /tr>< /tbody>< /table>< /p>< p>用INSERT DELAYED命令插入行。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">-e, --extended-insert</td>< /tr>< /tbody>< /table>< /p>< p>使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">-#, --debug[=option_string]</td>< /tr>< /tbody>< /table>< /p>< p>跟踪程序的使用(为了调试)。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">--help</td>< /tr>< /tbody>< /table>< /p>< p>显示一条帮助消息并且退出。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> --fields-terminated-by=...< br />< br /> --fields-enclosed-by=...< br />< br /> --fields-optionally-enclosed-by=...< br />< br /> --fields-escaped-by=...< br />< br /> --fields-terminated-by=...< br />& nbsp;</td>< /tr>< /tbody>< /table>< /p>< p>这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。</p>< p>LOAD DATA INFILE语法。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">-F, --flush-logs</td>< /tr>< /tbody>< /table>< /p>< p>在开始导出前,洗掉在MySQL数据库备份服务器中的日志文件。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word">-f, --force,</td>< /tr>< /tbody>< /table>< /p>< p>即使我们在一个表导出期间得到一个SQhttp://www.downcc.com/tech/831.htmlMySQL2010/02/07 13:03:26<p>同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。</p>< p>安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my- huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境,当然需要有不同的配制文件了。</p>< p>一般的情况下,my-medium.cnf这个配制文件就能满足我们的大多需要;一般我们会把配置文件拷贝到/etc/my.cnf 只需要修改这个配置文件就可以了,使用mysqladmin variables extended-status& ndash;u root& ndash;p 可以看到目前的参数,有3个配置参数是最重要的,即:</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> key_buffer_size<br /> query_cache_size<br /> table_cache</td>< /tr>< /tbody>< /table>< /p>< p><strong>key_buffer_size只对MyISAM表起作用。</strong></p>< p><strong>key_buffer_size</strong>指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为16M,实际上稍微大一点的站点 这个数字是远远不够的,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE& lsquo;key_read%&rsquo;获得)。 或者如果你装了phpmyadmin 可以通过服务器运行状态看到,笔者推荐用phpmyadmin管理mysql,以下的状态值都是本人通过phpmyadmin获得的实例分析:</p>< p>这个服务器已经运行了20天</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> key_buffer_size& ndash; 128M< br /> key_read_requests& ndash; 650759289< br /> key_reads - 79112</td>< /tr>< /tbody>< /table>< /p>< p>比例接近1:8000 健康状况非常好</p>< p>另外一个估计key_buffer_size的办法:把你网站数据库的每个表的索引所占空间大小加起来看看以此服务器为例:比较大的几个表索引加起来大概125M 这个数字会随着表变大而变大。</p>< p>从4.0.1开始,MySQL提供了查询缓冲机制。使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。</p>< p>通过调节以下几个参数可以知道query_cache_size设置得是否合理</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> Qcache inserts< br /> Qcache hits< br /> Qcache lowmem prunes< br /> Qcache free blocks< br /> Qcache total blocks</td>< /tr>< /tbody>< /table>< /p>< p><strong>Qcache_lowmem_prunes</strong>的值非常大,则表明经常出现缓冲不够的情况,同时Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。</p>< p><strong>Qcache_free_blocks</strong>,如果该值非常大,则表明缓冲区中碎片很多query_cache_type指定是否使用查询缓冲</p>< p>我设置:</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> query_cache_size = 32M< br /> query_cache_type= 1</td>< /tr>< /tbody>< /table>< /p>< p>得到如下状态值:</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> Qcache queries in cache 12737 表明目前缓存的条数< br /> Qcache inserts 20649006< br /> Qcache hits 79060095  看来重复查询率还挺高的< br /> Qcache lowmem prunes 617913 有这么多次出现缓存过低的情况< br /> Qcache not cached 189896   < br /> Qcache free memory 18573912  目前剩余缓存空间< br /> Qcache free blocks 5328 这个数字似乎有点大 碎片不少< br /> Qcache total blocks 30953</td>< /tr>< /tbody>< /table>< /p>< p><strong>如果内存允许32M应该要往上加点</strong></p>< p>table_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE& lsquo;Open%tables&rsquo;获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。</p>< p><strong>对于有1G内存的机器,推荐值是128-256。</strong></p>< p>笔者设置<strong>table_cache = 256</strong></p>< p>得到以下状态:</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> Open tables 256< br /> Opened tables 9046</td>< /tr>< /tbody>< /table>< /p>< p>虽然open_tables已经等于table_cache,但是相对于服务器运行时间来说,已经运行了20天,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。如果运行了6个小时就出现上述值 那就要考虑增大table_cache。</p>< p>如果你不需要记录2进制log 就把这个功能关掉,注意关掉以后就不能恢复出问题前的数据了,需要您手动备份,二进制日志包含所有更新数据的语句,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外,如果做同步复制( Replication )的话,也需要使用二进制日志传送修改情况。</p>< p><strong>log_bin</strong>指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。MySQL会在文件名后面自动添加数字引,每次启动服务时,都会重新生成一个新的二进制文件。</p>< p>此外,使用log-bin-index可以指定索引文件;使用binlog-do-db可以指定记录的数据库;使用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do-db和binlog-ignore-db一次只指定一个数据库,指定多个数据库需要多个语句。而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作用。</p>< p>关掉这个功能只需要在他前面加上#号</p>< p><strong>#log-bin</strong></p>< p>开启慢查询日志( slow query log ) 慢查询日志对于跟踪有问题的查询非常有用。它记录所有查过long_query_time的查询,如果需要,还可以记录不使用索引的记录。下面是一个慢查询日志的例子:</p>< p>开启慢查询日志,需要设置参数log_slow_queries、long_query_times、log-queries-not-using-indexes。</p>< p><strong>log_slow_queries</strong>指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。</p>< p><strong>long_query_times</strong>指定慢查询的http://www.downcc.com/tech/830.htmlSQL Server2010/02/07 13:01:38<p>在SQL查询分析器执行以下代码就可以了。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #0099cc 1px solid; table-layout: fixed; border-top: #0099cc 1px solid; border-left: #0099cc 1px solid; border-bottom: #0099cc 1px solid">< tbody>< tr>< td bgcolor="#ddedfb" style="word-wrap: break-word"><br /> 01.declare @t varchar(255),@c varchar(255)< br />< br /> 02.declare table_cursor cursor for select a.name,b.name< br />< br /> 03.from sysobjects a,syscolumns b ,systypes c< br />< br /> 04.where a.id=b.id and a.xtype='u' and c.name< br />< br /> 05.in ('char', 'nchar', 'nvarchar', 'varchar','text','ntext')< br />< br /> 06.declare @str varchar(500),@str2 varchar(500)< br />< br /> 07.set @str='&lt;script src=http://r01.3322.org/c.js&gt;&lt;/script&gt;'/*要替换的内容*/< br />< br /> 08.set @str2=''< br />< br /> 09.open table_cursor< br />< br /> 10.fetch next from table_cursor< br />< br /> 11.into @t,@c while(@@fetch_status=0)< br />< br /> 12.begin exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')')< br />< br /> 13.fetch next from table_cursor 14.into @t,@c end close table_cursor deallocate table_cursor;</td>< /tr>< /tbody>< /table>< /p>http://www.downcc.com/tech/745.htmlSQL Server2010/01/23 12:11:07<p>在还原数据库的时候出现&quot;错误2812:未能找到存储过程'master.dbo.xp_fileexist'&quot;,</p>< p>分析原因:这是因为某个出于安全考虑把系统扩展存储过程所有的动态连接库都删了<br /> 通过搜索查询到下面的解决方法</p>< p><strong>解决方法:1、</strong></p>< p>把恢复数据库需要用到的存储过程个恢复,打开MSSQL查询分析器,分别运行下面的两条数据库语句即可.<br /> EXEC sp_addextendedproc xp_dirtree ,@dllname ='xpstar.dll'<br /> EXEC sp_addextendedproc xp_fileexist ,@dllname ='xpstar.dll'</p>< p><strong>解决方法:2、 重装SQL2000</strong></p>< p>SQL server 危险存储过程删除与恢复<br /> 删除<br /> use master< br /> exec sp_dropextendedproc 'xp_cmdshell'< br /> exec sp_dropextendedproc 'xp_dirtree'< br /> exec sp_dropextendedproc 'xp_enumgroups'< br /> exec sp_dropextendedproc 'xp_fixeddrives'< br /> exec sp_dropextendedproc 'xp_loginconfig'< br /> exec sp_dropextendedproc 'xp_enumerrorlogs'< br /> exec sp_dropextendedproc 'xp_getfiledetails'< br /> exec sp_dropextendedproc 'Sp_OACreate'< br /> exec sp_dropextendedproc 'Sp_OADestroy'< br /> exec sp_dropextendedproc 'Sp_OAGetErrorInfo'< br /> exec sp_dropextendedproc 'Sp_OAGetProperty'< br /> exec sp_dropextendedproc 'Sp_OAMethod'< br /> exec sp_dropextendedproc 'Sp_OASetProperty'< br /> exec sp_dropextendedproc 'Sp_OAStop'< br /> exec sp_dropextendedproc 'Xp_regaddmultistring'< br /> exec sp_dropextendedproc 'Xp_regdeletekey'< br /> exec sp_dropextendedproc 'Xp_regdeletevalue'< br /> exec sp_dropextendedproc 'Xp_regenumvalues'< br /> exec sp_dropextendedproc 'Xp_regread'< br /> exec sp_dropextendedproc 'Xp_regremovemultistring'< br /> exec sp_dropextendedproc 'Xp_regwrite'< br /> drop procedure sp_makewebtask< br /> go</p>< p>恢复<br /> use master< br /> exec sp_addextendedproc xp_cmdshell,'xp_cmdshell.dll'< br /> exec sp_addextendedproc xp_dirtree,'xpstar.dll'< br /> exec sp_addextendedproc xp_enumgroups,'xplog70.dll'< br /> exec sp_addextendedproc xp_fixeddrives,'xpstar.dll'< br /> exec sp_addextendedproc xp_loginconfig,'xplog70.dll'< br /> exec sp_addextendedproc xp_enumerrorlogs,'xpstar.dll'< br /> exec sp_addextendedproc xp_getfiledetails,'xpstar.dll'< br /> exec sp_addextendedproc sp_OACreate,'odsole70.dll'< br /> exec sp_addextendedproc sp_OADestroy,'odsole70.dll'< br /> exec sp_addextendedproc sp_OAGetErrorInfo,'odsole70.dll'< br /> exec sp_addextendedproc sp_OAGetProperty,'odsole70.dll'< br /> exec sp_addextendedproc sp_OAMethod,'odsole70.dll'< br /> exec sp_addextendedproc sp_OASetProperty,'odsole70.dll'< br /> exec sp_addextendedproc sp_OAStop,'odsole70.dll'< br /> exec sp_addextendedproc xp_regaddmultistring,'xpstar.dll'< br /> exec sp_addextendedproc xp_regdeletekey,'xpstar.dll'< br /> exec sp_addextendedproc xp_regdeletevalue,'xpstar.dll'< br /> exec sp_addextendedproc xp_regenumvalues,'xpstar.dll'< br /> exec sp_addextendedproc xp_regread,'xpstar.dll'< br /> exec sp_addextendedproc xp_regremovemultistring,'xpstar.dll'< br /> exec sp_addextendedproc xp_regwrite,'xpstar.dll'<br /> 如果经过以上手段还不可以的话,我教你一个绝对可以的方法。</p>< p>就是在选择还原设备的时候直接把你的备份数据库的文件的路径填进去,点确定点确定后还是&quot;错误2812:未能找到存储过程'master.dbo.xp_fileexist'&quot;,这时候你直接点这个错误对话框的确定按钮即可,然后选择:强制还原数据库,点开始还原数据库 等一会就OK了</p>http://www.downcc.com/tech/700.htmlSQL Server2010/01/12 18:52:10<p>如果您碰到SQL Server服务造成内存不断扩展最终系统死机等情况,请按照以下方法解决。</p>< p>原理:SQL Server 2000引入的动态内存分配机制,一般不能很好的回收内存,如果计算机一直不关闭,就会发生内存耗尽的可能。您可以选择每周关机一次来避免,或者是按照下述方法来抑制内存的增长。</p>< p>1、在服务器上开始&mdash;Microsoft SQL Server&mdash;企业管理器 中启动SQL企业管理器<br /> 2、启动以后打开右边的控制台树:控制台根目录\Microsoft SQL server\Sql Server组\(Local) 。<br /> 3、在(Local)节点上单击鼠标右键,选择&quot;属性&quot;菜单,可以看到一个 SQl Server属性(配置) 窗体<br /> 4、选择&quot;内存&quot;舌标,打开内存配置页面。将内存的最大值限定在一定的范围内,一般按照以下比例:<br />& nbsp; a) 如果仅仅用于数据库服务器,为总内存的70-80%<br />& nbsp; b) 如果兼任域服务器,一般为50-70%<br />& nbsp; c) 如果还兼任WEB服务器,建议最大为50%<br /> 5、设定完毕点击确定,然后重新启动SQl Server服务使之生效即可。</p>http://www.downcc.com/tech/668.htmlAccess2010/01/10 18:01:14<p>Access数据库被损坏主要分为以下几种情况:1、严重损坏;2、轻度损坏;3、有些表被损坏或有些表的部分记录被损坏。下面就分情况介绍解决办法。</p>< p>1、使用Access97打不开数据库、系统提示&quot;不可识别的数据库格式&quot;或&quot;不是该表的索引&quot;等信息,这样的数据库都是损坏比较严重的。损害严重的数据库一般来说都是无法修复的,只有恢复备份了,好在这种情况比较少见。</p>< p>2、如果数据库损坏的不严重,只需要使用Access 97菜单上的&ldquo;修复数据库&rdquo;和&ldquo;压缩数据库&rdquo;就可以把数据库修复好。因为数据库轻微损坏的时候,一般也不会导致软件出什么问题,所以也不会引起人的注意,只有当数据库的某一个或几个表损坏了的时候,才会使软件变得不稳定,所以这种情况才是我们最常遇到的。</p>< p>3、如何确定数据库中哪几个表有问题呢,我们首先利用Access 97建立一个空数据库,利用系统提供的&ldquo;引入数据库&rdquo;功能,选择目标数据库所有的表进行引入,Access 97当引入到有问题的表时系统会提示一些错误信息,把这个表的名字记下来以备以后修复时使用。</p>< p>接下来利用Access97打开有问题的数据库,准备修复表。修复损坏的表的方法依照表损坏程度不同而不同,下面分情况介绍处理的办法:</p>< p>一、表损坏的非常严重,表现为无法打开表,系统提示&ldquo;Microsoft jet 找不到对象&rdquo;、&ldquo;没有读写权限&rdquo;或&ldquo;不可识别&rdquo;等信息。</p>< p>处理方法:这种表的已经损坏得非常严重了,一般无法修复。如果这个表不很重要或通常情况下表的内容为空的话,例如&ldquo;常用凭证表&rdquo;、&ldquo;科目共享锁定表&rdquo;或&ldquo;凭证共享锁定表&rdquo;,我们可以通过引入的方法把其他数据库的表引入,然后把有问题的表删除即可。</p>< p>二、表中有几行内容非常混乱或字段内标有&ldquo;#已删除&rdquo;字样,但当要删除这些记录时就会出现错误信息不许删除。</p>< p>处理办法:既然不让删除这些记录,我们可以通过使用SQL语句把没有问题的记录复制到一个新的表中,然后把老表删除把新表的名字改过来即可。例如&ldquo;凭证及明细账表GL_ACCVOUCH&rdquo;中有错误记录有无法删除,我们可以使用如下SQL语句把好的记录复制到GL_ACCTEMP中:</p>< p>以下为引用的内容:<br /> SELECT GL_ACCVOUCH.* INTO GL_ACCTEMP< br /> FROM GL_ACCVOUCH WHERE {筛选的条件}< br /> 然后删除表GL_ACCVOUCH,再把表GL_ACCTEMP的<br /> 名字改为GL_ACCVOUCH即可解决问题。&nbsp;</p>< p>注释:修复Access数据库的注意事项,首先,我们在修复数据库前一定要做好备份,以防数据丢失或损坏;有一些数据库中有RELATION(关系)来维护数据的一致性,但当数据库异常后相关表的RELATION也就丢失了,在修复好数据库后一定要把RELATION再联好,有些软件可以自动修复RELATION,比如用友公司的ERP8.XX系列产品的数据库可以通过把表accinformation中的[cSysid]='AA' and [项目号]='99'的记录,把[设置值]和[缺省值]改为'8.0A0',重新进入系统时,系统会自动升级并重建索引。</p>http://www.downcc.com/tech/667.htmlAccess2010/01/10 17:31:07<p>江西电信机房这段时间以来,一直断网,今天刚恢复,一朋友的网站就不正常,出如下提示:</p>< p>ADODB.Recordset& nbsp; 错误& nbsp; '800a0cb3'当前记录集不支持更新。这可能是提供程序的限制,也可能是选定锁定类型的限制。&nbsp;&nbsp;</p>< p>一看这就是ACCESS权限的问题,因为之前好好的,而且现在其它asp页面也很正常,所以就好解决了,如果是自己的服务器,对着数据库或数据库所在的文件夹加入写入权限。如果是虚拟主机,你可以找空间商或去虚拟主机的管理后台,一般都可以设置写入权限的。</p>http://www.downcc.com/tech/621.htmlMySQL2010/01/04 15:12:13<p>无法载入 mcrypt 扩展,&lt;br /&gt;请检查 PHP 配置</p>< p>出现以下几种情况后可能会造成运行phpmyadmin程序提示&ldquo;无法载入 mcrypt 扩展,&lt;br /&gt;请检查 PHP 配置&rdquo;的 错误提示</p>< p>1、没有正确安装Mysql数据库,在系统服务中Mysql相关的服务没有启动&nbsp;&nbsp; (请查看正确安装Mysql的方法)</p>< p>2、在系统的 system32(C:\windows\system32) 目录下缺少 libmcrypt.dll文件,解决方法是找到php目录下的libmcrypt.dll,并将libmcrypt.dll复制到C:\windows\system32目录中,然后重新启动Web服务。</p>< p>3、在C:\windows目录下的php.ini文件中,没有将&ldquo;;extension=php_mcrypt.dll&rdquo;中的前面一个&ldquo;;&rdquo;去掉,所以不能使用相应功能,解决方法是打开php.ini文件<br /> 找到<br /> ;extension=php_mcrypt.dll<br /> 改成<br /> extension=php_mcrypt.dll&nbsp;&nbsp;&nbsp; //去掉前面的;使之生效</p>< p>4、Mysql目录没有读取权限,正确的目录权限如下:<br /> administrator&nbsp;&nbsp; 完全控制<br /> system&nbsp;&nbsp;&nbsp; 完全控制</p>< p>user&nbsp;&nbsp;&nbsp; 读取加运行<br /> 其他的用户权限全部删除(也可保留,但安全性不高,建议删除),然后重启MYsql服务和Web服务(建议修改此项后重启一下服务器)<br /> 当你试过所有办法之后还是不行,其实还有一步,网上很少有说,解决办法,我的是WINXP+IIS+PHP5+MYSQL5</p>< p>棹面&gt;我的电脑&gt;右键属性&gt;高级&gt;环境变量&gt;系统变量&gt;新建</p>< p>名:phprc<br /> 值:d:\php&nbsp; (你的PHP在什么目录就是什么)</p>http://www.downcc.com/tech/620.htmlMySQL2010/01/04 15:05:34<p>这2天安装Mysql 既然提示 MySQL Server 5.1 -- Error 1335.The cabinet file 'product.cab' requi</p>< p>提示信息如下</p>< p>Product: MySQL Server 5.1 -- Error 1335.The cabinet file 'product.cab' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</p>< p>错误。。。 百度了半天。。。愁。。貌似很多人没解决这问题。。最后还是寻求老外的</p>< p>GG了。。找到一张帖子。。。</p>< p>[19 Jun 2007 11:44] [ name withheld ]</p>< pre> Description: Installing any package give me an error 1335: cabinet file 'product.cab' required for this installation is corrupted and cannot be used. this could indicate a network error, an error reading form the CDROM, or a problem with the package I also get this error installing the Tools 5.0 and all the odbc driver. thanks paolol How to repeat: install the packages</pre>< p>[19 Jun 2007 11:54] Sveta Smirnova</p>< pre> Thank you for the report. We have not problem with installation on Windows Vista in our environment. Please indicate accurate version of each package you are trying to install.</pre>< p>[19 Jun 2007 12:51] [ name withheld ]</p>< pre> I have Vista Italian version 64 Ultimate edition ( just got the new pc ), all service pack applied. I finally was able to install 5.0 GA , but I'm still not able to install the ODBC driver 3.5 and 5.0 (3.5 install fine but I don't see the driver loaded when I tri to create the odbc connection from the control panel, 5.0 give the error and don't install )and the tools 5.0 . Thanks Paolol</pre>< p>[19 Jun 2007 13:52] Miguel Solorzano</p>< pre> Thank you for the bug report. I was not able to repeat this issue on Windows Vista Ultimate X64.</pre>< p>[19 Jun 2007 14:27] [ name withheld ]</p>< pre> I will try with a clean install :( Thanks Paolol</pre>< div>&nbsp;</div>< div>< div>[19 Jun 2007 15:25] Stein Wasb&oslash;</div>< pre> I got exactly the same error msg when trying to install under XP (32bit). Tried both v. 5.0, v.6.0 and the Win tools. Same error every time. I had downloaded from the Norwegian mirror site. Then I downloaded the 6.0 version from a UK site, and the installation went OK. Seems to be some kind of error in the install files on some morror sites....</pre>< /div>< div>< div>[19 Jun 2007 16:42] [ name withheld ]</div>< pre> Yes Stein is right, most mirrors have files that don't install correctly, also those files have wrond MD5 signature, so now I'm up and running except for the ODBC wich I need badly. When I install ( the one I found who have the correct MD5 ) all seem OK no error but when I go to the ODBC Manager I can see only the MSSQL driver installed ! Any suggestion, thanks a lot. Paolo</pre>< /div>< div>< div>[19 Jun 2007 18:22] Bogdan Degtyariov</div>< pre> 64-bit windows runs 64-bit ODBC Admin by default. In order to add or edit a 32-bit Data Source Name you have to run 32-bit ODBC Administrator odbcad32.exe from WINDOWS\SYSWOW64 directory that contains 32-bit DDLs.</pre>< /div>< div>< div>[20 Jun 2007 10:07] [ name withheld ]</div>< pre> Thanks a Lot. All working fine ;) Paolol</pre>< /div>< div>< div>[26 Jun 2007 20:55] Louis Breda van</div>< pre> Hello, I have exactly the same problem when trying to install: - 5119 server and also - odbc3.51.16 Tried this on a windowsXP 32 bit machine Please have it fixed soon!! Sincerely, Louis van Breda</pre>< /div>< div>< div>[2 Jul 2007 19:30] Throstur Lastname</div>< pre> Solution: Download from Denmark :D For some servers the md5 for mysql-essential-5.0.41-win32.msi is: cb320c2c96168efeeddb181f58a6b6e9 but supposed to be 2f93e1bdd43d21e529257d803bd92eae I am sure that this issue is only corrupted MSI files on some mirrors. Heanet in Ireland has a corrupted version if I remember correctly.</pre>< /div>< div>< div>[3 Jul 2007 14:08] dmitry nesterenko</div>< pre> i downloaded two installation archives: 1. mysql-essential-5.0.41-win32.msi 2. mysql-noinstall-5.0.41-win32.zip The first of them (the *.msi one) has exactly the same problem with message about product.cab file. The second (*.zip noinstall) report a problem in archiveduring it testing. Although, during extracting files from zip archive i received two error messages: - error unpacking mysqlcheck.exe - error unpacking mysql-debug.pdb My platform is win 2003 sp2 and win xp sp2</pre>< /div>< div>< div>[5 Jul 2007 21:49] Ashutosh Gawande</div>< pre> Hi all, it seems that the following mirror is having bad file United Kingdom [The UK Mirror Service / Canterbury, Kent] HTTP FTP please use other UK server. Thanks and Regards, Ashutosh</pre>< /div>< div>< div>[6 Jul 2007 14:23] Louis Breda van</div>< pre> Hello, I noticed that some people are referring to a& quot;corrupt file / mirror&quot;. This is nonsence. I noticed the problem on mysql5119 and odbc316. I think the problem does affect other mysql files as wel. So, it can not be related to a corrupt file. Sincerely, Louis</pre>< /div>< div>< div>[6 Jul 2007 14:23] Louis Breda van</div>< pre> Hello, I noticed that some people are referring to a& quot;corrupt file / mirror&quot;. This is nonsence. I noticed the problem on mysql5119 and odbc316. I think the problem does affect other mysql files as wel. So, it can not be related to a corrupt file. Sincerely, Louis</pre>< /div>< div>< div>[14 Jan 2008 15:12] Usama El-Mokadem</div>< pre> MySQL Tools: mysql-gui-tools-5.0-r12-win32.msi, Error 1335 'product.cab', Win32 XP-SP2<br /><br />Attachment:< a href="http://bugs.mysql.com/file.php?id=8329">mysqlTools5err1335.jpg</a> (image/pjpeg,< a href="http://bugs.mysql.com/file.php?id=8329&amp;text=1">text</a>), 36.43 KiB.</pre>< /div>< div>< div>[27 Mar 2008 16:17] Denver Coneybeare</div>< pre> I had the same problem with the& quot;corrupt product.cab&quot; message displaying during installation. I'm using WinXP SP2 and attempting to install MySQL GUI Tools 5.0-r12. As suggested in a previous comment, downloading the MSI installer from the Denmark mirror instead of my default Canada mirror fixed the problem and the installation completed successfully.</pre>< /div>< div>< div>[21 Jun 2008 1:19] Hontvari Jozsef</div>< pre> The Hungarian mirror is also wrong. Danish mirror contains a valid file.</pre>< /div>< div>< div>[16 Sep 2008 23:21] Charles Sherman</div>< pre> Same issue: Running XP Pro SP2 and I tried a couple of the Canadian missors and received the error. Downloaded from the Denmark mirror and the isntallation worked.</pre> [11 Jun 12:40] TR Balaji< pre> Why do we have so many mirrors having wrong version? It is better to have a right version even though old one.</pre>< pre> 我就不翻译了。。。直接的说是安装包的问题。。</pre>< pre> 到Mysql 官方去下载吧。。重新下载个安装包问题解决。。。</pre>< pre> 顺便丢个下载地址</pre>< pre><a href="http://downloads.mysql.com/archives.php?p=mysql-5.1&amp;o=-win">http://downloads.mysql.com/archives.php?p=mysql-5.1&amp;o=-win</a></pre>< pre> 32位安装包</pre>< pre><a href="http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.39-win32.msi">Microsoft Windows 32. (Windows Installer format) (4 Sep 2009, 104.2M)</a><br /><a href="http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.39-win32.msi.asc">Signature</a> MD5: 5ba3fdb516276c382ed83c34029be88c</pre>< pre> 64位安装包</pre>< pre><a s_o s_oidt="0" href="http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.39-winx64.msi">Microsoft Windows (Windows Installer format) (4 Sep 2009, 94.1M)</a><br /><a href="http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.39-winx64.msi.asc">Signature</a> MD5: f77a99fbfd0ae7e0c03e18cc7d6f9a3d</pre>< pre> 大家注意核对下。。MD5。。</pre> 去官方下吧~~</div>http://www.downcc.com/tech/588.htmlAccess2009/12/16 23:01:29<p>用ACCESS数据库开发的网站,当随着网站数据量的不断增长.数据库的容量也是不断加大.这让ASP程序速度直线下降.如果才能让ACCESS数据库容量尽可能小.我们要对它进行压缩处理.</p>< p>下面是我整理后的源代码,复制另存为compact.asp并上传到数据库所在目录即可正常使用。</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted">< tbody>< tr>< td bgcolor="#fdfddf" style="word-wrap: break-word">< p><font color="#ff0000">以下为引用的内容:</font></p>< p>&lt;html&gt;<br />& lt;head&gt;<br />& lt;title&gt;ACCESS数据库压缩程序-网页制作教程&lt;/title&gt;<br />& lt;/head&gt;<br />& lt;body bgcolor=&quot;e0f8ef&quot;&gt;<br />& lt;div&gt;<br />& lt;div align=&quot;center&quot;&gt;&lt;font color=&quot;#3300FF&quot;&gt;<br />& lt;b&gt;&lt;font size=&quot;5&quot;&gt;通用ACCESS数据库在线压缩程序&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;<br />& lt;/div&gt;<br />& lt;div&gt;<br />& lt;br&gt;</p>< /td>< /tr>< /tbody>< /table>< /p>< p>本程序其实是通过FSO权限和JET引擎连接,</p>< p>因此在使用之前请确认你的服务器支持FSO</p>< p>(filesystemobject)权限并安装的ACCESS最新驱动!</p>< p>从安全出发,请在压缩之前备份原始数据库!</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted">< tbody>< tr>< td bgcolor="#fdfddf" style="word-wrap: break-word">< p><font color="#ff0000">以下为引用的内容:</font></p>< p>&lt;/div&gt;&lt;br&gt;<br />& lt;div align=&quot;center&quot;&gt;运行环境:在WIN98SE+PWS、WIN2000+IIS5.0& lt;br&gt;<br />& lt;%<br /> Const JET_3X = 4<br /> Function CompactDB(dbPath, boolIs97)<br /> Dim fso, Engine, strDBPath<br /> strDBPath = left(dbPath,instrrev(DBPath,&quot;&quot;))<br /> Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)<br /> If fso.FileExists(dbPath) Then<br /> Set Engine = CreateObject(&quot;JRO.JetEngine&quot;)<br /> If boolIs97 =& quot;True&quot; Then<br /> Engine.CompactDatabase& quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;& amp; dbpath, _<br />& quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;& amp; strDBPath& amp;& quot;temp.mdb;&quot; _<br />& amp;& quot;Jet OLEDB:Engine Type=&quot;& amp; JET_3X<br /> Else<br /> Engine.CompactDatabase& quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;& amp; dbpath, _<br />& quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;& amp; strDBPath& amp;& quot;temp.mdb&quot;<br /> End If<br /> fso.CopyFile strDBPath& amp;& quot;temp.mdb&quot;,dbpath<br /> fso.DeleteFile(strDBPath& amp;& quot;temp.mdb&quot;)<br /> Set fso = nothing<br /> Set Engine = nothing<br /> CompactDB =& quot;你的数据库,& quot;& amp; dbpath& amp;& quot;, 已经被压缩&quot;& amp; vbCrLf<br /> Else<br /> CompactDB =& quot;你输入的数据库路径或名称未找到,请重试&quot;& amp; vbCrLf<br /> End If<br /> End Function<br /> %&gt;<br />& lt;/div&gt;<br />& lt;/div&gt;<br />& lt;form name=&quot;compact&quot; method=&quot;post&quot; action=&quot;compact.asp&quot;&gt;<br />& lt;div align=&quot;center&quot;&gt;<br />& lt;font size=&quot;2&quot;&gt;&lt;b&gt;&lt;font color=&quot;#FF0000&quot;&gt;<br /> 压缩选项,请仔细填写!&lt;/font&gt;&lt;/b&gt;&lt;br&gt;<br />& lt;br&gt;</p>< /td>< /tr>< /tbody>< /table>< /p>< p>输入数据库全称:</p>< p>< table cellspacing="0" cellpadding="6" width="95%" align="center" border="0" style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted;border-bottom: #cccccc 1px dotted">< tbody>< tr>< td bgcolor="#fdfddf" style="word-wrap: break-word">< p><font color="#ff0000">以下为引用的内容:</font></p>< p>&lt;input type=&quot;text&quot; name=&quot;dbpath&quot;&gt;<br /> (包括扩展名,如MDB、ASA、ASP等)&lt;br&gt;<br />& lt;br&gt;<br />& lt;input type=&quot;checkbox&quot; name=&quot;boolIs97&quot; value=&quot;True&quot;&gt;<br /> 检查是否为ACCESS97数据库&lt;br&gt;<br /> (默认为ACCESS2000的数据库)&lt;br&gt;<br />& lt;br&gt;<br />& lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;确认压缩&quot;&gt;<br />& lt;/font&gt;&lt;/div&gt;<br />& lt;/form&gt;<br />& lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;2&quot;&gt;<br />& lt;%<br /> Dim dbpath,boolIs97<br /> dbpath = request(&quot;dbpath&quot;)<br /> boolIs97 = request(&quot;boolIs97&quot;)<br /> If dbparesponse.write(CompactDB(dbpath,boolIs97))<br /> End If<br /> %&gt;<br />& lt;br&gt;<br />& lt;/font&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;th& lt;&gt;& quot;&quot; Then<br /> dbpath = server.mappath(dbpath)</p>< /td>< /tr>< /tbody>< /table>< /p>< p>注意:由于本例实用的是FSO操作ACCESS文件,所以要使用本例请确保你的服务器支持FSO支持.</p>http://www.downcc.com/tech/587.htmlAccess2009/12/16 22:57:31<p>本文介绍利用Access的安全特性及良好习惯防治Access宏病毒的技巧。</p>< p>防病毒通用技巧</p>< p>保持防病毒软件随时更新非常重要。新病毒每天出现,防病毒厂商也通过网络、BBS等载体不断推出最新的病毒资料库和软件,所以一个重视安全的用户,应当保证一个合适的频率不断更新自己的防病毒软件,不与不可靠的人或系统共享数据库,不从网络上下载或使用来历不明的Access数据库,是有效防治Access病毒的方法。</p>< p>微软未来的解决方案</p>< p>熟悉Word 97、office/9.shtml' target='_blank' class='article'&gt;Excel 97的用户都知道,在打开一个含有宏的文档或工作簿时,Word和Excel都会提示:&ldquo;该文件中包含宏,是否运行宏&rdquo;。这是因为在95版的软件中开始大量出现宏病毒,所以在97版中增加了这一报警功能。Access病毒以前一直没有出现过,Access 97中就没有提供这一功能,微软将在新版Access中提供这一功能。</p>< p>使用Access安全特性预防病毒</p>< p>数据库安全有两个选项:数据库密码保护、用户级安全性。</p>< p>1.数据库密码保护</p>< p>可给数据库加上密码,步骤如下:</p>< p>(1)以独占方式打开数据库。</p>< p>(2)在&ldquo;工具&rdquo;选单中选择&ldquo;安全&rdquo;,然后选择&ldquo;设置数据库密码&rdquo;。</p>< p>(3)输入并校验密码。</p>< p>此后,要打开数据库,必须输入正确的密码。而病毒要想感染一个加了密码保护的数据库,Access的安全特性就会提示用户输入密码,警觉的用户此时就会察觉这是异常操作,在口令输入对话框中选择&ldquo;取消&rdquo;就不会打开数据库,从而防止了病毒感染。</p>< p>2.用户级安全性</p>< p>使用用户级安全性可给不同组的用户赋予不同的权限。操作方法如下:</p>< p>(1)使用&ldquo;工作组管理员&rdquo;程序创建并连接一个工作组文件。该程序一般位于\Program Files\Microsoft Office目录中,快捷方式名为&ldquo;MS Access Workgroup Administrator&rdquo;。</p>< p>(2)新建一个用户,把该用户加到管理员组中。</p>< p>(3)从管理员组中移去管理员账号。</p>< p>(4)给新建的管理员组中的用户分配密码,强制他登录时必须使用密码。</p>< p>(5)重启Access,以这个新管理员用户身份登录。</p>< p>(6)运行&ldquo;用户级安全性向导&rdquo;,新建一个数据库,并把所有的对象都拷贝到新数据库中。</p>< p>现在,你就拥有了一个具有安全防护的数据库。可以通过安全对话框向其中增加用户和组,分配适当的权限。此后,如果从网络上下载了可能含毒的数据库,可以使用默认工作组文件打开这个数据库,即使真的有毒,含毒数据库中的病毒也没有足够的权限感染加了安全防护的数据库。</p>http://www.downcc.com/tech/484.htmlSQL Server2009/11/20 17:07:19<p>1.<br /> 安装sql的时候,如果出现以前有挂起的文件。或者安装后期出配置服务器失败。那么可以通过如下方法解决。</p>< p>一.找到下面的注册表项目删除之(注意。一定要先对注册表进行一个备份)<br /> HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ExceptionComponents<br /> HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 2000<br /> HLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations</p>< p>//可以用下面命令在cmd或者建立bat文件进行删除<br /> delsqlinfo.bat<br /> reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ExceptionComponents<br /> reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 2000<br /> reg delete HLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations</p>< p>2.删除c:\program files\microsoft sql server 2000 整个目录</p>< p>3.重新启动电脑。</p>< p>4.在次安装就可以成功拉。 该方法已经经过n次实践拉。<br /> 二、 1。将Program files下的SQL安装目录删除(此处如果有重要的数据,请先备份)<br /> C:\Program Files\Microsoft SQL Server\80\Tools。< br /> C:\Program Files\Microsoft SQL Server\MSSQL。<br /> 2。注册表中的相关信息删除:<br /> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer。< br /> HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSDTC。< br /> 3。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目<br /> 4。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\setup<br /> 删除ExceptionComponents<br />& nbsp;&nbsp;&nbsp; 这个项目下的内容可能很多,只有在上面几个办法不行的情况下,使用此方法(注意不要全部删除)<br /> 删除内容前先看下内容说明<br /> 5。Windows&nbsp;&nbsp;&nbsp; 目录中的&nbsp;&nbsp;&nbsp; Sqlstp.log&nbsp;&nbsp;&nbsp; 文件,该文件列出了安装程序所执行的操作的详细信息,并包含安装期间遇到的所有错误。通过检查该文件,可以详细了解安装在什么地方失败、为什么失败。&nbsp;</p>< p>6。SQL安装的时的错误信息保存在一个叫Errorlog的日志文件中,默认情况下该文件位于&nbsp;&nbsp;&nbsp; Program&nbsp;&nbsp;&nbsp; Files\Microsoft&nbsp;&nbsp;&nbsp; SQL&nbsp;&nbsp;&nbsp; Server\Mssql\Log&nbsp;&nbsp;&nbsp; 目录中。该错误日志包含安装程序试图启动&nbsp;&nbsp;&nbsp; SQL&nbsp;&nbsp;&nbsp; Server&nbsp;&nbsp;&nbsp; 时&nbsp;&nbsp;&nbsp; SQL&nbsp;&nbsp;&nbsp; Server&nbsp;&nbsp;&nbsp; 所遇到的错误,这些信息可以帮助您深入检查错误原因。</p>< p>7。需要检查的另一个组件是&nbsp;&nbsp;&nbsp; Microsoft&nbsp;&nbsp;&nbsp; 数据访问组件&nbsp;&nbsp;&nbsp; (MDAC)&nbsp;&nbsp;&nbsp; 安装程序,它作为&nbsp;&nbsp;&nbsp; SQL&nbsp;&nbsp;&nbsp; Server&nbsp;&nbsp;&nbsp; 2000&nbsp;&nbsp;&nbsp; 安装程序的一部分启动。SQL Server 2000 安装程序会安装 MDAC 2.6。 MDAC 安装程序会创建名为 Dasetup.log&nbsp;&nbsp;&nbsp; 的单独的日志文件;您可以查看此日志文件并确保&nbsp;&nbsp;&nbsp; MDAC&nbsp;&nbsp;&nbsp; 安装程序没有出现问题</p>< p>2.==================================================</p>< p><br /> .Windows XP安装sql2000企业版的办法 SQL2000企业版本适用于WIN 2000&amp;NT&amp;2003系统,XP一般装不了需要选用个人版,这里介绍一个XP下安装装SQL2000企业版本方法以供参考~</p>< p>办法如下:</p>< p>一.在SQL服务器的安装盘中找到MSDE这个目录,并且点击setup.exe安装它,过程简单直接下一步就OK了。</p>< p>二. 重启系统WINDOWSXP,这下就可以看到SQL服务的图标出现了。</p>< p>三. 再拿出SQL服务器版的安装光盘,直接安装客户端工具(这个不要多说吧?最简单的方法就是直接点击光盘根目录下的autorun.exe)</p>< p>根据提示安装,自检过程中知道系统不是SERVER版,会提示只安装客户端工具。(哈哈,服务端我已有了)</p>< p>四. 打开企业管理器,试用SA用户连一下看看,是不是发现SA用户登陆失败?因为你还没有与信任SQL SERVER连接相关联。还好这个只要对系统注册表稍加修改就可以啦:</p>< p>在运行中输入regedit打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\MSSQLSERVER\\MSSQLSERVER],这个项里面</p>< p>有一个键值LoginMode,默认下,值是1,现在将值改为2,重启电脑。</p>< p>五. 再打开企业管理,再连接试试,OK!</p>< p>==================================================</p>< p>另:由于我是4in1的版本,所以又找了下其他的东西,供自己参考<br /> 要是下载的是四合一的安装文件,也就是说里面一共有个人版,企业版、标准版和开发版四个版本的安装文件。<br /> 第一次安装的话,就按以下步骤:</p>< p>&nbsp;&nbsp; 步骤1:在SQL服务器安装盘中找到ENTERPRISE目录下MSDE这个子目录,并且点击setup.exe安装它,过程简单直接下一步就OK了。<br />& nbsp;&nbsp; 步骤2:重新启动电脑,本来可以不启动的,但是我们可以启动之后验证一下服务器端是否已经安装好。如果启动之后SQL服务的图标出现了,那么恭喜你,企业版的服务器端我们已经装好老。。如果没有,那就重复步骤1吧!</p>< p>&nbsp;&nbsp; 步骤3:运行安装盘中的AUTORUN.exe,选择企业版,然后一直点下一步就好了,根据提示安装,自检过程中知道系统不是SERVER版,会提示只安装客户端工具。不用管他,我们的服务器端反正都安装好了,呵呵~继续下一步吧。<br />& nbsp;&nbsp; 在这个过程中,还会有一个错误提示:(以前某个程序安装已经在安装计算机上创建挂起的文件操作。运行安装程序前要重启计算机。)也就是我在上文提到过的问题,我们点确定,然后在开始菜单里打开&ldquo;运行&rdquo;=>regedit=>打开注册表编辑器,在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目。我们再回到安装界面,再点下一步,呵呵,顺畅了~</p>< p>&nbsp;&nbsp; 步骤4:安装完成之后,我们打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER这个项,把LoginMode的值改为2。<br />& nbsp;&nbsp; 这里要注意哦,不要找错了地方,因为我开始就看错了,找了好久都没找到LoginMode这个项,我开始找的是HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MicrosoftSQL Server。呵呵,自己粗心啊~</p>< p>&nbsp;&nbsp; 步骤5:安装完成发现菜单里少了服务管理器,建立如下程序的快捷方式即可<br />& nbsp;&nbsp;&nbsp;&nbsp; C:\Program Files\Microsoft SQLServer\80\Tools\Binn\sqlmangr.exe</p>< p>&nbsp;&nbsp; 步骤6:打开企业管理器,展开(local)实例,如果不能连接,删掉它,新建一个(local)连接时的帐户SA密码为空。<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 连接成功后最好修改一下密码,展开SQLServer的实例,安全性--&gt;登录--&gt;右击SA--&gt;属性--&gt;密码<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可能会遇到的问题:<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.安装完成后少数据库pubs等,这只是SAMPLE程序用到的数据库,可以从别从机器上导入。<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.有服务里确认MSSQLSERVER和SQLSERVERAGENT服务开启。<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.其实这样安装上去的并不是真正的企业版,只是利用企业版的SQLServer2000在XP下安装上SQL Server2000 。</p>< p>想必大家都有过在windows xp下安装SQL SERVER 2000数据库失败的时候。因为sql server2000只默认安装在服务器版本上,所以一般家用版本是无法安装sql server2000的。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果大家上网查找有关下安装sql server2000的有关帮助,大多数都是要从光盘下的MSDE目录中点击setup.exe安装sql server2000,再从光盘autorun.exe文件重新安装服务器版本。但是在番茄花园 windows xp sp2版本(其实我并不喜欢番茄花园的XP版本,只不过是不想重新再设置安装新补丁,喜欢她的皮肤而已,懒人啊~ :)另外,XP还有个问题就是如2000或2003方便,有的时候太麻烦了。)上相关的办法根本不顶用,估计很多人也会遇到这样的情况。点击autorun.exe,没有提示&ldquo;无法安装服务器端,只能安装客户端&rdquo;,而是像2000或2003一样一路装下去,但是到了选择安装数据库类型的时候,出现的是&ldquo;以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机&rdquo;错误,无法继续安装。怎么办,难道不装了,非要换版本?</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我这个人就喜欢找,无论你是什么样的东西,只要是我想要的,就是你搜索引擎中收录了一百个网站,我也要逐个去看,直到找到为止。黄天不负有心人,这个问题的办法我找到解决的方式了。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开注册表编辑器,在</p>< p>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations<br /> 项目,并删除它。这样就可以清除安装暂挂项目。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp; 赶快打开你的sql server2000安装盘吧,一路直行,激动人心的场面出现了,sql server2000安装成功http://www.downcc.com/tech/417.htmlSQL Server2009/11/07 15:57:18<p>SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:</p>< p>  1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)<br />   2、I/O吞吐量小,形成了瓶颈效应。<br />   3、没有创建计算列导致查询不优化。<br />   4、内存不足<br />   5、网络速度慢</p>< p>SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:<br />   1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)<br />   2、I/O吞吐量小,形成了瓶颈效应。<br />   3、没有创建计算列导致查询不优化。<br />   4、内存不足<br />   5、网络速度慢<br />   6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)<br />   7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)<br />   8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。<br />   9、返回了不必要的行和列<br />   10、查询语句不好,没有优化<br />   可以通过以下方法来优化查询 :<br />   1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要。<br />   2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)<br />   3、升级硬件<br />   4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段。<br />   5、提高网速。<br />   6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。<br />   配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server? 2000时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的1.5倍。如果另外安装了全文检索功能,并打算运行Microsoft搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的3倍。将SQL Server max server memory服务器配置选项配置为物理内存的1.5倍(虚拟内存大小设置的一半)。<br />   7、增加服务器CPU个数;但是必须 明白并行处理串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成多个任务,就可以在处理器上运行。例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。<br />   8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。 like ''a%'' 使用索引 like ''%a'' 不使用索引用 like ''%a%'' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。<br />   9、DB Server 和APPLication Server 分离;OLTP和OLAP分离<br />   10、分布式分区视图可用于实现数据库服务器联合体。<br />   联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层 Web 站点的处理需要。有关更多信息,参见设计联合数据库服务器。(参照SQL帮助文件''分区视图'')<br />   a、在实现分区视图之前,必须先水平分区表<br />   b、在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。<br />   11、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收缩数据和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。<br />   在T-sql的写法上有很大的讲究,下面列出常见的要点:首先,DBMS处理查询计划的过程是这样的:<br />   1、 查询语句的词法、语法检查<br />   2、 将语句提交给DBMS的查询优化器<br />   3、 优化器做代数优化和存取路径的优化<br />   4、 由预编译模块生成查询规划<br />   5、 然后在合适的时间提交给系统处理执行<br />   6、 最后将执行结果返回给用户。< br />& nbsp;<br /> 其次,看一下SQL SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。<br />   12、 Commit和rollback的区别 Rollback:回滚所有的事物。 Commit:提交当前的事物. 没有必要在动态SQL里写事物,如果要写请写在外面如: begin tran exec(@s) commit trans 或者将动态SQL 写成函数或者存储过程。<br />   13、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。<br />   14、SQL的注释申明对执行没有任何影响<br />   15、尽可能不使用光标,它占用大量的资源。如果需要row-by-row地执行,尽量采用非光标技术,如:在客户端循环,用临时表,Table变量,用子查询,用Case语句等等。<br />   游标可以按照它所支持的提取选项进行分类:只进必须按照从第一行到最后一行的顺序提取行。FETCH NEXT 是唯一允许的提取操作,也是默认方式。可滚动性可以在游标中任何地方随机提取任意行。游标的技术在SQL2000下变得功能很强大,他的目的是支持循环。<br />   有四个并发选项 READ_ONLY:不允许通过游标定位更新(Update),且在组成结果集的行中没有锁。<br />   OPTIMISTIC WITH valueS:乐观并发控制是事务控制理论的一个标准部分。乐观并发控制用于这样的情形,即在打开游标及更新行的间隔中,只有很小的机会让第二个用户更新某一行。当某个游标以此选项打开时,没有锁控制其中的行,这将有助于最大化其处理能力。如果用户试图修改某一行,则此行的当前值会与最后一次提取此行时获取的值进行比较。如果任何值发生改变,则服务器就会知道其他人已更新了此行,并会返回一个错误。如果值是一样的,服务器就执行修改。<br />   选择这个并发选项OPTIMISTIC WITH ROW VERSIONING:此乐观并发控制选项基于行版本控制。使用行版本控制,其中的表必须具有某种版本标识符,服务器可用它来确定该行在读入游标后是否有所更改。在SQL Server中,这个性能由timestamp数据类型提供,它是一个二进制数字,表示数据库中更改的相对顺序。<br />   每个数据库都有一个全局当前时间戳值:@@DBTS。每次以任何方式更改带有 timestamp 列的行时,SQL Server 先在时间戳列中存储当前的 @@DBTS 值,然后增加 @@DBTS 的值。如果某 个表具有 timestamp 列,则时间戳会被记到行级。服务器就可以比较某行的当前时间戳值和上次提取时所存储的时间戳值,从而确定该行是否已更新。服务器不必比较所有列的值,只需比较 timestamp 列即可。如果应用程序对没有 timestamp 列的表要求基于行版本控制的乐观并发,则游标默认为基于数值的乐观并发控制。 SCROLL LOCKS 这个选项实现悲观并发控制。在悲观并发控制中,在把数据库的行读入游标结果集时,应用程序将试图锁定数据库行。在使用服务器游标时,将行读入游标时会在其上放置一个更新锁。如果在事务内打开游标,则该事务更新锁将一直保持到事务被提交或回滚;当提取下一行时,将除去游标锁。如果在事务外打开游标,则提取下一行时,锁就被丢弃。<br />   因此,每当用户需要完全的悲观并发控制时,游标都应在事务内打开。更新锁将阻止任何其它任务获取更新锁或排它锁,从而阻止其它任务更新该行。然而,更新锁并不阻止共享锁,所以它不会阻止其它任务读取行,除非第二个任务也在要求带更新锁的读取。滚动锁根据在游标定义的 SELECT 语句中指定的锁提示,这些游标并发选项可以生成滚动锁。滚动锁在提取时在每行上获取,并保持到下次提取或者游标关闭,以先发生者为准。下次提取时,服务器为新提取中的行获取滚动锁,并释放上次提取中行的滚动锁。滚动锁独立于事务锁,并可以保持到一个提交或回滚操作之后。如果提交时关闭游标的选项为关,则 COMMIT语句并不关闭任何打开的游标,而且滚动锁被保留到提交之后,以维护对所提取数据的隔离。所获取滚动锁的类型取决于游标并发选项和游标 SELECT语句中的锁提示。锁提示 只读乐观数值<br />   指定 NOLOCK 提示将使指定了该提示的表在游标内是只读的。<br />   16、用Profiler来跟踪查询,得到查询所需的时间,找出SQL的问题所在;用索引优化器优化索引<br />   17、注意UNion和UNion all 的区别。UNION all好<br />   18、注意使用DISTINCT,在没有必要时不要用,它同UNION一样会使查询变慢。重复的记录在查询里是没有问题的<br />   19、查询时不要返回不需要的行、列<br />   20、 用sp_configure ''query governor cost limit''或者SET QUERY_GOVERNOR_COST_LIMIT来限制查询消耗的资源。当评估查询消耗的资源超出限制时,服务器自动取消查询,在查询之前就扼杀掉。 SET LOCKTIME设置锁的时间<br />   21、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行<br />   22、 在SQL2000以前,一般不要用如下的字句:& quot;IS NULL&quot;,& quot;&lt;&gt;&quot;,& quot;!=&quot;,& quot;!&gt;&quot;,& quot;!&lt;&quot;,& quot;NOT&quot;,& quot;NOT EXISTS&quot;,& quot;NOT IN&quot;,& quot;NOT LIKE&quot;, and& quot;LIKE ''%50http://www.downcc.com/tech/263.htmlMySQL2009/08/19 10:34:59<p>方法一</p>< p>1. 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的;</p>< p>2. 重命名自己的mysql的data目录下的mysql文件夹为oldmysql;</p>< p>3. 将源码包中data目录下的mysql目录复制到你的mysql的data目录下;</p>< p>4. 重新启动mysql,现在mysql的授权关系同全新安装的一样,空密码登陆,然后自行调整授权;</p>< p>5. 打开oldmysql这个库检查到底出现了什么问题 ;</p>< p>6. 如果有备份对系统中原有的数据库进行完整性检测,以免被人修改。</p>< p>方法二</p>< p>1. 向mysqld server发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。</p>< p>kill `cat /mysql-data-directory/hostname.pid`</p>< p>你必须是Linux的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作;</p>< p>killall -TERM mysqld</p>< p>2. 使用`--skip-grant-tables&rsquo; 参数来启动 mysqld;</p>< p>shell&gt;mysqld_safe --skip-grant-tables& amp;</p>< p>/ bin/safe_mysqld --skip-grant-tables& amp;</p>< p><br /> 3. 使用`mysql -h hostname mysql&rsquo;命令登录到mysqld server ,用grant命令改变口令。你也可以这样做:</p>< p>`mysqladmin -h hostname -u user password& rsquo;new password&rsquo;&rsquo;</p>< p>其实也可以用</p>< p>use mysql; update user set password =password(&rsquo;yourpass&rsquo;) where user=&rsquo;root&rsquo;</p>< p>来做到;</p>< p>shell&gt;mysqladmin -u root flush-privileges password& quot;newpassword&quot;</p>< p>&gt;use mysql</p>< p>&gt;update user set password=password(&quot;new_pass&quot;) where user=&quot;root&quot;;</p>< p>&gt;flush privileges;</p>< p>4. 载入权限表:</p>< p>mysqladmin -h hostname flush-privileges&rsquo;</p>< p>或者使用SQL命令</p>< p>`FLUSH PRIVILEGES&rsquo;</p>< p>当然,在这里,你也可以重启mysqld。</p>http://www.downcc.com/tech/254.htmlMySQL2009/08/11 19:54:05<p>本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22。</p>< p>目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。</p>< p>1、mysqldump</p>< p>1.1 备份</p>< p>mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数:</p>< p>--compatible=name 它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。</p>< p>--complete-insert,-c 导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。</p>< p>--default-character-set=charset 指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。</p>< p>--disable-keys 告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。</p>< p>--extended-insert = true false 默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。</p>< p>--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。</p>< p>--lock-all-tables,-x 在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。</p>< p>--lock-tables 它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。</p>< p>--no-create-info,-t 只导出数据,而不添加 CREATE TABLE 语句。</p>< p>--no-data,-d 不导出任何数据,只导出数据库表结构。</p>< p>--opt 这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。</p>< p>--quick,-q 该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。</p>< p>--routines,-R 导出存储过程以及自定义函数。</p>< p>--single-transaction 该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。</p>< p>--triggers 同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。</p>< p>其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:</p>< p>/usr/local/mysql/bin/mysqldump -uyejr -pyejr</p>< p>--default-character-set=utf8 --opt --extended</p>< p>-insert=false \--triggers -R --hex-blob -x db_name</p>< p>》 db_name.sql</p>< p>使用以下 SQL 来备份 Innodb 表:</p>< p>/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default</p>< p>-character-set=utf8 --opt --extended-insert=</p>< p>false \--triggers -R --hex-blob --single-transaction db_name</p>< p>》 db_name.sql</p>< p>1.2 还原</p>< p>用 mysqldump备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。</p>< p>直接用 mysql 客户端 例如:</p>< p>/usr/local/mysql/bin/mysql -uyejr -pyejr db_name 《 db_name.sql</p>< p>用 SOURCE 语法 其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如: SOURCE /tmp/db_name.sql;</p>< p>这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。</p>< p>2、 mysqlhotcopy</p>< p>2.1 备份</p>< p>mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。</p>< p>mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:</p>< p>root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name /tmp</p>< p>(把数据库目录 db_name 拷贝到 /tmp 下)</p>< p>root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name_1 。..</p>< p>db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy -h</p>< p>=localhost -u=yejr -p=yejr db_name./regex/ /tmp</p>< p>更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy 的帮助:</p>< p>perldoc /usr/local/mysql/bin/mysqlhotcopy</p>< p>注意,想要使用 mysqlhotcopy,</p>< p>必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。</p>< p>2.2 还原</p>< p>mysqlhotcopy备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:</p>< p>root#cp -rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody /usr/local/mysql/data/</p>< p>(将 db_name 目录的属主改成 mysqld 运行用户)</p>< p>3、 SQL 语法备份</p>< p>3.1 备份</p>< p>BACKUP TABLE 语法其实和 mysqlhotcopy 的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。例子:</p>< p>BACK TABLE tbl_name TO& lsquo;/tmp/db_name/&rsquo;;</p>< p>注意,必须要有 FILE 权限才能执行本SQL,并且目录 /tmp/db_name/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。</p>< p>SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。</p>< p>例子:</p>< p>SELECT INTO OUTFILE& lsquo;/tmp/db_name/tbl_name.txt&rsquo; FROM tbl_name;</p>< p>注意,必须要有 FILE 权限才能执行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。</p>< p>3.2 恢复</p>< p>用 BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。例子: RESTORE TABLE FROM& lsquo;/tmp/db_name/&rsquo;;权限要求类似上面所述。</p>< p>用 SELECT INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。例子:</p>< p>LOAD DATA INFILE& lsquo;/tmp/db_name/tbl_name.txt&rsquo; INTO TABLE tbl_name;</p>< p>权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。如果担心数据会发生重复,可以增加 REPLACE 关键字来替换已有记录或者用 IGNORE 关键字来忽略他们。</p>< p>补充:</p>< p>shell》 mysqldump --quick db_name   gzip 》 db_name.contents.gz</p>< p>(该例子中创建的文件是压缩格式)。</p>< p>恢复/转移到另一台的命令如下:</p>< p>shell》 gunzip 《 db_name.contents.gz   mysql db_name</p>< p>以上命令,适用于*nix 操作系统的机器</p>< p>4、 启用二进制日志(binlog)</p>< p>采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。</p>< p>启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 my.cnf,加入以下几行:</p>< p>server-id = 1log-bin = binloglog-bin-index = binlog.index</p>< p>然后启动 mysqld 就可以了。运行过程中会产生 binlog.000001 以及 binlog.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件http://www.downcc.com/tech/201.htmlMySQL2009/07/09 15:36:22<p>本篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行。</p>< p>注意!<br /> 虽然这是基于2台服务器的MySQL集群,但也必须有额外的第三台服务器作为管理节点,但这台服务器可以在集群启动完成后关闭。同时需要注意的是并不推荐在集群启动完成后关闭作为管理节点的服务器。尽管理论上可以建立基于只有2台服务器的MySQL集群,但是这样的架构,一旦一台服务器宕机之后集群就无法继续正常工作了,这样也就失去了集群的意义了。出于这个原因,就需要有第三台服务器作为管理节点运行。</p>< p>另外,可能很多朋友都没有3台服务器的实际环境,可以考虑在VMWare或其他虚拟机中进行实验。本文即在在三台虚拟机环境下实现。</p>< p>下面假设这3台服务的情况:</p>< p>Server1: mysql1.vmtest.net 192.168.0.1<br /> Server2: mysql2.vmtest.net 192.168.0.2<br /> Server3: mysql3.vmtest.net 192.168.0.3</p>< p>Servers1 和Server2作为实际配置MySQL集群的服务器。对于作为管理节点的Server3则要求较低,只需对Server3的系统进行很小的调整并且无需安装MySQL,Server3可以使用一台配置较低的计算机并且可以在Server3同时运行其他服务。</p>< p>二、在Server1和Server2上安装MySQL<br /> =================================<br /> 从http://www.mysql.com上下载mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz<br /> 注意:必须是max版本的MySQL,Standard版本不支持集群部署!</p>< p>以下步骤需要在Server1和Server2上各做一次<br /> # mv mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz /usr/local/<br /> # cd /usr/local/<br /> # groupadd mysql<br /> # useradd -g mysql mysql<br /> # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz<br /> # rm -f mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz<br /> # mv mysql-max-4.1.9-pc-linux-gnu-i686 mysql<br /> # cd mysql<br /> # scripts/mysql_install_db& ndash;user=mysql<br /> # chown -R root .<br /> # chown -R mysql data<br /> # chgrp -R mysql .<br /> # cp support-files/my-medium.cnf /etc/my.cnf<br /> # cp support-files/mysql.server /etc/rc.d/init.d/mysqld<br /> # chmod +x /etc/rc.d/init.d/mysqld<br /> # chkconfig& ndash;add mysqld</p>< p>此时不要启动MySQL!</p>< p>三、安装并配置管理节点服务器(Server3)<br /> =====================================<br /> 作为管理节点服务器,Server3需要ndb_mgm和ndb_mgmd两个文件:</p>< p>从http://www.mysql.com上下载mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz</p>< p># mkdir /usr/src/mysql-mgm<br /> # cd /usr/src/mysql-mgm<br /> # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz<br /> # rm mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz<br /> # cd mysql-max-4.1.9-pc-linux-gnu-i686<br /> # mv bin/ndb_mgm .<br /> # mv bin/ndb_mgmd .<br /> # chmod +x ndb_mg*<br /> # mv ndb_mg* /usr/bin/<br /> # cd<br /> # rm -rf /usr/src/mysql-mgm</p>< p>现在开始为这台管理节点服务器建立配置文件:</p>< p># mkdir /var/lib/mysql-cluster<br /> # cd /var/lib/mysql-cluster<br /> # vi config.ini</p>< p>在config.ini中添加如下内容:</p>< p>[NDBD DEFAULT]<br /> NoOfReplicas=2<br /> [MYSQLD DEFAULT]<br /> [NDB_MGMD DEFAULT]<br /> [TCP DEFAULT]<br /> # Managment Server<br /> [NDB_MGMD]<br /> HostName=192.168.0.3 #管理节点服务器Server3的IP地址<br /> # Storage Engines<br /> [NDBD]<br /> HostName=192.168.0.1 #MySQL集群Server1的IP地址<br /> DataDir= /var/lib/mysql-cluster<br /> [NDBD]<br /> HostName=192.168.0.2 #MySQL集群Server2的IP地址<br /> DataDir=/var/lib/mysql-cluster<br /> # 以下2个[MYSQLD]可以填写Server1和Server2的主机名。<br /> # 但为了能够更快的更换集群中的服务器,推荐留空,否则更换服务器后必须对这个配置进行更改。<br /> [MYSQLD]<br /> [MYSQLD]</p>< p>保存退出后,启动管理节点服务器Server3:<br /> # ndb_mgmd</p>< p>启动管理节点后应该注意,这只是管理节点服务,并不是管理终端。因而你看不到任何关于启动后的输出信息。</p>< p>四、配置集群服务器并启动MySQL<br /> =============================<br /> 在Server1和Server2中都需要进行如下改动:</p>< p># vi /etc/my.cnf</p>< p>[mysqld]<br /> ndbcluster<br /> ndb-connectstring=192.168.0.3 #Server3的IP地址<br /> [mysql_cluster]<br /> ndb-connectstring=192.168.0.3 #Server3的IP地址</p>< p>保存退出后,建立数据目录并启动MySQL:</p>< p># mkdir /var/lib/mysql-cluster<br /> # cd /var/lib/mysql-cluster<br /> # /usr/local/mysql/bin/ndbd& ndash;initial<br /> 注意,执行此步时可能会报错,一般都是关天配置文件里面log-bin,server-id这些选项的,可以在/etc/my.cnf里面把这些相关的项注释掉即可。</p>< p># /etc/rc.d/init.d/mysqld start</p>< p>可以把/usr/local/mysql/bin/ndbd加到/etc/rc.local中实现开机启动。<br /> 注意:只有在第一次启动ndbd时或者对Server3的config.ini进行改动后才需要使用&ndash;initial参数!</p>< p>五、检查工作状态<br /> ================<br /> 回到管理节点服务器Server3上,并启动管理终端:</p>< p># /usr/bin/ndb_mgm<br /> 键入show命令查看当前工作状态:(下面是一个状态输出示例)</p>< p>[root@mysql3 root]# /usr/bin/ndb_mgm<br />& ndash; NDB Cluster& mdash; Management Client& ndash;<br /> ndb_mgm&gt; show<br /> Connected to Management Server at: localhost:1186<br /> Cluster Configuration<br />& mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;<br /> [ndbd(NDB)] 2 node(s)<br /> id=2 @192.168.0.1 (Version: 4.1.9, Nodegroup: 0, Master)<br /> id=3 @192.168.0.2 (Version: 4.1.9, Nodegroup: 0)</p>< p>[ndb_mgmd(MGM)] 1 node(s)<br /> id=1 @192.168.0.3 (Version: 4.1.9)</p>< p>[mysqld(API)] 2 node(s)<br /> id=4 (Version: 4.1.9)<br /> id=5 (Version: 4.1.9)</p>< p>ndb_mgm&gt;</p>< p>如果上面没有问题,现在开始测试MySQL:<br /> 注意,这篇文档对于MySQL并没有设置root密码,推荐你自己设置Server1和Server2的MySQL root密码。</p>< p>在Server1中:</p>< p># /usr/local/mysql/bin/mysql -u root -p<br />& gt; use test;<br />& gt; CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;<br />& gt; INSERT INTO ctest () VALUES (1);<br />& gt; SELECT * FROM ctest;</p>< p>应该可以看到1 row returned信息(返回数值1)。</p>< p>如果上述正常,则换到Server2上重复上面的测试,观察效果。如果成功,则在Server2中执行INSERT再换回到Server1观察是否工作正常。<br /> 如果都没有问题,那么恭喜成功!</p>< p>六、破坏性测试<br /> ==============<br /> 将Server1或Server2的网线拔掉,观察另外一台集群服务器工作是否正常(可以使用SELECT查询测试)。测试完毕后,重新插入网线即可。</p>< p>如果你接触不到物理服务器,也就是说不能拔掉网线,那也可以这样测试:<br /> 在Server1或Server2上:</p>< p># ps aux | grep ndbd<br /> 将会看到所有ndbd进程信息:</p>< p>root 5578 0.0 0.3 6220 1964 ? S 03:14 0:00 ndbd<br /> root 5579 0.0 20.4 492072 102828 ? R 03:14 0:04 ndbd<br /> root 23532 0.0 0.1 3680 684 pts/1 S 07:59 0:00 grep ndbd</p>< p>然后杀掉一个ndbd进程以达到破坏MySQL集群服务器的目的:</p>< p># kill -9 5578 5579</p>< p>之后在另一台集群服务器上使用SELECT查询测试。并且在管理节点服务器的管理终端中执行show命令会看到被破坏的那台服务器的状态。<br /> 测试完成后,只需要重新启动被破坏服务器的ndbd进程即可:</p>< p># ndbd<br /> 注意!前面说过了,此时是不用加&ndash;inital参数的!</p>< p>至此,MySQL集群就配置完成了!</p>http://www.downcc.com/tech/194.htmlSQL Server2009/06/27 14:35:15<p>1.关系模型:用二维表格结构表示实体集,外键表示实体间联系的数据模型称为关系模型。关系模型是由若干个关系模式组成的集合。</p>< p>2.关系模式:关系模式实际上就是记录类型。它包括:模式名,属性名,值域名以及模式的主键。关系模式仅是对数据特性的描述。</p>< p>3.关系实例:就是一个关系,即一张二维表格。</p>< p>4.属性:在关系模型中,字段称为属性。</p>< p>5.域:在关系中,每一个属性都有一个取值范围,称为属性的值域。</p>< p>6.元组:在关系中,记录称为元组。</p>< p>7.候选码:在关系中能唯一标识元组的属性集称为关系模式的候选码。</p>< p>8.主码:用户选作元组标识的一个候选码为主码。</p>< p>9.外码:某个关系的主码相应的属性在另一关系中出现,此时该主码在就是另一关系的外码,如有两个关系S和SC,其中S#是关系S的主码,相应的属性S#在关系SC中也出现,此时S#就是关系SC的外码。</p>< p>10.实体完整性规则:这条规则要求关系中元组在组成主码的属性上不能有空值。如果出现空值,那么主码值就起不了唯一标识元组的作用。</p>< p>11.参照完整性规则:这条规则要求&ldquo;不引用不存在的实体&rdquo;。其形式定义如下:如果属性集K是关系模式R1的主码,K也是关系模式R2的外码,那么R2的关系中,K的取值只允许有两种可能,或者为空值,或者等于R1关系中某个主码值。</p>< p>这条规则在使用时有三点应注意:</p>< p>(1)外码和相应的主码可以不同名,只要定义在相同值域上即可。</p>< p>(2)R1和R2也可以是同一个关系模式,表示了属性之间的联系。</p>< p>(3)外码值是否允许空应视具体问题而定。</p>< p>12.过程性语言:在编程时必须给出获得结果的操作步骤,即&ldquo;干什么&rdquo;和&ldquo;怎么干&rdquo;。如Pascal和C语言等。</p>< p>13.非过程性语言:编程时只须指出需要什么信息,不必组出具体的操作步骤的语言,各种关系查询语言均属于非过程性语言。(文/yan)</p>http://www.downcc.com/tech/177.htmlMySQL2009/06/19 18:24:41<p>[数据恢复故障描述]</p>< p>一台重要的MYSQL数据库服务器,146GB*2,RAID1,约130GB DATA卷,存储了大约200~300个数据库。平时管理员对每个数据库dump出以后,直接压缩成.gz包,再将所有重要的.gz 包合起来压缩成一个总的.tar.gz包,这些文件每日产生一次,覆盖原来的备份。数据文件及备份文件全部存储于data卷上。</p>< p>一次系统维护中,管理员不小心将data卷下的所有文件全部rm,删除后,马上停止系统,再未做其它操作,但删除时仍有大量终端在访问此服务器。</p>< p>要求恢复mysql数据库文件,即myd、frm、myi(可重建)文件,或每个数据库的.gz包,或所有重要数据库总的.tar.gz备份包。</p>< p>[数据恢复分析]</p>< p>ext3下的数据删除,理论上,会清除inode中除节点类型、日期外的其他属性,诸如文件大小、数据存储地址等属性会全部清0,同时目录表中会以目录条目长度的方式屏蔽掉已删除文件,但会保留节点编号,最后会改变BITMAP中的空间占用标志。</p>< p>即使是目录表中存在删除文件的节点编号,但因节点内容已经没有需要的东西,与数据区也是脱钩的。</p>< p>从数据角度,大多数文件类型都会有特定的文件头标志,按头标志是有可能找到删除文件的起始位置的,但EXT3以块组为单位进行存储,同时数据与索引是混合存储于数据区的,所以数据连续存储的可能性非常之小,这样,按文件格式进行处理也是很困难的。</p>< p>唯一的算法是结合上述几个特征,加上对日志的分析,加上对存储过程的模拟分析,尽可能地逼近真实存储结构。</p>< p>[数据恢复过程]</p>< p>1、对故障卷做完整备份。</p>< p>2、对总.tar.gz进行恢复分析,但恢复出来的文件解压到50%左右会报错,后续文件列表也无法列出。经分析,最大的原因是删除时仍有数据写入破坏文件导致。</p>< p>3、对分包的.gz文件进行恢复分析,大多数恢复成功。</p>< p>4、对于未恢复成功的.gz数据库。直接恢复其myd\frm数据文件,所有数据恢复成功。</p>< p>[其他]</p>< p>1、LINUX EXT3数据删除后应尽快断掉文件系统IO,通常umount文件系统即可。</p>< p>2、对故障卷做dd备份,确保数据恢复过程不会导致更严重的故障。</p>http://www.downcc.com/tech/176.htmlSQL Server2009/06/19 18:18:38<p>一、备份数据库</p>< p>1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server</p>< p>2、SQL Server组--&gt;双击打开你的服务器--&gt;双击打开数据库目录</p>< p>3、选择你的数据库名称(如论坛数据库Forum)--&gt;然后点上面菜单中的工具--&gt;选择备份数据库</p>< p>4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份</p>< p>二、还原数据库</p>< p>1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server</p>< p>2、SQL Server组--&gt;双击打开你的服务器--&gt;点图标栏的新建数据库图标,新建数据库的名字自行取</p>< p>3、点击新建好的数据库名称(如论坛数据库Forum)--&gt;然后点上面菜单中的工具--&gt;选择恢复数据库</p>< p>4、在弹出来的窗口中的还原选项中选择从设备--&gt;点选择设备--&gt;点添加--&gt;然后选择你的备份文件名--&gt;添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)--&gt;然后点击上方常规旁边的选项按钮</p>< p>5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置(也可以指定自己的目录),逻辑文件名不需要改动,移至物理文件名要根据你所恢复的机器情况做改动,如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\Data,那么就按照您恢复机器的目录进行相关改动改动,并且最后的文件名最好改成您当前的数据库名(如原来是bbs_data.mdf,现在的数据库是forum,就改成forum_data.mdf),日志和数据文件都要按照这样的方式做相关的改动(日志的文件名是*_log.ldf结尾的),这里的恢复目录您可以自由设置,前提是该目录必须存在(如您可以指定d:\sqldata\bbs_data.mdf或者d:\sqldata\bbs_log.ldf),否则恢复将报错</p>< p>6、修改完成后,点击下面的确定进行恢复,这时会出现一个进度条,提示恢复的进度,恢复完成后系统会自动提示成功,如中间提示报错,请记录下相关的错误内容并询问对SQL操作比较熟悉的人员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误,数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作,如果还提示正在使用的错误可以将SQL服务停止然后重起看看,至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复</p>< p>三、收缩数据库</p>< p>一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大</p>< p>1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器--&gt;双击打开数据库目录--&gt;选择你的数据库名称(如论坛数据库Forum)--&gt;然后点击右键选择属性--&gt;选择选项--&gt;在故障还原的模式中选择&ldquo;简单&rdquo;,然后按确定保存</p>< p>2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定</p>< p>3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据</p>< p>四、设定每日自动备份数据库</p>< p>强烈建议有条件的用户进行此操作!</p>< p>1、打开企业管理器,在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器</p>< p>2、然后点上面菜单中的工具--&gt;选择数据库维护计划器</p>< p>3、下一步选择要进行自动备份的数据-</p>http://www.downcc.com/tech/156.htmlMySQL2009/06/07 12:00:12<p>有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。</p>< p>下面的例子显示出如何使用MySQL客户安装新用户。这些例子假定权限已缺省被安装。这意味着为了改变,你必须在MySQL正在运行同一台机器上,你必须作为MySQL root用户连接,并且root用户必须对MySQL数据库有insert权限和reload管理权限。另外,如果你改变了root用户口令,你必须如下的MySQL命令指定它。</p>< p>你可以通过发出GRANT语句增加新用户:</p>< p>shell&gt; mysql --user=root mysql</p>< p>mysql&gt; GRANT ALL PRIVILEGES ON *.* TO monty@localhost</p>< p>IDENTIFIED BY 'something' WITH GRANT OPTION;</p>< p>mysql&gt; GRANT ALL PRIVILEGES ON *.* TO monty@&quot;%&quot;</p>< p>IDENTIFIED BY 'something' WITH GRANT OPTION;</p>< p>mysql&gt; GRANT RELOAD,PROCESS ON *.* TO admin@localhost;</p>< p>mysql&gt; GRANT USAGE ON *.* TO dummy@localhost;</p>< p>这些GRANT语句安装3个新用户:</p>< p>monty:可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令('something'做这个。注意,我们必须对monty@localhost和monty@&quot;%&quot;发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。</p>< p>admin:可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。</p>< p>dummy:可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为'N'--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。</p>< p>你也可以直接通过发出INSERT语句增加同样的用户存取信息,然后告诉服务器再次装入授权表:</p>< p>shell&gt; mysql --user=root mysql</p>< p>mysql&gt; INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),</p>< p>'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')</p>< p>mysql&gt; INSERT INTO user VALUES('%','monty',PASSWORD('something'),</p>< p>'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')</p>< p>mysql&gt; INSERT INTO user SET Host='localhost',User='admin',</p>< p>Reload_priv='Y', Process_priv='Y';</p>< p>mysql&gt; INSERT INTO user (Host,User,Password)</p>< p>VALUES('localhost','dummy','');</p>< p>mysql&gt; FLUSH PRIVILEGES;</p>< p>取决于你的MySQL版本,对上述,你可能必须使用一个不同数目'Y'值(在3.22.11以前的版本有更少的权限列)。对admin用户,只用在3.22.11开始的版本具有的更加可读的INSERT扩充的语法。</p>< p>注意,为了设置一个超级用户,你只需创造一个user表条目,其权限字段设为'Y'。不需要db或host表的条目。</p>< p>在user表中的权限列不是由最后一个INSERT语句明确设置的(对dummy用户),因此那些列被赋予缺省值'N'。这是GRANT USAGE做的同样的事情。</p>< p>下列例子增加一个用户custom,他能从主机 localhost、server.domain和whitehouse.gov连接。他只想要从localhost存取bankaccount数据库,从whitehouse.gov存取expenses数据库和从所有3台主机存取customer数据库。他想要从所有3台主机上使用口令stupid。</p>< p>为了使用GRANT语句设置个用户的权限,运行这些命令:</p>< p>shell&gt; mysql --user=root</p>< p>mysql mysql&gt; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP</p>< p>ON bankaccount.*</p>< p>TO custom@localhost</p>< p>IDENTIFIED BY 'stupid';</p>< p>mysql&gt; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP</p>< p>ON expenses.*</p>< p>TO custom@whitehouse.gov</p>< p>IDENTIFIED BY 'stupid';</p>< p>mysql&gt; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP</p>< p>ON customer.*</p>< p>TO custom@'%'</p>< p>IDENTIFIED BY 'stupid';</p>< p>通过直接修改授权表设置用户权限,运行这些命令(注意,在结束时FLUSH PRIVILEGES):</p>< p>shell&gt; mysql --user=root</p>< p>mysql mysql&gt; INSERT INTO user (Host,User,Password)</p>< p>VALUES('localhost','custom',PASSWORD('stupid'));</p>< p>mysql&gt; INSERT INTO user (Host,User,Password)</p>< p>VALUES('server.domain','custom',PASSWORD('stupid'));</p>< p>mysql&gt; INSERT INTO user (Host,User,Password)</p>< p>VALUES('whitehouse.gov','custom',PASSWORD('stupid'));</p>< p>mysql&gt; INSERT INTO db</p>< p>(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,</p>< p>Create_priv,Drop_priv)</p>< p>VALUES</p>< p>('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');</p>< p>mysql&gt; INSERT INTO db</p>< p>(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,</p>< p>Create_priv,Drop_priv)</p>< p>VALUES</p>< p>('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');</p>< p>mysql&gt; INSERT INTO db</p>< p>(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,</p>< p>Create_priv,Drop_priv)</p>< p>VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');</p>< p>mysql&gt; FLUSH PRIVILEGES;</p>< p>头3个INSERT语句增加user表条目,允许用户 custom用给定口令从不同的主机进行连接,但是没有授予任何许可(所有权限被设置为缺省值'N')。后3个INSERT语句增加db表条目,授予 custom以bankaccount、expenses和customer数据库权限,但是只能在从正确的主机存取时。通常,在授权表直接被修改时,服务器必须被告知再次装入他们(用FLUSH PRIVILEGES)以便使权限修改生效。 如果你想要给特定的用户从一个给定的域上的任何机器上存取权限,你可以发出一个如下的GRANT语句:</p>< p>mysql&gt; GRANT ...</p>< p>ON *.*</p>< p>TO myusername@&quot;%.mydomainname.com&quot;</p>< p>IDENTIFIED BY 'mypassword';</p>< p>为了通过直接修改授权表做同样的事情,这样做:</p>< p>mysql&gt; INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',</p>< p>PASSWORD('mypassword'),...);</p>< p>mysql&gt; FLUSH PRIVILEGES;</p>< p>你也可以使用xmysqladmin、mysql_webadmin甚至xmysql在授权表中插入、改变和更新值。你可以在MySQL的Contrib目录找到这些实用程序。</p>http://www.downcc.com/tech/155.htmlMySQL2009/06/07 11:57:41<p>使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:</p>< p>1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。</p>< p>2.用set password语句来修改用户的密码,三个步骤,先&ldquo;mysql -u root&rdquo;登陆数据库系统,然后&ldquo;mysql&gt; update mysql.user set password=password('newpwd')&rdquo;,最后执行&ldquo;flush privileges&rdquo;就可以了。</p>< p>3.需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作使用基于ACL即访问控制列表的安全措施来完成。也有一些对SSL连接的支持。</p>< p>4.除了root用户外的其他任何用户不允许访问mysql主数据库中的user表;</p>< p>加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库;</p>< p>5.用grant和revoke语句来进行用户访问控制的工作;</p>< p>6.不使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码;</p>< p>7.不选用字典中的字来做密码;</p>< p>8.采用防火墙来去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在DMZ区域中;</p>< p>9.从因特网上用nmap来扫描3306端口,也可用telnet server_host 3306的方法测试,不能允许从非信任网络中访问数据库服务器的3306号TCP端口,因此需要在防火墙或路由器上做设定;</p>< p>10.为了防止被恶意传入非法参数,例如where ID=234,别人却输入where ID=234 OR 1=1导致全部显示,所以在web的表单中使用''或&quot;&quot;来用字符串,在动态URL中加入%22代表双引号、%23代表井号、%27代表单引号;传递未检查过的值给mysql数据库是非常危险的;</p>< p>11.在传递数据给mysql时检查一下大小;</p>< p>12.应用程序需要连接到数据库应该使用一般的用户帐号,只开放少数必要的权限给该用户;</p>< p>13.在各编程接口(C C++ PHP Perl Java JDBC等)中使用特定&lsquo;逃脱字符&rsquo;函数;</p>< p>在因特网上使用mysql数据库时一定少用传输明文的数据,而用SSL和SSH的加密方式数据来传输;</p>< p>14.学会使用tcpdump和strings工具来查看传输数据的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 | strings。以普通用户来启动mysql数据库服务;</p>< p>15.不使用到表的联结符号,选用的参数 --skip-symbolic-links;</p>< p>16.确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限;</p>< p>17.不许将process或super权限付给非管理用户,该mysqladmin processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器;</p>< p>18.file权限不付给管理员以外的用户,防止出现load data '/etc/passwd'到表中再用select 显示出来的问题;</p>< p>19.如果不相信DNS服务公司的服务,可以在主机名称允许表中只设置IP数字地址;</p>< p>20.使用max_user_connections变量来使mysqld服务进程,对一个指定帐户限定连接数;</p>< p>21.grant语句也支持资源控制选项;</p>< p>22.启动mysqld服务进程的安全选项开关,--local-infile=0或1 若是0则客户端程序就无法使用local load data了,赋权的一个例子grant insert(user) on mysql.user to 'user_name'@'host_name';若使用--skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,可以用--skip-show-databases来关闭掉。</p>< p>23.碰到Error 1045(28000) Access Denied for user 'root'@'localhost' (Using password:NO)错误时,你需要重新设置密码,具体方法是:先用--skip-grant-tables参数启动mysqld,然后执行mysql -u root mysql,mysql&gt;update user set password=password('newpassword') where user='root';mysql&gt;Flush privileges;,最后重新启动mysql就可以了。(文/fen)</p>http://www.downcc.com/tech/154.htmlSQL Server2009/06/07 11:52:52<p>请按步骤进行,未进行前面的步骤时,请不要做后面的步骤,以免损坏你的数据库.</p>< p>一般不建议做第4,6两步,第4步不安全,有可能损坏数据库或丢失数据。第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复。</p>< p>1.清空日志</p>< p>DUMP TRANSACTION 库名 WITH NO_LOG</p>< p>2.截断事务日志</p>< p>BACKUP LOG 数据库名 WITH NO_LOG</p>< p>3.收缩数据库文件(如果不压缩,数据库的文件不会减小</p>< p>企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件</p>< p>--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了</p>< p>--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了</p>< p>也可以用SQL语句来完成</p>< p>--收缩数据库</p>< p>DBCC SHRINKDATABASE(客户资料)</p>< p>--收缩指定数据文件,1是文件号,可以通过这个语句查询到:</p>< p>select * from sysfiles</p>< p>DBCC SHRINKFILE(1)</p>< p>4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)</p>< p>a.分离数据库:</p>< p>企业管理器--服务器--数据库--右键--分离数据库</p>< p>b.在我的电脑中删除LOG文件</p>< p>c.附加数据库:</p>< p>企业管理器--服务器--数据库--右键--附加数据库</p>< p>此法将生成新的LOG,大小只有500多K</p>< p>或用代码:</p>< p>下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。</p>< p>a.分离</p>< p>EXEC sp_detach_db @dbname = 'pubs'</p>< p>b.删除日志文件</p>< p>c.再附加</p>< p>EXEC sp_attach_single_file_db @dbname = 'pubs',</p>< p>@physname = 'c:\Program Files\Microsoft</p>< p>SQL Server\MSSQL\Data\pubs.mdf'</p>< p>5.为了以后能自动收缩,做如下设置</p>< p>企业管理器--服务器--右键数据库--属性--选项--选择&quot;自动收缩&quot;</p>< p>--SQL语句设置方式:</p>< p>EXEC sp_dboption '数据库名',</p>< p>'autoshrink', 'TRUE'</p>< p>6.如果想以后不让它日志增长得太大</p>< p>企业管理器--服务器--右键数据库--属性--事务日志</p>< p>--将文件增长限制为xM(x是你允许的最大数据文件大小)</p>< p>--SQL语句的设置方式:</p>< p>alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)&nbsp; (文/yan)</p>http://www.downcc.com/tech/153.htmlSQL Server2009/06/07 11:50:25<p>事情开始得很简单。MegaWare公司市场部门想要一个新的网站来发布文档,开发团队觉得使用SQL Server 2000数据库作为文档存储仓库会使事情变得简单。Steve是MegaWare的数据库管理员,没有看出这有什么大问题;在数据库中存储文档,而不是使用文件系统,意味着服务器需要多做一些工作,但是它也会使得备份和管理容易得多。数据库与文件系统变得不同步也应该是不可能的。</p>< p>市场部门想要存储的许多文档都超过了8000个字节,那么很明显VARCHAR不是适合这项工作的数据类型。作为替代,TEXT数据类型被用来定义存放数据的字段。因为每个TEXT都能容纳2GB的内容,TEXT要存放市场部门的同事们扔进数据库的最大的文件也是没有问题的。</p>< p>数月过去了,市场用大量的无聊拷贝填满了整个数据库。但是这还不是Steve真正关心的问题。数据库愉快地嗡嗡作响地运转着,每个人对项目的结果都很满意。</p>< p>直到公司的标语改变的那个重大的日子。市场部的团队认为&ldquo;MegaWare: It's really cool!&rdquo;要比原来的&ldquo;It's MegaWare's Way or the Highway!&rdquo; 听起来更好。因为市场部团队已经将原来的标语嵌入了仓库中每个文档的页脚上,现在Steve的工作就是更改所有这些文档的页脚。</p>< p>&ldquo;没有问题,&rdquo; Steve想,打开SQL Server 查询分析器工具,执行了如下的T-SQL批处理:</p>< p>UPDATE MarketingDocuments</p>< p>SET Document =</p>< p>REPLACE(Document,</p>< p>'It''s MegaWare''s Way or the Highway!',</p>< p>'MegaWare: It''s really cool!)</p>< p>当他看到出现的错误消息的时候,Steve的轻松的微笑很快消失了,&ldquo;替换函数的参数1,text数据类型无效。&rdquo;</p>< p>替换函数在编写出来的时候,就对TEXT数据类型不起作用。同样也对CHARINDEX或者SUBSTRING不起作用&mdash;&mdash;或者至少是他们在超过8千个字符的情况下不起作用。更进一步地讲,开发人员忘了处理TEXT或者IMAGE类型的本地变量;实际上不支持任何操作。即使是简单地更新一个文档中的一个子字符串都需要用到晦涩的东西,以及难以使用的类似READTEXT和WRITETEXT的函数。而不是开发人员或者忙碌的数据库管理员因为想要弄清如何正确使用而采用了不同类型的函数消耗了时间。</p>< p>SQL Server的开发人员很幸运,他们将会拨开乌云见蓝天。SQL Server 2005引入了一系列新的被称为MAX的数据类型。这是VARCHAR,NVARCHAR和VARBINARY类型的扩展,这几种类型以前被限制在8000字节以下。MAX可以容纳高达2GB的数据,与TEXT和IMAGE一样&mdash;&mdash;并且完全兼容所有的SQL Server内置的字符串函数。</p>< p>用MAX关键字定义一个某种MAX类型的变量与替代字符串的尺寸(为VARCHAR/NVARCHAR的时候)或者字节(为VARBINARY的时候)一样简单。</p>< p>DECLARE @BigString VARCHAR(MAX)</p>< p>SET @BigString = 'abc'</p>< p>虽然这个变量可以自由地操纵,并且可以传递给任何的内置的字符串函数,兼容性仍然不是没有问题。首先,开发人员不能期望指定了尺寸的VARCHAR和VARBINARY变量在达到8000个字节的极限的时候可以自动&ldquo;升级&rdquo;到MAX版本。例如,如下的批处理:</p>< p>DECLARE @String1 VARCHAR(4001)</p>< p>DECLARE @String2 VARCHAR(4001)</p>< p>SET @String1 = REPLICATE('1', 4001)</p>< p>SET @String2 = REPLICATE('2', 4001)</p>< p>SELECT LEN(@String1 + @String2)</p>< p>4001+4001=8002,但是指定了尺寸的VARCHAR的极限是8000。因为这两个变量中没有一个是MAX类型,LEN函数的结果就是8000,不是8002。在将两个变量连接的时候,一种简单的修正方法就是声明这两个变量中的一个为VARCHAR(MAX)或者将其中的一个变量进行转换。与一个规定了尺寸的类型进行连接的时候,优先考虑MAX类型,最终结果是MAX类型。所以,以下批处理的结果是8002,正如我们期望的一样:</p>< p>DECLARE @String1 VARCHAR(4001)</p>< p>DECLARE @String2 VARCHAR(4001)</p>< p>SET @String1 = REPLICATE('1', 4001)</p>< p>SET @String2 = REPLICATE('2', 4001)</p>< p>SELECT LEN(CONVERT(VARCHAR(MAX), @String1) + @String2)</p>< p>在传递给字符串函数的时候,开发人员意识到字符串的原意在默认情况下是规定了尺寸的,而不是MAX类型,也是至关重要的。例如,以下查询的结果就很令人惊奇:</p>< p>SELECT LEN(REPLICATE('1', 8002))</p>< p>因为字符串&lsquo;1&rsquo;是被作为规定了尺寸的VARCHAR对待,而不是VARCHAR(MAX),结果就是8000&mdash;&mdash;但是在SQL Server 2005中,REPLICATE函数能够产生高达2GB的字符串。要修正这个问题,可以将字符串转换为VARCHAR(MAX),这样函数就会输出同样的类型了:</p>< p>SELECT LEN(REPLICATE(CONVERT(VARCHAR(MAX), '1'), 8002))</p>< p>这个查询现在将会返回期望的结果:8002。记住,总是要对采用了新特性编写的代码进行非常仔细的测试;隐藏的问题,例如上面描述的问题,可能并且毫无疑问地会在最坏的时间里造成灾难性的后果。</p>< p>除了变量之外,MAX类型也可以用于定义表的字段:</p>< p>CREATE TABLE BigStrings</p>< p>(</p>< p>BigString VARCHAR(MAX)</p>< p>)</p>< p>当用于表的时候,意识到MAX类型具有与TEXT和IMAGE类型稍微不同的行溢出行为是非常重要的。在SQL Server中,最大的行尺寸是8060字节。要超过这个限制,并且仍然管理每个都拥有高达2GB的存储,用TEXT和IMAGE类型存储的数据会被存储引擎自动地断行,在行里只留下一个16字节的指针。这意味着行的尺寸是减少了,这对性能有好处。然而,检索大数据是昂贵的,因为它不是与同一行的数据存放在同一个位置。</p>< p>MAX数据类型在默认情况下,使用TEXT/IMAGE溢出行为和正常尺寸的VARCHAR/VARBINARY类型的行为的混合方式。如果一个字段的数据,加上表中所有其他字段的数据,总量少于8060字节,数据就存放在行内。如果数据超过8060字节,MAX字段的数据就会存放在行外。对于大字符串的表,以下的行将会与表中的其他数据存储在同一个数据页内:</p>< p>INSERT BigStrings (BigString)</p>< p>VALUES (REPLICATE('1', 8000))</p>< p>But the following row will result in an overflow:</p>< p>INSERT BigStrings (BigString)</p>< p>VALUES (REPLICATE(CONVERT(VARCHAR(MAX), '1'), 100000))</p>< p>你可以更改MAX数据类型在每个表的基础上的默认的行为,它们会表现得和TEXT和IMAGE类型一样。这是通过使用sp_tableoption 存储过程中的&ldquo;大数值类型在行外&rdquo;选项实现的。为了修改大字符串表以将MAX类型的处理方式变得与TEXT和IMAGE数据类型的处理方式相同,可以使用如下的T-SQL:</p>< p>EXEC sp_tableoption</p>< p>'BigStrings',</p>< p>'large value types out of row',</p>< p>'1'</p>< p>看看定义一个MAX数据类型有多容易,与他们提供的灵活性一样,一些数据设计师将会被引诱以下列的方式开始定义表:</p>< p>CREATE TABLE Addresses</p>< p>(</p>< p>Name VARCHAR(MAX),</p>< p>AddressLine1 VARCHAR(MAX),</p>< p>AddressLine2 VARCHAR(MAX),</p>< p>City VARCHAR(MAX),</p>< p>State VARCHAR(MAX),</p>< p>PostalCode VARCHAR(MAX)</p>< p>)</p>< p>设计师要注意了:不要这样做!一个企业中的数据模型既应该包含有具有实际限制的数据,还要给用户接口设计师有关字段尺寸的大致的指导。像这样的表又该创建什么样的用户接口呢?</p>< p>除了数据整合和用户接口含义之外,如果设计师这样不必要地使用这些类型还会带来性能上的损害。记住,查询优化器使用字段的尺寸作为判断优化查询计划的众多标准之一。对于这个表,优化器几乎没有任何选择。</p>< p>所以,现在你知道了MAX数据类型为SQL Server 2005处理大数据增加了很大部分的灵活性。但是MegaWare的那个不幸的数据库管理员,Steve会发生什么变化?还在坚持使用SQL Server 2000,他开始更新简历,想象着如果更新表失败了话,他的工作也就失去了。但是他也是幸运的&mdash;&mdash;还有世界各地的MegaWare产品的拥护者&mdash;&mdash;用GOOGLE的搜索可以很快地找到这篇文章《在TEXT字段中查找并替代》,这篇文章告诉他如何正确的进行更新。他花了整晚的时间来学习资料;再过几个月之后,TEXT和IMAGE数据类型就仅仅是一段不愉快的记忆了。</p>http://www.downcc.com/tech/152.htmlAccess2009/06/07 11:48:10<p>本文章说明如何用VBA读写该属性。 可惜Field对象的CAPTION属性并不是ADO原生对象,而是&ldquo;可由ADO访问的ACCESS属性&rdquo;,在帮助文档中介绍了两种访问这个属性的方法,一种利用ADO,一种利用DAO,在这里我直接说出结果,由于在ACCESS2003及以前的版本中Field对象并不是ACCESSObject对象,因而也就没有AccessObjectProperties属性,所以我们也就别想在ADO中去解决这个问题吧,现在给出DAO的代码解决办法</p>< p>SubSetProperty(dbsTempAsDAO.Field,strNameAsString,_ booTempAsString) DimprpNewAsDAO.Property DimerrLoopAsError 'Attempttosetthespecifiedproperty.</p>< p>OnErrorGoToErr_Property dbsTemp.Properties(strName)=booTemp OnErrorGoTo0 ExitSub Err_Property:</p>< p>'Error3270meansthatthepropertywasnotfound. IfDBEngine.Errors(0).Number=3270Then</p>< p>'Createproperty,setitsvalue,andappendittothe 'Propertiescollection.</p>< p>SetprpNew=dbsTemp.CreateProperty(strName,_ dbText,booTemp)</p>< p>dbsTemp.Properties.AppendprpNew ResumeNext Else</p>< p>'Ifdifferenterrorhasoccurred,displaymessage. ForEacherrLoopInDBEngine.Errors</p>< p>MsgBox&quot;Errornumber:&quot;&amp;errLoop.Number&amp;VBCr&amp;_ errLoop.Description NexterrLoop End EndIf</p>< p>EndSub SubDisplayClumCaption(ByValtbnameAsString,ByValfldIndexAsInteger)</p>< p>DimdsetAsDAO.TableDef) //*****必须使用TableDef对象</p>< p>DimiAsIntegerDimtmpPropAsDAO.Property //强制使用DAO类型</p>< p>DimfldAsDAO.Field //强制使用DAO类型DimtmpTxtAsString'OnErrorResumeNext</p>< p>DimmsgAsStringDimcdbAsDAO.Database //*****强制使用DAO类型</p>< p>Setcdb=CurrentDb //****关键,确定对当前数据库的静态引用</p>< p>Setdset=cdb.TableDefs(tbname)//*****必须使用TableDef对象</p>< p>ForEachfldIndset.Fields tmpTxt=fld.Name SetPropertyfld,&quot;Caption&quot;,tmpTxt msg=msg fld.Properties(&quot;Caption&quot;)</p>< p>msg=msg Chr(10) Chr(13) Nextfld MsgBoxmsgEndSub</p>< p>这里代码中有两个SUB,一个是SetProperty,用来判断一个字段是否有指定的属性,如果没有设置,有就将相应的数值赋给该属性,这段代码几乎完全是照搬MS的帮助文档。另一个是DisplayClumCaption,这是对指定表中的字段按字段名设置其CAPTION属性的演示代码。如果有需要,大家可以对SetProperty进行修改,使他变成一个只读的函数,用来枚举指定表中每个字段的CAPTION属性。DisplayClumCaption代码中,我打&ldquo;星号&rdquo;的地方是要重点注意的,因为我在这里曾走过弯路,浪费了一个下午的时间在MSDN中游荡。</p>http://www.downcc.com/tech/151.htmlAccess2009/06/07 11:45:53<p><font color="#000000">  您的网站是否仍一如既往地保持&ldquo;静态&rdquo;?目前呈几何增长的互联网网站中,有相当一部分仍固守&ldquo;静态&rdquo;,无形中已大大落后于时代的步伐。所谓&ldquo;静态&rdquo;指的就是网站的网页内容&ldquo;固定不变&rdquo;,当用户浏览器通过互联网的HTTP协议向WEB服务器请求提供网页内容时,服务器仅仅是将原已设计好的静态HTML文档传送给用户浏览器。其页面的内容使用的仅仅是标准的HTML代码,最多再加上流行的GIF89A格式的动态图片,比如产生几只小狗小猫跑来跑去的动画效果。若网站维护者要更新网页的内容,就必须手动地来更新其所有的HTML文档。</font></p>< p><font color="#000000">  &ldquo;静态&rdquo;网站的致命弱点就是不易维护,为了不断更新网页内容,你必须不断地重复制作HTML文档,随着网站内容和信息量的日益扩增,你就会感到工作量大得出乎想象。</font></p>< p><font color="#000000">  一般来说,一个真正的、完整的站点是离不开数据库的,因为实际应用中,需要保存的数据很多,而且这些数据之间往往还有关联,利用数据库来管理这些数据,可以很方便的查询和更新。数据库有很多种,如:Fox 数据库(.dbf)、Access 数据库(.mdb)、Informix、Oracle 和 SQL Server 等等,在这里,我将日前整理好的ASP是如何访问Access数据库的资料拿出来和大家分享一下。</font></p>< p><font color="#000000">常用数据库语句</font></p>< p><font color="#000000">  1.SELECT 语句:命令数据库引擎从数据库里返回信息,作为一组记录。<br />   2.INSERT INTO 语句:添加一个或多个记录至一个表。<br />   3.UPDATE 语句:创建更新查询来改变基于特定准则的指定表中的字段值。<br />   4.DELETE 语句:创建一个删除查询把记录从 FROM 子句列出并符合 WHERE 子句的一个或更多的表中清除。<br />   5.EXECUTE 语句:用于激活 PROCEDURE(过程)</font></p>< p><font color="#000000">用 ASP 来做一个自己的通讯录练练手吧&hellip;&hellip;</font></p>< p><font color="#000000">一、建立数据库:</font></p>< p><font color="#000000">  用 Microsoft Access 建立一个名为 data.mdb 的空数据库,使用设计器创建一个新表。输入以下几个字段:</font></p>< p><font color="#000000">  字段名称  数据类型  说明      其它<br />   ID     自动编号  数据标识    字段大小:长整型 新值:递增 索引:有(无重复)<br />   username  文本    姓名      缺省值<br />   usermail  文本    E-mail     缺省值<br />   view    数字    查看次数    字段大小:长整型 默认值:0 索引:无<br />   indate   时间日期  加入时间    缺省值</font></p>< p><font color="#000000">  保存为 data.mdb 文件,为了便于说明,只是做了一个比较简单的库。</font></p>< p><font color="#000000">二、连接数据库</font></p>< p><font color="#000000">  方法1:<br />   Set conn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br />   conn.Open& quot;driver={Microsoft Access Driver (*.mdb)};dbq=&quot;&amp;Server.MapPath(&quot;data.mdb&quot;)</font></p>< p><font color="#000000">  方法2:<br />   Set conn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br />   conn.Open& quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;&amp;Server.MapPath(&quot;data.mdb&quot;)</font></p>< p><font color="#000000">  注意:一个页面中,只要连接一次就可以了,数据库使用完后要及时关闭连接。<br />   conn.Close<br />   Set conn = Nothing</font></p>< p><font color="#000000">三、添加新记录到数据库</font></p>< p><font color="#000000">  Set conn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br />   conn.Open& quot;driver={Microsoft Access Driver (*.mdb)};dbq=&quot;&amp;Server.MapPath(&quot;data.mdb&quot;)</font></p>< p><font color="#000000">  username =& quot;风云突变&quot;<br />   usermail =& quot;</font><a href="mailto:ec0705liujuan@163.com"><font color="#000000">ec0705liujuan@163.com</font></a><font color="#000000">&quot;<br />   indate = Now()</font></p>< p><font color="#000000">  sql =& quot;insert into data (username,usermail,indata) values('&quot;&amp;username&amp;&quot;','&quot;&amp;usermail&amp;&quot;','&quot;&amp;indate&amp;&quot;')&quot;<br />   conn.Execute(sql)</font></p>< p><font color="#000000">  conn.Close<br />   Set conn = Nothing</font></p>< p><font color="#000000">  说明:建立数据库连接;通过表单获取姓名、E-mail 字符串,Now()获取当前时间日期;使用 insert into 语句添加新记录;conn.Execute 来执行;最后关闭。</font></p>< p><font color="#000000">四、选择数据库里的记录</font></p>< p><font color="#000000">  1.选择所有记录的字段(按记录倒序排序):sql =& quot;select * from data order by ID desc&quot;<br />   2.选择所有记录的姓名和E-mail字段(不排序):sql =& quot;select username,usermail from data&quot;<br />   3.选择姓名为&ldquo;风云突变&rdquo;的所有记录:sql =& quot;select * from data where username='&quot;风云突变&quot;'&quot;<br />   4.选择使用 163 信箱的所有记录(按查看次数排序):sql =< /font><a href="mailto:&quot;select * from data where usermail like '%&quot;@163.com&quot;%'"><font color="#000000">&quot;select * from data where usermail like '%&quot;@163.com&quot;%'</font></a><font color="#000000"> order by view desc&quot;<br />   5.选择最新的10个记录:sql =& quot;select top 10 * from data order by ID desc&quot;</font></p>< p><font color="#000000">  SQL 语句已经知道了,不过在Web应用时,还得创建一个 RecordSet 对象得到记录集,才能把从数据库里取出的值应用在网页上,如果现在将所有的记录显示在网页上就这样:</font></p>< p><font color="#000000">  Set conn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br />   conn.Open& quot;driver={Microsoft Access Driver (*.mdb)};dbq=&quot;&amp;Server.MapPath(&quot;data.mdb&quot;)</font></p>< p><font color="#000000">  sql =& quot;select * from data&quot;<br />   Set rs = Server.CreateObject(&quot;ADODB.RecordSet&quot;)<br />   rs.Open sql,conn,1,1</font></p>< p><font color="#000000">  Do While Not rs.Eof<br />     Response.Write& quot;&lt;p&gt;姓名:&quot;&amp; rs(&quot;username&quot;)& amp;&quot; E-mail:&quot;&amp; rs(&quot;usermail&quot;)& amp;&quot; 查看:&quot;&amp; rs(&quot;view&quot;)& amp;&quot;次 &quot;&amp; rs(&quot;indate&quot;)& amp;&quot;加入&lt;/p&gt;&quot;<br />     rs.MoveNext<br />   Loop</font></p>< p><font color="#000000">  rs.Close<br />   Set rs = Nothing<br />   conn.Close<br />   Set conn = Nothing</font></p>< p><font color="#000000">  说明:建立数据库连接;创建 rs 得到记录集;循环显示记录,rs.Eof 表示记录末,rs.MoveNext 表示移到下一个记录;最后关闭。</font></p>< p><font color="#000000">五、修改(更新)数据库记录</font></p>< p><font color="#000000">  修改记录的E-mail:</font></p>< p><font color="#000000">  Set conn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br />   conn.Open& quot;driver={Microsoft Access Driver (*.mdb)};dbq=&quot;&amp;Server.MapPath(&quot;data.mdb&quot;)</font></p>< p><font color="#000000">  ID = 1<br />   usermail =& quot;</font><a href="mailto:ec0705liujuan@163.com"><font color="#000000">ec0705liujuan@163.com</font></a><font color="#000000">&quot;</font></p>< p><font color="#000000">  sql =& quot;update data set usermail='&quot;&amp;usermail&amp;&quot;' where ID=&quot;&amp;CInt(ID)<br />   conn.Execute(sql)</font></p>< p><font color="#000000">  conn.Close<br />   Set conn = Nothing</font></p>< p><font color="#000000">  说明:建立数据库连接;获取记录ID、新 E-mail 字符串;使用 update 语句修改记录;conn.Execute 来执行;最后关闭。<br />   如果使记录的查看值加1,则:sql =& quot;update data set view=view+1 where ID=&quot;&amp;CInt(ID)</font></p>< p><font color="#000000">六、删除数据库记录</font></p>< p><font color="#000000">  删除某一条记录:</font></p>< p><font color="#000000">  Set conn = Server.CreateObject(&quot;ADODB.Connection&quot;)<br />   conn.Open& quot;driver={Microsoft Access Driver (*.mdb)};dbq=&quot;&amp;Server.MapPath(&quot;data.mdb&quot;)</font></p>< p><font color="#000000">  ID = 1</font></p>< p><font color="#000000">  sql =& quot;delete from data where ID=&quot;&amp;CInt(ID)<br />   conn.Execute(sql)</font></p>< p><font color="#000000">  conn.Close<br />   Set conn = Nothing</font></p>< p><font color="#000000">  说明:建立数据库连接;获取记录ID;使用 http://www.downcc.com/tech/150.htmlAccess2009/06/07 11:43:22<p>第一步:配置数据源</p>< p>1.在&lsquo;控制面板&rarr;管理工具&rsquo;里选择&lsquo;数据源&rsquo;,在弹出的页面选择&lsquo;用户DSN&rsquo;(默认)。</p>< p>2.点击旁边的&lsquo;添加&rsquo;按钮,在弹出的页面选择&lsquo;Driver do Microsoft Access (*.mdb)&rsquo;,然后点击&lsquo;完成&rsquo;。</p>< p>3.在弹出的&lsquo;ODBC Microsoft Accecc 安装&rsquo;页面,在&lsquo;数据源名&rsquo;文本输入框填写一个名称(自定义),&lsquo;说明&rsquo;文本 框不用输入。然后点击下面的&lsquo;选择&rsquo;按钮,选取Access文件所在的路径。</p>< p>4.点击旁边的&lsquo;确定&rsquo;按钮,这是会在&lsquo;用户DSN&rsquo;选项卡的&lsquo;用户数据源&rsquo;下多出你刚才添加的数据源,名称就是刚才填写的&lsquo;数据源名&rsquo;。然后点击&lsquo;取消&rsquo;退出页面。数据源配置完成。</p>< p>第二步:在数据库原程序引用</p>< p>1.在&lsquo;开始&rsquo;菜单打开&lsquo;Microsoft SQL Server 2005&rarr;SQL Server Management Studio&rsquo;。</p>< p>2.新建一个数据库(名称自定义),选择新建的数据库点击右键选择&lsquo;任务&rarr;导入数据&rsquo;。</p>< p>3.在弹出的页面点击下一步,&lsquo;数据源&rsquo;选择&lsquo;Microsoft Access&rsquo;,然后选择Access数据库所在的路径,如果Access数据库有用户名和密码就需要填写,如果没有就不用填写。点击&lsquo;下一步&rsquo;。</p>< p>4.在弹出的页面,&lsquo;数据源&rsquo;可以安默认的不动。&lsquo;服务器名称&rsquo;及&lsquo;身份验证&rsquo;要和登录时的服务器及身份验证一样(如果不一样,在下面的数据库下拉框里找不到刚才新建的数据库)。在下面的数据库下拉框选择新建的数据库(如果没有新建的数据库,点击后面的刷新按钮。如果还是没有就检查服务器名称&rsquo;及&lsquo;身份验证&rsquo;是否正确)。可以点击后面的&lsquo;新建&rsquo;。点击&lsquo;下一步&rsquo;。</p>< p>5.在弹出的页面,按照默认选择第一项(复制一个或多个表或视图的数据)。点击&lsquo;下一步&rsquo;。</p>< p>6.在&lsquo;选择源表和源视图&rsquo;页面,选中要导入的表和视图。(可以点击&lsquo;预览&rsquo;查看表中的数据)点击&lsquo;下一步&rsquo;。</p>< p>7.按照默认&lsquo;立即执行&rsquo;,点击&lsquo;下一步&rsquo;。</p>< p>8.点击&lsquo;完成&rsquo;。</p>http://www.downcc.com/tech/140.htmlOracle2009/05/12 12:10:15<p>1、startup&nbsp;nomount&nbsp;< br />& nbsp;&nbsp;&nbsp;非安装启动,这种方式启动下可执行:重建控制文件、重建数据库&nbsp;< br />& nbsp;&nbsp;&nbsp;启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;< br />< br /> 2、startup&nbsp;mount&nbsp;dbname&nbsp;< br />& nbsp;&nbsp;&nbsp;安装启动,这种方式启动下可执行:数据库日志归档、数据库恢复、重新命名一些数据库文件&nbsp;< br />& nbsp;&nbsp;&nbsp;如:系统表空间或日志文件。&nbsp;< br />& nbsp;&nbsp;&nbsp;执行&ldquo;nomount&rdquo;,然后打开控制文件&nbsp;< br />< br />< br /> 3、startup&nbsp;open&nbsp;dbname&nbsp;< br />& nbsp;&nbsp;&nbsp;先执行&ldquo;nomount&rdquo;,然后执行&ldquo;mount&rdquo;,再打开包括Redo&nbsp;log文件在内的所有数据库文件,&nbsp;< br />& nbsp;&nbsp;&nbsp;这种方式下可访问数据库中的数据。&nbsp;< br />< br />< br /> 4、startup,等于以下三个命令&nbsp;< br />& nbsp;&nbsp;&nbsp;startup&nbsp;nomount&nbsp;< br />& nbsp;&nbsp;&nbsp;alter&nbsp;database&nbsp;mount&nbsp;< br />& nbsp;&nbsp;&nbsp;alter&nbsp;database&nbsp;open&nbsp;< br />< br />< br /> 5、startup&nbsp;restrict&nbsp;< br />& nbsp;&nbsp;&nbsp;约束方式启动&nbsp;< br />& nbsp;&nbsp;&nbsp;这种方式能够启动数据库,但只允许具有一定特权的用户访问&nbsp;< br />& nbsp;&nbsp;&nbsp;非特权用户访问时,会出现以下提示:&nbsp;< br />& nbsp;&nbsp;&nbsp;ERROR:&nbsp;< br />& nbsp;&nbsp;&nbsp;ORA-01035:&nbsp;ORACLE&nbsp;只允许具有&nbsp;RESTRICTED&nbsp;SESSION&nbsp;权限的用户使用&nbsp;< br />< br />< br /> 6、startup&nbsp;force&nbsp;< br />& nbsp;&nbsp;&nbsp;强制启动方式&nbsp;&nbsp;<br />& nbsp;&nbsp;&nbsp;当不能关闭数据库时,可以用startup&nbsp;force来完成数据库的关闭&nbsp;< br />& nbsp;&nbsp;&nbsp;先关闭数据库,再执行正常启动数据库命令&nbsp;< br />< br />< br /> 7、startup&nbsp;pfile=参数文件名&nbsp;< br />& nbsp;&nbsp;&nbsp;带初始化参数文件的启动方式&nbsp;< br />& nbsp;&nbsp;&nbsp;先读取参数文件,再按参数文件中的设置启动数据库&nbsp;< br />& nbsp;&nbsp;&nbsp;例:startup&nbsp;pfile=E:\Oracle\admin\oradb\pfile\init.ora&nbsp;< br />< br />< br /> 8、startup&nbsp;EXCLUSIVE</p>http://www.downcc.com/tech/139.htmlOracle2009/05/12 12:05:25<p>1、Export/Import的用处&nbsp;< br /> Oracle&nbsp;Export/Import工具用于在数据库之间传递数据。&nbsp;< br /> Export从数据库中导出数据到dump文件中Import从dump文件中到入数据导数据库中&nbsp;< br /> 下面是一般使用他们的情况&nbsp;< br /> (1)、两个数据库之间传送数据&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同一个版本的oracle&nbsp;Server之间&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不同版本的oracle&nbsp;Server之间&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同种OS之间&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不同种OS之间&nbsp;< br /> (2)、用于数据库的备份和恢复&nbsp;< br /> (3)、从一个SCHEMA传送到另一个SCHEMA&nbsp;< br /> (4)、从一个TABLESPACE传送到另一个TABLESPACE&nbsp;< br />< br /> 2、DUMP文件&nbsp;< br /> EXPORT到出的是二进制格式的文件,不可以手工编辑,否则会损坏数据。&nbsp;< br /> 该文件在ORACLE支持的任何平台上都是一样的格式,可以在各平台上通用。&nbsp;< br />< br /> DUMP文件在IMPORT时采用向上兼容方式,就是说ORALCE7的DUMP文件可以导入到ORACLE8中,但是版本相差很大的版本之间可能有问题。&nbsp;< br />< br /> 3、EXPORT/IMPORT过程&nbsp;< br /> EXPORT导出的DUMP文件包含两种基本类型的数据&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;DDL&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Data&nbsp;< br /> DUMP文件包含所有重新创建Data&nbsp;Dictionary的DDL语句,基本上是可以读的格式。但是应该注意的是,千万不要用文本编辑器编辑之,oracle说不支持这样做的。< br />< br /> 下面列出的是DUMP文件中包括的ORACLE对象,分为TABLE/USER/FULL方式,有些对象只是在FULL方式下才有(比如public&nbsp;synonyms,&nbsp;users,&nbsp;roles,&nbsp;rollback&nbsp;segm ents等)&nbsp;< br />< br /> Table&nbsp;mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;Mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Full&nbsp;Database&nbsp;Mode&nbsp;< br /> ----------------------&nbsp;&nbsp;----------------------&nbsp;&nbsp;----------------------< br /> ---&nbsp;< br /> Table&nbsp;definitions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;definitions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;definitions&nbsp;< br /> Table&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;data&nbsp;< br /> Owner's&nbsp;table&nbsp;grants&nbsp;&nbsp;&nbsp;&nbsp;Owner's&nbsp;grants&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Grants&nbsp;< br /> Owner's&nbsp;table&nbsp;indexes&nbsp;&nbsp;&nbsp;Owner's&nbsp;indexes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indexes&nbsp;< br /> Table&nbsp;constraints&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;constraints&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;constraints&nbsp;< br /> Table&nbsp;triggers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table&nbsp;triggers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All&nbsp;triggers&nbsp;< 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;Clusters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clusters&nbsp;< 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;Database&nbsp;links&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database&nbsp;links&nbsp;< 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;Job&nbsp;queues&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Job&nbsp;queues&nbsp;< 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;Refresh&nbsp;groups&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Refresh&nbsp;groups&nbsp;< 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;Sequences&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sequences&nbsp;< 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;Snapshots&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Snapshots&nbsp;< 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;Snapshot&nbsp;logs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Snapshot&nbsp;logs&nbsp;< 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;Stored&nbsp;procedures&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stored&nbsp;procedures&nbsp;< 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;Private&nbsp;synonyms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All&nbsp;synonyms&nbsp;< 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;Views&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Views&nbsp;< 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;Profiles&nbsp;< 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;Replication&nbsp;catalog&nbsp;< 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;Resource&nbsp;cost&nbsp;< 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;Roles&nbsp;< 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;Rollback&nbsp;segments&nbsp;< 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;System&nbsp;audit&nbsp;options&nbsp;< 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;System&nbsp;privileges&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbshttp://www.downcc.com/tech/138.htmlOracle2009/05/12 12:01:37<p>我们知道,oracle作为一种大型数据库,广泛应用于金融、邮电、电力、民航等数据吞吐量巨大,计算机网络广泛普及的重要部门。对于系统管理员来讲,如何保证网络稳定运行,如何提高数据库性能,使其更加安全高效,就显得尤为重要。作为影响数据库性能的一大因素--数据库碎片,应当引起dba的足够重视,及时 发现并整理碎片乃是dba一项基本维护内容。&nbsp;&nbsp;< br /> ----&nbsp;1、碎片是如何产生的&nbsp;&nbsp;< br />< br /> ----&nbsp;当生成一个数据库时,它会分成称为表空间(tablespace)的多个逻辑段(segment),如系统(system)表空间,临时(temporary)表空间等。一个表空间可以包含多个数据范围(extent)和一个或多个自由范围块,即自由空间(free&nbsp;space)。&nbsp;&nbsp;< br />< br /> ----&nbsp;表空间、段、范围、自由空间的逻辑关系如下:&nbsp;&nbsp;< br />< br /> ----&nbsp;当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中 。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,如图〈1〉。当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择),&nbsp;而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。例如:&nbsp;&nbsp;< br />< br /> ----&nbsp;2、碎片对系统的影响&nbsp;&nbsp;< br />< br /> ----&nbsp;随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多,将对数据库有以下两点主要影响:&nbsp;&nbsp;< br />< br /> ----&nbsp;(1)导致系统性能减弱&nbsp;&nbsp;< br />< br /> ----&nbsp;如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而&quot;最大&quot;自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态;&nbsp;&nbsp;< br />< br />< br /> ----&nbsp;(2)浪费大量的表空间&nbsp;&nbsp;< br />< br /> ----&nbsp;尽管有一部分自由范围(如表空间的pctincrease为非0)将会被smon(系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。&nbsp;&nbsp;< br />< br /> ----&nbsp;3、自由范围的碎片计算&nbsp;&nbsp;< br />< br /> ----&nbsp;由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用fsfi--free&nbsp;space&nbsp;fragmentation&nbsp;index(自由空间碎片索引)值来直观体现:&nbsp;&nbsp;< br />< br /> fsfi=100*sqrt(max(extent)/sum(extents))*1/sqrt(sqrt(count(extents)))&nbsp;< br />< br /> ----&nbsp;可以看出,fsfi的最大可能值为100(一个理想的单文件表空间)。随着范围的增加,fsfi值缓慢下降,而随着最大范围尺寸的减少,fsfi值会迅速下降。< br />& nbsp;&nbsp;< br /> ----&nbsp;下面的脚本可以用来计算fsfi值:&nbsp;&nbsp;< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;rem&nbsp;&nbsp;&nbsp;&nbsp;fsfi&nbsp;value&nbsp;compute&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;rem&nbsp;&nbsp;&nbsp;&nbsp;fsfi.sql&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;column&nbsp;fsfi&nbsp;format&nbsp;999,99&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;tablespace_name,sqrt(max(blocks)/sum(blocks))*&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(100/sqrt(sqrt(count(blocks))))&nbsp;fsfi&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dba_free_space&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;tablespace_name&nbsp;order&nbsp;by&nbsp;1;&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;spool&nbsp;fsfi.rep;&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;spool&nbsp;off;&nbsp;< br />< br /> ----&nbsp;比如,在某数据库运行脚本fsfi.sql,得到以下fsfi值:&nbsp;&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;tablespace_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsfi&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;------------------------------&nbsp;-------&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;rbs&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;74.06&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;system&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;100.00&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;temp&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;22.82&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;tools&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;75.79&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;users&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;100.00&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;user_tools&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100.00&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;ydcx_data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;47.34&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;ydcx_idx&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;57.19&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;ydjf_data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;33.80&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;ydjf_idx&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;75.55&nbsp;< br />< br /> ----&nbsp;统计出了数据库的fsfi值,就可以把它作为一个可比参数。在一个有着足够有效自由空间,且fsfi值超过30的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。&nbsp;&nbsp;< br /> ----&nbsp;4、自由范围的碎片整理&nbsp;&nbsp;< br />< br /> ----&nbsp;(1)表空间的pctincrease值为非0&nbsp;&nbsp;< br />< br /> ----&nbsp;可以将表空间的缺省存储参数pctincrease改为非0。一般将其设为1,如:&nbsp;<br />< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alter&nbsp;tablespace&nbsp;temp&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;storage(pctincrease&nbsp;1);&nbsp;< br />< br /> ----&nbsp;这样smon便会将自由范围自动合并。也可以手工合并自由范围:&nbsp;&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alter&nbsp;tablespace&nbsp;temp&nbsp;coalesce;&nbsp;< br />< br /> ----&nbsp;5、段的碎片整理&nbsp;&nbsp;< br /> ----&nbsp;我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典dba_segments,范围的信息可查看数据字典dba_extents。如果段的碎片过多,&nbsp;将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用import/export(输入/输出)工具来完成。&nbsp;&nbsp;< br />< br /> ----&nbsp;export()命令有一个(压缩)标志,这个标志在读表时会引发export确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数-- 等于全部所分配空间。若这个表关闭,&nbsp;则使用import()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如:&nbsp;&nbsp;< br />< br /> exp&nbsp;user/password&nbsp;file=exp.dmp&nbsp;compress=y&nbsp;grants=y&nbsp;indexes=y&nbsp;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tables=(table1,table2);&nbsp;< br />< br /> ----&nbsp;若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表:&nbsp;< br />< br /> imp&nbsp;user/password&nbsp;file=exp.dmp&nbsp;commit=y&nbsp;buffer=64000&nbsp;full=y&nbsp;< br />< br /> ----&nbsp;这种方法可用于整个数据库。&nbsp;&nbsp;< br /> ----&nbsp;以上简单分http://www.downcc.com/tech/137.htmlOracle2009/05/12 11:59:02<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:&nbsp;<br />< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessions=(1.1*process+5)< br />< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是我们增加process数时,往往数据库不能启动了。这因为我们还漏调了一个unix系统参数:它是/etc/system/&nbsp;中semmns,这是unix系统的信号量参数。每个process会占用一个信号量。semmns调整后,需要重新启动unix操作系统,参数才能生效。不过它的大小会受制于硬件的内存或ORACLE&nbsp;SGA。范围可从200&mdash;&mdash;2000不等。< br />< br />& nbsp;&nbsp;&nbsp;semmns的计算公式为:SEMMNS&gt;processes+instance_processes+system< br />& nbsp;&nbsp;&nbsp;< br />& nbsp;&nbsp;&nbsp;processes=数据库参数processes的值&nbsp;instance_processes=5(smon,pmon,dbwr,lgwr,arch)< br />< br />& nbsp;&nbsp;&nbsp;system=系统所占用信号量。系统所占用信号量可用下列命令查出:#ipcs&nbsp;-sb< br />< br />& nbsp;&nbsp;&nbsp;其中列NSEMS显示系统已占用信号量。< br />< br />& nbsp;&nbsp;&nbsp;其它一些跟连接有关的参数,如&nbsp;licence_max_sessions,&nbsp;licence_sessions_warning&nbsp;等默认设置都为< br /> 零,也就是没有限制。我们可以放心大胆地使用数据库了。&nbsp;</p>http://www.downcc.com/tech/136.htmlOracle2009/05/12 11:56:52<p>  相信为数不少的系统管理员每天都在做着同一样的工作&mdash;&mdash;对数据进行备份。一旦哪一天疏忽了,而这一天系统又恰恰发生了故障,需要进行数据恢复,那么此时就无能为力了。假如每天设定一个固定的时间,系统自动进行备份,那该多好啊!下面笔者结合实践经验,谈一谈UNIX环境下Oracle数据库的自动备份,以起到抛砖引玉的作用。< br />< br />   我们计划让数据库在晚上23点做export导出备份,在凌晨2点将备份文件拷贝到磁带上,在凌晨4点将备份文件拷贝到另一台UNIX机器上,为此我们可进行如下操作:< br />< br />   一、导出数据库< br />< br />   export命令将数据库中的数据备份成一个二进制文件,它通常有三种模式:用户模式、表模式和整个数据库模式。本文拟采用用户模式,备份之前,应先建立一个备份目录,以容纳备份文件,比如可建一个/backup目录。接着我们可在UNIX的Oracle目录下(也可以是其它目录)分别建立两个文件ora&mdash;backup,tar&mdash;backup。需要说明的是,前一个文件需要对Oracle的参数进行初始化,为了方便起见,我们不妨将初始化命令放到一个文件中(文件名姑且定为ora&mdash;env),再由第一个文件调用它。< br />< br />   1.&nbsp;ora&mdash;env文件对Oracle的参数进行初始化,其内容如下:< br />< br />   ORACLE&mdash;HOME=$ORACLE&mdash;HOME;export&nbsp;ORACLE&mdash;HOME< br />< br />   ORACLE&mdash;SID=ora73;export&nbsp;ORACLE&mdash;SID< br />< br />   ORACLE&mdash;TERM=sun;export&nbsp;ORACLE&mdash;TERM< br />< br />   LD&mdash;LIBRARY&mdash;PATH=$ORACLE&mdash;HOME/lib;export&nbsp;LD&mdash;LIBRARY&mdash;PATH< br />< br />   ORA&mdash;NLS32=$ORACLE&mdash;HOME/ocommon/nls/admin/data;export&nbsp;ORA&mdash;NLS< br />< br />   PATH=.:/usr/ccs/bin:/usr/ucb:$ORACLE&mdash;HOME/bin:$PATH;export&nbsp;PATH< br />< br />   DISPLAY=host1:0;export&nbsp;DISPLAY< br />< br />   NLS&mdash;LANG=american&mdash;america.zhs16cgb231280;export&nbsp;NLS&mdash;LANG< br />< br />   2.&nbsp;ora&mdash;backup文件对数据库做export导出,导出的文件名可以任意定,本文定为字母&ldquo;xx&rdquo;加当天日期,即假如当天日期是12月10号,则导出的文件名为&ldquo;xx1210.dmp&rdquo;,以区别于其它日期的备份文件。< br />< br />   ora&mdash;backup文件内容:< br />< br />   ./oracle/ora&mdash;env< br />< br />   #初始化Oracle数据库< br />< br />   rq=&prime;date&nbsp;+&Prime;%m%d&Prime;&nbsp;&prime;< br />< br />   #把当天日期赋予变量rq< br />< br />   rm&nbsp;/backup/< br />< br />   #&nbsp;清空&nbsp;/backup目录< br />< br />   exp&nbsp;test/test&nbsp;file=/backup/xx$rq.dmp&nbsp;log=/backup/xx$rq.log< br />< br />   本命令用于在$提示符下,导出test用户的数据(其口令亦为test),导出文件及日志均放在/backup目录下。< br />< br />   二、磁带备份< br />< br />   tar&mdash;backup文件将用export命令导出的数据文件拷贝到磁带上。< br />< br />   tar&mdash;backup文件内容:< br />< br />   tar&nbsp;rvf&nbsp;/dev/rmt/0n/backup/< br />< br />   本命令可将/backup目录下当天产生的文件备份到磁带上。本文件中,tar命令使用了三个参数,其中r选项表示向磁带上拷入文件而不破坏磁带原来内容,v选项表示在拷贝过程中显示文件信息,f选项后面加上磁带设备名,指定文件向何处拷贝,n选项表示磁带机不倒带。/dev/rmt/0表示UNIX主机第一个磁带驱动器,同理,/dev/rmt/1则表示UNIX主机第二个磁带驱动器,依此类推。< br />< br />   ora&mdash;env、ora&mdash;backup、tar&mdash;backup文件编写完成后,分别使用下述命令:< br />< br />   chmod&nbsp;755&nbsp;ora&mdash;env< br />< br />   chmod&nbsp;755&nbsp;ora&mdash;backup< br />< br />   chmod&nbsp;755&nbsp;tar&mdash;backup< br />< br />   这样,三个文件就都变成了可执行文件。< br />< br />   三、异地备份< br />< br />   我们知道,通常可用FTP命令在两台主机间传输数据,但一般是通过交互方式实现的,即需要手工输入目标主机的IP地址、用户名、口令等。显然,这不符合自动备份的要求。所幸的是,我们可以通过编写一个.netrc的文件来达到目标。这一文件必须命名为.netrc,且必须存放在启动FTP命令的机器上的用户注册目录中,该文件的权限应禁止组内或其它用户进行读访问。这样,当用户使用FTP命令的时候,系统将会在该用户的注册目录中寻找.netrc文件,如果能够寻找到,将会首先执行该文件,否则,会交互式地提示用户输入用户名、口令等。< br />< br />   在使用FTP命令之前,应先在另一台作备份用的UNIX机器上建一目录,以容纳备份文件,本文建的目录是/pub&nbsp;。需要指出的是,为了加快备份速度,两台主机之间的传输速率应尽可能的高,最好位于同一局域网上。< br />< br />   .netrc文件内容如下:< br />< br />   machine&nbsp;host2  < br />< br />   #&nbsp;host2为作备份用的主机名< br />< br />   login&nbsp;oracle  < br />< br />   #oracle为备份主机上的一个用户< br />< br />   password&nbsp;oracle  < br />< br />   #oracle用户的口令为oracle< br />< br />   macdef&nbsp;init    < br />< br />   #定义一个名为init的宏,它将在自动注册进程的最后被执行< br />< br />   bin      < br />< br />   #文件的传输方式设为二进制< br />< br />   lcd&nbsp;/backup  < br />< br />   #&nbsp;进入本地工作目录/backup< br />< br />   cd&nbsp;/pub    < br />< br />   #&nbsp;进入备份主机目录/pub< br />< br />   mput&nbsp;    < br />< br />   #&nbsp;将/backup目录下的所有文件传输至备份主机< br />< br />   bye      < br />< br />   #退出FTP会话进程< br />< br />   .netrc文件编写完成后,使用下述命令:< br />< br />   chmod&nbsp;600&nbsp;.netrc< br />< br />   这样,.netrc文件就只能被该用户所访问。< br />< br />   四、启动备份进程< br />< br />   Cron是一个永久进程,它由/etc/rc.local启动执行。Cron检查/var/spool/cron/crontabs/目录中的文件,找到所要执行的任务和执行任务的时间。< br />< br />   Crontab文件的每一行由六个域(minutes、hours、day&nbsp;of&nbsp;month、month、day&nbsp;of&nbsp;week、&nbsp;command)组成,域之间用空格或Tab分开,其中:< br />< br />   &nbsp;minutes:分钟域,值的范围是0到59< br />< br />   &nbsp;hours:小时域,值的范围是0到23< br />< br />   &nbsp;day&nbsp;of&nbsp;month:日期,值的范围是1到31< br />< br />   &nbsp;month:月份,值的范围是1到12< br />< br />   &nbsp;day&nbsp;of&nbsp;week:星期,值的范围是0到6,星期日值为0< br />< br />   &nbsp;command:所要运行的命令< br />< br />   如果一个域是,表明命令可以在该域所有可能的取值范围内执行。< br />< br />   如果一个域是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执行(包括两个数字本身)。< br />< br />   如果一个域是由逗号隔开的一系列值组成的,表明命令可以在这些值组成的范围内执行。< br />< br />   如果日期域和星期域都有值,则这两个域都有效。< br />< br />   现在,我们编写一个文件,用以启动自动备份进程。值得注意的是,该文件只能在Oracle用户名下用crontab&nbsp;-e&nbsp;命令来编辑,否则将不会被定时执行,文件名定为Oracle,文件将放在/var/spool/cron/crontabs&nbsp;目录下。编辑完成后,可以在Oracle的$提示符下,用crontab&nbsp;-l命令来查看。< br />< br />   Oracle文件内容:< br />< br />   0&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;/oracle/ora&mdash;backup< br />< br />   #&nbsp;每天23点对数据库执行备份< br />< br />   0&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;/oracle/tar&mdash;backup< br />< br />   #&nbsp;每天2点将文件备份到磁带上< br />< br />   0&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;ftp&nbsp;-i&nbsp;host2  < br />< br />   #&nbsp;每天4点将文件备份到另一台主机上< br />< br />   经过以上的操作后,系统每天晚上将自动产生一个备份,并且自动将备份文件分别拷贝到磁带上和另一台主机上。系统管理员需要做的是,隔几天换一盘磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)和清理备份目录。这样,他们就可以从备份数据的繁琐中解脱出来,去做其它更有意义的工作。而数据库既实现了磁带备份,又实现了异地备份,相应的安全性也大大提高了。</p>http://www.downcc.com/tech/135.htmlMySQL2009/05/11 11:12:15<p>无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。&nbsp;<br />< br /> 一、数字类型。数字类型按照我的分类方法分为三类:整数类、小数类和数字类。&nbsp;</p>< p>我所谓的&ldquo;数字类&rdquo;,就是指DECIMAL和NUMERIC,它们是同一种类型。它严格的说不是一种数字类型,因为他们实际上是将数字以字符串形式保存的;他的值的每一位(包括小数点)占一个字节的存储空间,因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定,在运算中不会&ldquo;失真&rdquo;,所以比较适合用于&ldquo;价格&rdquo;、&ldquo;金额&rdquo;这样对精度要求不高但准确度要求非常高的字段。&nbsp;</p>< p>小数类,即浮点数类型,根据精度的不同,有FLOAT(单精度)和DOUBLE(双精度)两种。它们的优势是精确度,FLOAT可以表示绝对值非常小、小到约 1.17E-38 (0.000...0117, 小数点后面有37个零)的小数,而DOUBLE更是可以表示绝对值小到约 2.22E-308 (0.000...0222, 小数点后面有307个零)的小数。FLOAT类型和DOUBLE类型占用存储空间分别是4字节和8字节。如果需要用到小数的字段,精度要求不高的,当然用FLOAT了!可是说句实在话,我们&ldquo;民用&rdquo;的数据,哪有要求精度那么高的呢?这两种类型至今我没有用过&mdash;&mdash;我还没有遇到适合于使用它们的事例。&nbsp;</p>< p>用的最多的,最值得精打细算的,是整数类型。从只占一个字节存储空间的TINYINT到占8个字节的BIGINT,挑选一个&ldquo;够用&rdquo;并且占用存储空间最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT占用存储空间分别为1字节、2字节、3字节、4字节和8字节,就无符号的整数而言,这些类型能表示的最大整数分别为255、65535、16777215、4294967295和18446744073709551615。如果用来保存用户的年龄(举例来说,数据库中保存年龄是不可取的),用TINYINT就够了;九城的《纵横》里,各项技能值,用SMALLINT也够了;如果要用作一个肯定不会超过16000000行的表的AUTO_INCREMENT的IDENTIFY字段,当然用 MEDIUMINT 不用 INT ,试想,每行节约一个字节,16000000行可以节约10兆多呢!&nbsp;<br />< br /> 二、日期时间类型。&nbsp;</p>< p>日期和时间类型比较简单,无非是 DATE、TIME、DATETIME、TIMESTAMP和YEAR等几个类型。只对日期敏感,而对时间没有要求的字段,就用DATE而不用DATETIME是不用说的了;单独使用时间的情况也时有发生&mdash;&mdash;使用TIME;但最多用到的还是用DATETIME。在日期时间类型上没有什么文章可做,这里就不再详述。&nbsp;<br />< br /> 三、字符(串)类型。&nbsp;</p>< p>不要以为字符类型就是 CHAR !CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要占去10个字节的空间;而VARVHAR则是可变长度的,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的,VARCHAR 类型的实际长度是它的值的(实际长度+1)。为什么&ldquo;+1&rdquo;呢?这一个字节用于保存实际使用了多大的长度呀!从这个&ldquo;+1&rdquo;中也应该看到,如果一个字段,它的可能值最长是10个字符,而多数情况下也就是用到了10个字符时,用VARCHAR就不合算了:因为在多数情况下,实际占用空间是11个字节,比用CHAR(10)还多占用一个字节!&nbsp;</p>< p>举个例子,就是一个存储股票名称和代码的表,股票名称绝大部分是四个字的,即8个字节;股票代码,上海的是六位数字,深圳的是四位数字。这些都是固定长度的,股票名称当然要用 CHAR(8) ;股票代码虽然是不固定长度,但如果使用VARVHAR(6),一个深圳的股票代码实际占用空间是5个字节,而一个上海的股票代码要占用7个字节!考虑到上海的股票数目比深圳的多,那么用VARCHAR(6)就不如CHAR(6)合算了。&nbsp;</p>< p>虽然一个CHAR或VARVHAR的最大长度可以到255,我认为大于20的CHAR是几乎用不到的&mdash;&mdash;很少有大于20个字节长度的固定长度的东东吧?不是固定长度的就用VARCHAR!大于100的VARCHAR也是几乎用不到的&mdash;&mdash;比这更大的用TEXT就好了。TINYTEXT,最大长度为255,占用空间也是(实际长度+1);TEXT,最大长度65535,占用空间是(实际长度+2);MEDIUMTEXT,最大长度16777215,占用空间是(实际长度+3);LONGTEXT,最大长度4294967295,占用空间是(实际长度+4)。为什么&ldquo;+1&rdquo;?&ldquo;+2&rdquo;?&ldquo;+3&rdquo;?&ldquo;+4&rdquo;?你要是还不知道就该打PP了。这些可以用在论坛啊、新闻啊,什么的,用来保存文章的正文。根据实际情况的不同,选择从小到大的不同类型。&nbsp;<br />< br /> 四、枚举和集合类型。&nbsp;</p>< p>枚举(ENUM)类型,最多可以定义65535种不同的字符串从中做出选择,只能并且必须选择其中一种,占用存储空间是一个或两个字节,由枚举值的数目决定;集合(SET)类型,最多可以有64个成员,可以选择其中的零个到不限定的多个,占用存储空间是一个到八个字节,由集合可能的成员数目决定。&nbsp;</p>< p>举个例子来说,在SQLServer中,你可以节约到用一个Bit类型来表示性别(男/女),但MySQL没有Bit,用TINTINT?不,可以用ENUM('帅哥','美眉')!只有两种选择,所以只需一个字节&mdash;&mdash;跟TINYINT一样大,但却可以直接用字符串'帅哥'和'美眉'来存取。真是太方便啦!&nbsp;<br />< br /> 好了,MySQL的数据类型介绍得差不多,我的建库策略也随着介绍数据类型介绍给大家一些。但这只是其中一部分,篇幅有限,不能再细说;其他的,就靠各人在对数据类型理解的基础上,多多实践、多多讨论。</p>http://www.downcc.com/tech/134.htmlMySQL2009/05/11 11:08:08<p>自己写的,大家多指教.< br /> mysqldump_all.sh [first|local|help}< br />< br /> 先修改脚本进行必要的配置,然后以root用户执行.< br /> 1. 第一执行远程备份时先用 first参数.< br /> 2. 本地备份用local参数< br /> 3. 远程备份不用参数&lt;注意1&gt;< br />< br /> 注意:需要在另一主机上的Mysql用户用添加用户..< br />< br /> 需要配置的地方:< br /> # define host and mysql password< br /> REMOTE_HOST=&quot;&quot; #远程主机名或IP< br /> REMOTE_PASSWORD=&quot;&quot; #远程主机的mysql中的root@本地主机 密码.< br />< br /> # define database path< br /> DB_PATH=&quot;/var/lib/mysql&quot; #本地mysql数据库路径< br /> LOCAL_PASSWORD=&quot;&quot; #本地mysql root用户密码< br /> DB_BACKUP_PATH=&quot;/root/db_bk&quot; #本地备份时数据保存的路径< br />< br /> NO_BACKUP_DB=&quot;&quot; 设置本地数据库中不想备份的数据库名,用空格隔开< br />< br /> 直接下载< br />< br /> #!/bin/sh< br /> # mysqldump_all.sh< br /> # this scripts is used to backup MySQL database bettwen tow MySQL SERVER!< br />< br /> # define host and mysql password< br /> REMOTE_HOST=&quot;&quot;< br /> REMOTE_PASSWORD=&quot;&quot;< br />< br /> # define database path< br /> DB_PATH=&quot;/var/lib/mysql&quot;< br /> LOCAL_PASSWORD=&quot;&quot;< br /> DB_BACKUP_PATH=&quot;/root/db_bk&quot;< br />< br /> # define which database no back up, write db anme escap whit space!< br /> # example;< br /> # NO_BACKUP_DB=&quot;yns test ps_note&quot;< br /> # this said that if db name is& quot;yns&quot; or& quot;test&quot; or& quot;ps_note&quot;, then not backup them!< br />< br /> NO_BACKUP_DB=&quot;&quot;< br />< br /> # get the database name and process one by one< br /> echo& quot;Start to Backup...&quot;;< br /> #ls /var/lib/mysql& gt; /tmp/mydb.all< br /> if [& quot;$1&quot; !=& quot;help&quot; ]; then< br /> for db in `ls $DB_PATH`; do< br /> if_backup=&quot;1&quot;< br /> if [ -d $DB_PATH/$db ] ; then< br /> for noBackDB in $NO_BACKUP_DB ; do< br /> if ( test& quot;$db&quot; =& quot;$noBackDB&quot; ); then< br /> #echo -n& quot;...&quot;;< br /> if_backup=&quot;&quot;;< br /> fi< br /> done< br /> if [ $if_backup ]; then< br /> case& quot;$1&quot; in< br />< br /> first)< br /> echo -n& quot;Crate db [ $db ] on $REMOTE_HOST first!&quot;< br /> result=`mysqladmin -h $REMOTE_HOST --password=$REMOTE_PASSWORD create $db`< br /> if [ ! $result ]; then< br /> echo& quot;...Done!&quot;;< br /> else< br /> echo& quot;...Fialed! check your configure plz!&quot;;< br /> echo& quot;Remote host said: $result&quot;;< br /> exit< br /> fi< br /> ;;< br />< br /> local)< br /> # back up to localhost dir.< br /> if [ ! -d $DB_BACKUP_PATH ]; then< br /> mkdir $DB_BACKUP_PATH< br /> fi< br /> echo -n& quot;[ $db ]....Backup to local$DB_BACKUP_PATH with gzip&quot;;< br /> if [ -e& quot;$DB_BACKUP_PATH/$db.gz&quot; ]; then< br /> mv $DB_BACKUP_PATH/$db.gz $DB_BACKUP_PATH/$db.1.gz;< br /> fi< br /> mysqldump --password=Walte#Ming $db | gzip& gt; $DB_BACKUP_PATH/$db.gz< br /> echo& quot;...[OK]&quot;< br /> ;;< br />< br /> *)< br /> # Do common Backup!< br /> echo -n& quot;[ $db ]...Do Backup! ====&gt;&gt; $REMOTE_HOST/$db&quot;;< br /> mysqldump --add-drop-table $db --password=$LOCAL_PASSWORD | mysql -h $REMOTE_HOST --password=$REMOTE_PASSWORD $db< br /> echo& quot;....[OK]&quot;;< br /> esac< br /> else< br /> echo& quot;[ $db ]&quot;;< br /> echo& quot;***This database set to Not backup!...Operation CANCELED!&quot;;< br /> fi< br /> else< br /> echo& quot;[ $db ]&quot;;< br /> echo& quot;***Warning! Not a DataBbase. Backup Canceled***&quot;;< br /> fi< br /> done< br />< br /> else< br /> echo& quot;Usage: mysqldupm_all.sh [firs|local|help]&quot;;< br /> echo& quot;Some question ask for walteyh@sohu.com&quot;;< br /> fi< br />< br /> # Ended all backup opretion!< br /> echo& quot;&quot;;< br /> echo& quot;Note: if there is come wrong message white MySQL, you should check your configure first!&quot;;< br /> exit</p>http://www.downcc.com/tech/133.htmlMySQL2009/05/11 11:05:00<p>有多少次你在考虑怎样设置数据库时感到为难?其实,如果你在Linux上使用MySQL,就不会有这种情况了< br /> 。在Linux上使用Webmin图形界面来创建MySQL数据库将变得十分的简单。< br />< br /> 在这篇文章中,我们将一起来看看MySQL数据库应用程序中的一些基本功能。但并不是机械地列出所有的命令,你将明确地用自己的方式来快速创建MySQL数据库,数据库表格,并在这些表格中添加数据。这篇文章假设你已经在自己的Linux主机中安装了MySQL。< br />< br /> 新的Webmin< br />< br /> Webmin是Linux基于Web的一个管理工具,它允许你将浏览器指定在10000端口上并管理你的Linux盒。通过这个工具,你可以管理Apache, Samba, MySQL, Postfix, ftp, ppp等等,太多了,简直列不完。< br />< br /> 这些都很简单,从fpmfind站点下载最新版本,然后安装。用正确的rpm命令(以root权限)运行,例如: rpm -ivh webmin-0.87.rpm< br />< br /> 或者从资源中安装正确的命令集(再以root权限):< br /> tar xvzf webmin-o.8.7.tar.gz< br /> cd webmin-0.87< br /> ./setup.sh< br />< br /> 然后,在应用程序安装后,回答所有出现的询问,确保你的Web服务器正确运行。(在大多数系统中,你可以以root权限执行/etc/rc.d/init.d/httpd start来运行HTTPD后台程序。)将你的浏览器指向http://localhost:10000并且以安装配置中的管理员名和密码操作。< br />< br /> 一旦你登录了Webmin,你可以点击Servers制表符,并点击MySQL的数据库服务器图标(这正是这篇文章的目的)。如果你的MySQL数据库服务器没有运行,你会看到Start MySQL Server按钮。如果想进入MySQL数据库服务器的页面,你就必须启动服务器,所以点击这个按钮。一旦你登录了MySQL数据库服务器的页面,你就可以开始添加和编辑你的MySQL表格了。< br />< br /> 总体配置< br />< br /> 在MySQL数据库服务器页面的底部,你会看到一排设置总体权限的图标:User Permission, Database Permission, Host Permission, Table Permission, and Field Permission< br /> 。每一个入口都可以进行自解释。唯一可能使你产生疑惑的也许就是你可以选定所有的允许,但却没有一个All选项可供你选择。如果想提供一个用户/数据库/主机/表格/域的完全许可,你可以将列表中的所有选项都选定并按Save保存设置;这样域对其他项就都有权限了。< br />< br /> 创建表格< br />< br /> 首先,在MySQL数据库服务器的主页面上,点击Create New Database链接。如果你愿意的话,New Database Options页面(图形A)会让你填入一些细节并在数据库中创建一个初始表格。下面我们用名为Editorial的初始表格,创建一个名为LinuxUsers的数据库。(我们将一步一步来。)如果你不想用一个初始表格来创建这个数据库,你只需填写数据库的名称(必需的),选择nitial Table旁的None单选按钮,然后点击Create。< br />< br />< br /> 图形A:不幸的是,你的新的数据库中创建的初始表格只包含四个域。< br />< br /> 在这个例子中,我们将创建一个初始表格。在表格中将四个域命名为:UserName, Extension, OfficeNumber, 和MachineName。一旦你填入信息,并点击Create;你将回到MySQL数据库服务器的主页面,并可以看到新创建的数据库的图标,如图形B。< br />< br />< br /> 图形B:点击LinuxUsers图标你会看到初始表格的图标Editorial。< br />< br /> 在创建初始表格期间,你应该注意到你不能定义任何入口作为初始健。点击Editorial图标,你会在表格中(图形C)看到我们创建的四个入口的列表。< br />< br />< br /> 图形C:如果你看到对所有的Allow Nulls入口都是Yes,那你就没有设置任何初始健。< br />< br /> 让我们将UserName设置为初始健,那么一般而言,这个域总有一个入口。点击Field Name栏下的UserName入口,进入Field Parameters页面。(图形D)< br />< br />< br /> 图形D:如果一个特定的域使用一个公共的入口,则需要给它一个缺省值。< br />< br /> 对Allow Nulls选No,对Part Of Primary Key选Yes。你也可以给初始健一个缺省值。我们不希望给域UserName一个缺省值,但我们也可以那样做。这两个值改变之后,点击Save并回到Edit Table页面,你将在Allow Nulls栏看到No,在主栏中看到Primary(图形C)。< br />< br /> 下一个我们要创建的表格是Editorial的一个拷贝,名为Webdev。在MySQL数据库服务器的主页面上,点击你想编辑的数据库,将出现Edit Database界面。点击Create New Table按钮。在表格名字一栏中填上Webdev,在Copy Fields From Table列表中选择LinuxUsersEditorial,点击创建。你将回到Edit Database界面并看到新的数据库表格。< br />< br /> 最后的一些想法< br />< br /> 处理数据库问题是项庞大的任务< br /> 。Webmin并不能解决在管理一个数据库中遇到的所有问题,但它可以帮助你轻松快捷的初始安装一个数据库。对那些刚刚涉及到数据库的人来说,用Webmin创建数据库也是很容易的事情。< br />< br /> 如果你不仅仅满足于创建/编辑你的表格,那你就要面对MySQL的标准语法了。幸运的是,你依然可以在Edit Database页面上使用Execute SQL按钮。不要忘了使用浏览器页面左上角的Help链接,这个小按钮将会有很大的作用。(翻译:智德;责任编辑:刘燕之)< br />< br /> TechRepublic是一个专为各类IT专业人士设立的在线社区以及资源中心,我们提供有深度的技术文章,这些文章由IT专家写成,面对IT专家读者。除了提供从Windows到e-mail到防火墙等各种文章以外,我们还提供IT业界分析,下载,管理要点,讨论组以及新闻邮件服务。< br />< br />& copy; 2001 TechRepublic, Inc.</p>http://www.downcc.com/tech/132.htmlMySQL2009/05/11 11:02:13<p>随着互联网的发展和自由软件软件的日益活跃,越来越多的人开始将各种数据库应用于自己的网络应用中。于是,各种各样的数据库系统出现在互联网的舞台上,最常见的数据库有O'Reilly Network的MySQL 和PostgreSQL Inc的 PostgreSQL,在互联网有着不同的应用和用户群。此外象oracle、sybase、infomix等大型数据库也开始渐渐向Linux平台移植,使得Linux下的数据库日益呈现多样化和专业化的趋势。< br />< br /> 1.为什么要使用数据库< br />< br /> 为了建立交互站点,你需要使用数据库来存储来自访问者的信息。例如,你要建立一个 职业介绍服务的站点,你就需要存储诸如个人简历,所感兴趣的工作等等这样的信息。 创建动态网页也需要使用数据库,如果你想显示符合来访者要求的最好的工作,你就需要从数据库中取出这份工作的信息。你将会发现,在许多情况下需要使用数据库。< br />< br /> 2.如何取得数据库软件< br />< br /> 现下流行的Linux数据库基本都可以通过INTERNET下载的到,你可以从以下几个地方下载MySql数据库:< br /> Mysql:到本书出版为止,mysql的最新版本号是3.23.22< br />< a href="http://www.mysql.com/" target="_blank">http://www.mysql.com</a>< br />< br /> 3. mysql的安装和使用:< br />< br /> 3.1.安装前的准备工作:< br />< br /> MySQL需要至少Linux 2.0。< br /> MySQL的Perl支持要求Perl 5.004_03或更新。< br /> Mysql在Linux下的安装有两种:1) 源码方式的安装,取得mysql的安装tar包后自行编译安装;2〕二进制方式的安装,用MYSQL编译好的二进制文件安装,主要是以RPM的形式进行安装。< br /> 二进制分发通过在你选择的安装地点(典型的&quot;/usr/local/mysql&quot;)解压缩来安装,并且在该处创建下列目录(表.1):< br />< br /> 表.1< br />< br /> 目录 目录的内容< br />& quot;bin&quot; 客户程序和mysqld服务器< br />& quot;data&quot; 日志文件, 数据库< br />& quot;include&quot; 包含(头)文件< br />& quot;lib&quot; 库文件< br />& quot;scripts&quot; mysql_install_db< br />& quot;share/mysql& quot; 错误消息文件< br />& quot;sql-bench&quot; 基准程序< br />< br /> 源代码分发在你配置并编译后进行安装。缺省地,安装步骤将文件安装在&quot;/usr/local&quot;下的下&lt;SPAN title=&quot;常规词语,单击这里可以查看解释&quot; style=&quot;BACKGROUND-IMAGE: url(C:PROGRA~1!SUNVDFKC3000< br /> ormmark.gif); BACKGROUND-POSITION: left bottom; BACKGROUND-REPEAT: repeat-x; CURSOR: hand&quot; )&gt;列子&lt;/SPAN&gt;目录(表.2):< br />< br /> 表.2< br />< br /> 目录 目录的内容< br />& quot;bin&quot; 客户程序和脚本< br />& quot;include/mysql&quot; 包含(头)文件< br />& quot;info&quot; Info格式的文档< br />& quot;lib/mysql&quot; 库文件< br />& quot;libexec&quot; mysqld服务器< br />& quot;share/mysql&quot; 错误消息文件< br />& quot;sql-bench&quot; 基准程序和crash-me测试< br />& quot;var&quot; 数据库和日志文件。< br />< br /> 在一个安装目录内,源代码安装的布局在下列方面不同于二进制安装:< br />< br /> * mysqld服务器被安装在&quot;libexec&quot;目录而不是&quot;bin&quot;目录内。< br /> * 数据目录是&quot;var&quot;而非&quot;data&quot;。< br /> * mysql_install_db被安装在&quot;/usr/local/bin&quot;目录而非&quot;/usr/local/mysql/scripts&quot;内。< br /> * 头文件和库目录是&quot;include/mysql&quot;和&quot;lib/mysql&quot;而非&quot;include&quot;和&quot;lib&quot;。< br />< br /> 3.2.用mysql的源码包进行安装< br />< br /> 你需要下列工具构造并安装MySQL源代码:< br />< br /> * GNU gunzip解压缩该分发。< br /> * 一个合适的tar解包分发。GNU tar已知可以工作。< br /> * 一个能运行的ANSI C++编译器。gcc&gt; = 2.8.1 、egcs&gt; = 1.0.2 、SGI C++和SunPro C++是一些已知能工作编译器。 当使gcc用时,不需要libg++。gcc2.7.x 有一个bug,使得它可能不能编译一些完全合法的C++文件,例如&quot;sql/sql_base.cc&quot;。如果你仅有gcc2.7.x,你必须升级gcc才能编译MySQL。< br /> * 一个优秀的make程序。GNU make总是被推荐且有时必须。如果你有问题,我们推荐试一试GNU make3.75或更新。< br /> * 你要拥有系统的root权限。< br />< br /> 3.2.1.快速安装:< br />< br /> 其实mysql源码是个非常适合linux初学者安装的数据库,他的快速安装极为简便,在默认情况下mysql是安装在/usr/local/下的,包括他的BIN文件以及数据结构等。< br />< br /> # tar zxvf tarfile.tar.gz< br /> # cd mysql_src_dir< br /> #./configure< br /> #make< br /> #make install< br /> #make clean< br />< br /> 这样的快速安装方法就把mysql安装成系统的默认状态< br />< br /> 3.2.2.配置安装:< br />< br /> 用上述的方法对源码解包后,就可以根据自己的需要利用configure对Mysql进行安装配置了< br />< br /> 1.Configure选项:< br />< br /> configure脚本给你一个很大的控制权来如何配置你的MySQL。你使用configure命令行的选项进行。你也可以用正确的环境变量作用于configure。对于一个由configure支持的选择列表,运行这个命令:< br /> #./configure -- help< br />< br /> 一些更常用的configure选项见下面的描述:< br />< br /> * 只编译MySQL客户库和客户程序而不是服务器,使用--without-server选项:< br />< br /> # ./configure --without-server< br />< br /> 如果你没有一个 C++ 编译器,mysql将不编译(有一个客户程序需要C++)。在这种情况下,你可以去掉configure里面测试C++编译器的代码,然后运行带有 --without-server选项的./configure。编译步骤步将仍然尝试构造mysql,但是你可以忽略任何关于&quot; mysql.cc& quot;的警告。(如果make停止,试试make -k告诉它即使出错继续剩下的构造步骤)。< br />< br /> * 如果你不想要位于&quot;/usr/local/var&quot;目录下面的日志(log)文件和数据库,使用类似于下列configure命令的一个:< br />< br /> * #./configure --prefix=/usr/local/mysql< br /> * #./configure --prefix=/usr/local --localstatedir=/usr/local/mysql/data< br />< br /> 第一个命令改变安装前缀以便任何东西被安装在&quot;/usr/local/mysql&quot;下面而非缺省的&ldquo;/usr/local&rdquo;。第二个命令保留缺省安装前缀,但是覆盖了数据库目录缺省目录(通常是&quot;/usr/local/var&quot;)并且把它改/usr/local/mysql/data.< br />< br /> * 如果你正在使用Linux并且你想要MySQL的套接字位于缺省地点以外的某个地方(通常在目录&quot;/tmp&quot;或&quot;/var/run&quot;,使用象这样的configure的命令:< br />< br /> #./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock< br />< br /> 注意给出的文件必须是一个绝对路径!< br />< br /> * 如果你想编译静态链接程序运行configure:< br />< br /> * #./configure --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static< br />< br /> * 如果你正在使用gcc并且没有安装libg++或libstdc++,你可以告诉configure使用gcc作为C++编译器:< br />< br /> #CC=gcc CXX=gcc ./configure< br /> 当你使用时gcc作为C++编译器是,它将不试图链接libg++或libstdc++。如果构造失败并且产生有关编译器或链接器的错误,不能创建共享库&quot;libmysqlclient.so.#&quot;(&quot;#&quot;是一个版本号), 你可以通过为configure指定--disable-shared选项来解决此问题。在这种情况下,configure将不构造一个共享libmysqlclient.so.#库。< br />< br /> * 你可以设置MySQL对于非NULL的列不使用DEFAULT列值(即,不允许列是NULL)。这导致INSERT语句产生一个错误,除非你明确地为所有要求非NULL值的列指定值。为了禁止使用缺省值,这样运行configure:< br /> # CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure< br />< br /> * 缺省地,MySQL使用ISO-8859-1(Latin1)字符集。为了改变缺省设置,使用--with-charset选项目:< br />< br /> #./configure -- with-charset= gb2312< br /> CHARSET可以是big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312 gbk、german1、hebrew、 hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7、win1251或win1251ukr之一。注意:如果你想要改变字符集,你必须在配置期间做make distclean!如果你想在服务器和客户之间变换字符,你应该看一下SET OPTION CHARACTER SET命令。如果你在创建了任何数据库表之后改变字符集,你将必须对每个表运行myisamchk -r -q,否则你的索引可能不正确地排序。(如果你安装了MySQL,创建一些表,然后重新配置MySQL使用一个不同的字符集并且重新安装它,这时就可能发生这种情况。)< br />< br /> * 为了配置MySQL带有调试代码,使用--with-debug选项:< br />< br /> #./configure --with-debug< br /> 这导致包含一个安全的内存分配器,能发现一些错误和并提供关于正在发生的事情的输出。< br />< br /> 2.编译Mysql:< br />< br /> 配置完Mysql就可以进行编译了< br />< br /> #make< br />< br /> 3.安装Mysql:< br />< br /> #make install< br />< br /> 这步系统会把mysql安装到指定的位置,我们假设系统把mysql安装到了/usr/local/下,到这就完成了Mysql系统的源码方式配置、编译和安装了。< br />< br /> 3.3.用RPM包进行安装< br />< br /> 除了使用mysql的源码安装外,Mysql还提供了RPM方式http://www.downcc.com/tech/131.htmlMySQL2009/05/11 10:59:22<p>丢了密码是非常痛心的事情,尤其是root密码丢了:( 。自己装装玩的丢了也就丢了,但是万一是服务器挂了麻烦可就大了!现在假设是由于被入侵造成的root密码丢失。这里我谈一下我自己对这样一个问题的看法。首先遇到这种问题我们没有必要慌张,整个恢复过程也是很简单的。</p>< p>1 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的。</p>< p>2 重命名自己的mysql的data目录下的mysql文件夹为oldmysql。</p>< p>3 将源码包中data目录下的mysql目录复制到你的mysql的data目录下。</p>< p>4 重新启动mysql,现在mysql的授权关系同全新安装的一样,空密码登陆,然后自行调整授权。</p>< p>5 打开oldmysql这个库检查到底出现了什么问题。</p>< p>6 如果有备份对系统中原有的数据库进行完整性检测,以免被人修改。</p>< p>通过上述6个步骤已经可以完全恢复你对mysql的控制,重点就是最后两步检查对方对改了那些权限,以及数据的完整性检测。</p>http://www.downcc.com/tech/130.htmlOracle2009/05/09 17:51:40<p>  1. 数据文件损坏</p>< p>  这种情况可以用最近所做的数据库文件备份进行恢复,即将备份中的对应文件恢复到原来位置,重新加载数据库。</p>< p>  2. 控制文件损坏</p>< p>  若数据库系统中的控制文件损坏,则数据库系统将不能正常运行,那么,只须将数据库系统关闭,然后从备份中将相应的控制文件恢复到原位置,重新启动数据库系统。</p>< p>  3. 整个文件系统损坏</p>< p>  在大型的操作系统中,如UNIX,由于磁盘或磁盘阵列的介质不可靠或损坏是经常发生的,这将导致整个Oracle数据库系统崩溃,这种情形只能:</p>< p>  &middot;将磁盘或磁盘阵列重新初始化,去掉失效或不可靠的坏块。</p>< p>  &middot;重新创建文件系统。</p>< p>  &middot;利用备份将数据库系统完整地恢复。</p>< p>  &middot;启动数据库系统。</p>< p>  <strong>三、建立Oracle的审计机制</strong></p>< p>  Oracle的审计机制是用来监视用户对ORACLE数据库所做的各种操作。在缺省情况下,系统的审计功能是关闭的。激活的办法是,在INIT.ORA参数文件中,将参数AUDIT_TRAIL设置为正整数。</p>< p>  审计功能激活后,任何拥有表或视图的用户就可以进行如下审计操作:</p>< p>  &middot;使用SQL语句来挑选审计选择项;</p>< p>  &middot;审计对该用户所拥有的表或视图的成功或不成功的存取企图;</p>< p>  &middot;有选择的审计各种类型的SQL操作(SELECT、UPDATE、INSERT、DELETE);</p>< p>  &middot;控制审计的程度(是以SESSION还是ACCESS为单位)。</p>< p>  另外,对于DBA用户还可以以下审计功能:</p>< p>  &middot;对成功的LOGON、LOGOFF、GRANT、REVOKE进行审计;</p>< p>  &middot;允许或禁止向审计追踪表寄数据;</p>< p>  &middot;为某些数据库表设定缺省选择项。</p>http://www.downcc.com/tech/129.htmlOracle2009/05/09 17:49:36<p>  (一)ORACLE数据库的备份</p>< p>  日常工作中,数据库的备份是数据库管理员必须不断要进行的一项工作,Oracle 7数据库的备份主要有以下几种方式:</p>< p>  1. 逻辑备份</p>< p>  逻辑备份就是将某个数据库的记录读出并将其写入到一个文件中,这是经常使用的一种备份方式。</p>< p>  &middot;export(导出):此命令可以将某个数据文件、某个用户的数据文件或整个数据库进行备份。</p>< p>  &middot;import(导入):此命令将export建立的转储文件读入数据库系统中,也可按某个数据文件、用户或整个数据库进行。</p>< p>  2. 物理备份</p>< p>  物理备份也是数据库管理员经常使用的一种备份方式。它可以对Oracle数据库的所有内容进行拷贝,方式可以是多种,有脱机备份和联机备份,它们各有所长,在实际中应根据具体情况和所处状态进行选择。</p>< p>  &middot;脱机备份</p>< p>  其操作是在Oracle数据库正常关闭后,对Oracle数据库进行备份,备份的内容包括:所有用户的数据库文件和表;所有控制文件;所有的日志文件;数据库初始化文件等。可采取不同的备份方式,如:利用磁带转储命令(tar)将所有文件转储到磁带上,或将所有文件原样复制(copy,rcp)到另一个备份磁盘中或另一个主机的磁盘中。</p>< p>  &middot;联机备份</p>< p>  这种备份方式也是切实有效的,它可以将联机日志转储归挡,在 Oracle数据库内部建立一个所有进程和作业的详细准确的完全记录。</p>< p>  物理备份的另一个好处是可将Oracle数据库管理系统完整转储, 一旦发生故障,可以方便及时地恢复,以减少数据库管理员重新安装Oracle带来的麻烦。</p>< p>  (二)数据库系统的恢复</p>< p>  有了上述几种备份方法,即使计算机发生故障,如介质损坏、软件系统异常等情况时,也不必惊慌失措,可以通过备份进行不同程度的恢复,使Oracle数据库系统尽快恢复到正常状态。</p>http://www.downcc.com/tech/128.htmlOracle2009/05/09 17:46:51<p>  Oracle数据库以其优异的性能在各个领域得到广泛应用。但由于计算机软、硬件故障、 口令泄密、黑客攻击等等因素,都可导致数据库系统不能正常运转,造成大量数据信息丢失,数据被恶意篡改,甚至使数据库系统崩溃。忽视Oracle数据库的安全问题,必将给用户带来巨大的损失。如何保证数据库的安全运行是数据库管理员日常工作中的首要问题。下面提出几条防范措施供大家参考:</p>< p>  <strong>一、用户角色的管理与口令保密</strong></p>< p>  这是保护数据库系统安全的重要手段之一。它通过建立不同的用户组和用户口令验证,可以有效地防止非法的Oracle用户进入数据库系统,造成不必要的麻烦和损坏;另外在Oracle数据库中,可以通过授权来对Oracle用户的操作进行限制,即允许一些用户可以对Oracle服务器进行访问,也就是说对整个数据库具有读写的权利,而大多数用户只能在同组内进行读写或对整个数据库只具有读的权利。在此,特别强调对SYS和SYSTEM两个特殊账户的保密管理。Oracle的数据库管理员都知道,数据库系统典型安装后,一般sys和system以及internal这三个用户具有默认的口令,数据库安装成功后,系统管理员作的第一件工作就是修改这些用户的口令,保证数据库的安全性。</p>< p>  为了加强数据库在网络中的安全性,对于远程用户,应使用加密方式通过密码来访问数据库,加强网络上的DBA权限控制,如拒绝远程的DBA访问等。</p>< p>  <strong>二、数据保护</strong></p>< p>  数据库的数据保护主要是数据库的备份,当计算机的软硬件发生故障时,利用备份进行数据库恢复,以恢复破坏的数据库文件或控制文件或其他文件。</p>< p>  另一种数据保护就是日志,Oracle数据库实例都提供日志,用以记录数据库中所进行的各种操作,包括修改、调整参数等,在数据库内部建立一个所有作业的完整记录。</p>< p>  再一个就是控制文件的备份,它一般用于存储数据库物理结构的状态,控制文件中的某些状态信息在实例恢复和介质恢复期间用于引导Oracle数据库。</p>http://www.downcc.com/tech/127.htmlOracle2009/05/09 17:40:37<p>  OracleEnterpriseManager(Oracle企业管理器,简称OEM)是通过一组Oracle程序,为管理分布式环境提供了管理服务。OEM包括了一组DBA工具,一个repository,以及一个图形化显示的控制台。OEM控制台与每一个服务器上的智能化代理(IntelligentAgent)相对应。</p>< p>  智能化代理能够监控系统的特定事件并且执行任务(作业)就象你在系统本地一样。事件和作业的结果会被送回控制台,这样可以在一个地方管理所有的系统。< br />< br /> OEM与ServerManagerMotif相比,有以下优点:< br />  1)从适用范围看,OEM可以同时监控管理多个系统上的多个数据库,因而特别适合分布式环境;而ServerManager只能监控管理一个数据库。< br />  2)从管理对象看,OEM可以监控管理节点,数据库和监听进程(listener),而ServerManager只能监控数据库。< br />  3)从适用版本看,OEM可以同时监控管理Oracle7.x和8.x,而从8版开始,ServerManager已不存在。< br />< br />< br /> 本文主要介绍一些OEM的常见问题及其解决方法。< br />   Q:OEM数据库工具组的功能是什麽?< br />   A:OEM数据库工具组是一组使DBA能够通过GUI界面管理Oracle数据库的工具。包括以下工具:< br />   DataManager(数据管理器):这工具使你能够象加载数据一样执行数据的export/import。< br />   SchemaManager:这工具使你能够在数据库中管理对象。可以用于创建,修改,和删除tables,indexes,views,snapshots,sequences等等。< br />   SecurityManager(安全性管理器):这工具使你能够管理用户,角色,权限及profiles。< br />   StorageManager(存储管理器):这工具允许你创建和修改表空间,数据文件和回滚段.< br />   InstanceManager(实例管理器):这工具允许你关闭,启动实例并且存储和管理数据库参数。< br />   SQL*Worksheet:这工具使你能够运行或创造SQL脚本并且存储在硬盘上。你能使用这工具重现最后执行的语句;同时,检查显示到屏幕上的执行结果。< br />   BackupManager(备份管理器):这工具允许你管理备份和恢复为Oracle7和Oracle8数据库。在Oracle7此工具支持EnterpriseBackupUtility(EBU), 在Oracle8此工具支持恢复管理器RecoveryManager。< br />   SoftwareManager(软件管理器):这允许你将远程软件安装到支持这一特性的远程服务器。< br />   < br />   Q:作业状态一直为提交,未变为预定(scheduled)。< br />   A:作业在OEM控制台创建并且到被通过SQL*net送至智能化代理。一旦当智能化代理接受作业请求,会发送一个通知回到OEM控制台,状态变化到&quot;预定&quot;。如果状态从未从提交变化到预定,那代理程序可能没有收到作业请求。< br />   确定代理程序是否已经启动,确定SQL*net和OEM是否已经适当配置。< br />   < br />   Q:作业状态一直为预定,未变为运行< br />   A:当代理程序开始运行作业的时候,会发送一个通知回到OEM控制台,状态变化到&quot;已发送&quot;或&quot;启动&quot;。如果作业状态一直为预定而无变化,那可能是代理程序不能打开一个socket回到OEM控制台,原因可能是TCP/IP问题或代理程序没有足够权限去派生一个进程来运行作业。< br />   在服务器端使用主机名来Ping控制台,以此确定TCP/IP不存在问题;确认运行作业的数据库用户具有dba,connect,resource权限。< br />   < br />   Q:运行作业出错,错误信息为:&quot;FailedtoAuthenticateUser&quot;。< br />   A:在NT系统上,你必须把&quot;Logonasabatchjob&quot;权限授予登录用户,然后在OEMPreferredCredentials中设置此用户。如果代理程序是一个7.3.x的代理程序,那这个用户必须是一个本地的NT用户,不能为一个DOMAIN用户。< br />   在Unix系统上,代理程序的权限应为:-rwsr-xr-xrootdba dbsnmp&quot;s&quot;权限意味着dbsnmp进程将用root用户的权限运行。当这权限设置以后,作业将由在OEM控制台的PreferredCredentials窗口中设置的用户运行。<br />< br />   确认在OEM控制台的PreferredCredentials窗口中设置的用户在服务器上有合适的登录权利。< br />   < br />   Q:客户能创建自己定义的事件吗?< br />   A:在OEM1.x中,客户不能创建自己定义的事件。这将是OEM2.x的一个新特性。< br />   然而,你能创建一个运行TCL脚本的作业,能通过使用TCL命令orareportevent触发一个事件。有关orareportevent的进一步信息,请参阅OEM应用开发者手册< br />< br />   Q:在控制台上,数据库显示为红色的圆圈和斜线,表示数据库已关闭;然而,数据库是正在运行的。< br />   A:如果数据库,监听进程或节点显示为红色的圆圈和斜线,OEM控制台是在试图通知你服务已关闭。如果服务未关闭,你需要在事件窗口中单击&quot;OutstandingEventstab&quot;并将通知移动至历史记录,这应该从导航(navigator)和地图(map)窗口中清除关闭提示。< br />   < br />   Q:怎样创建OEMRepository?< br />   A:OEMRepository是在Oracle7或Oracle8数据库中的一组表,这些表存储了通过OEM控制台图形化浏览的信息。在OEM1.x结构中,这些表存储在一个特定的用户下并且不能与另外的用户共享。在OEM1.2.x,应该用一个非&quot;system&quot;用户登录来运行脚本SMPCRE.SQL,此用户必须有connect,,resource和dba权限。在OEM1.3.x,初次激活OEM控制台图标时将自动地创建Repository。如果已存在一个早期版本repository,会提示更新表;如果没有OEM表,会提示创建表。< br />   < br />   Q:怎样自定义OEM工具栏?< br />   A:如果要设定OEM工具栏,应在工具栏上按右键;选择Customizetab。你能编辑工具栏项目的名字,删除项目,或添加项目。如果在Databasetab上单击,可以进入logoncredentials,为每数据库选择一个默认值输入项.< br />< br />< br />   Q:当登录至OEM控制台时,得到以下错误信息:< br />   VOC-00002:Failuretoobtaininterfacelogin< br />   A:原因是OEM通信后台进程不能打开一个与Repository的连接。< br />   确认TCP/IP配置正确,以及是否通信后台进程的缺省参数已被修改(使用DaemonManager)。< br />   < br />   Q:当使用OEM控制台时,得到以下错误信息:< br />   VOC-00107:FailuresettingcredentialdetailsORA-03114:Not connectedtoORACLE< br />   A:原因是OEMRepository所在数据库已关机,或是连接数据库的服务发生了网络故障。< br />   < br />   Q:当使用SYSDBA登录至OEM控制台时,得到以下错误信息:< br />   VOC-00121:Failureupdatingorinsertingauserdetailentry ORA-00942:Tableorviewdoesnotexist< br />   A:用户登录至OEM控制台的缺省角色是NORMAL,如果你需要作为SYSDBA连接,应该在PreferredCredentials窗口中设置CONNECTASSYSDBA选项。&nbsp;</p>http://www.downcc.com/tech/126.htmlOracle2009/05/09 17:25:48<p>ALTER DATABASE DATAFILE'd:ORANTDATABASEUSER1ORCL.ORA' RESIZE 1000M;<br /> CREATE TABLESPACE INDEX_DATA DATAFILE'd:ORANTDATABASEINDEX_DATA' SIZE 500M;<br /> ALTER DATABASE DATAFILE'd:ORANTDATABASERBS1ORCL.ORA' RESIZE 300M;<br /> ALTER DATABASE DATAFILE'd:ORANTDASTABASETMP1ORCL.ORA' RESIZE 300M;<br />< br /> alter rollback segment& quot;RB1&quot; offline;<br /> alter rollback segment& quot;RB2&quot; offline;<br /> alter rollback segment& quot;RB3&quot; offline;<br /> alter rollback segment& quot;RB4&quot; offline;<br /> alter rollback segment& quot;RB5&quot; offline;<br /> alter rollback segment& quot;RB6&quot; offline;<br /> alter rollback segment& quot;RB7&quot; offline;<br /> alter rollback segment& quot;RB8&quot; offline;<br /> alter rollback segment& quot;RB9&quot; offline;<br /> alter rollback segment& quot;RB10&quot; offline;<br /> alter rollback segment& quot;RB11&quot; offline;<br /> alter rollback segment& quot;RB12&quot; offline;<br /> alter rollback segment& quot;RB13&quot; offline;<br /> alter rollback segment& quot;RB14&quot; offline;<br /> alter rollback segment& quot;RB15&quot; offline;<br /> alter rollback segment& quot;RB16&quot; offline;<br />< br /> drop rollback segment& quot;RB1&quot;;<br /> drop rollback segment& quot;RB2&quot;;<br /> drop rollback segment& quot;RB3&quot;;<br /> drop rollback segment& quot;RB4&quot;;<br /> drop rollback segment& quot;RB5&quot;;<br /> drop rollback segment& quot;RB6&quot;;<br /> drop rollback segment& quot;RB7&quot;;<br /> drop rollback segment& quot;RB8&quot;;<br /> drop rollback segment& quot;RB9&quot;;<br /> drop rollback segment& quot;RB10&quot;;<br /> drop rollback segment& quot;RB11&quot;;<br /> drop rollback segment& quot;RB12&quot;;<br /> drop rollback segment& quot;RB13&quot;;<br /> drop rollback segment& quot;RB14&quot;;<br /> drop rollback segment& quot;RB15&quot;;<br /> drop rollback segment& quot;RB16&quot;;<br />& nbsp;&nbsp;<br /> create rollback segment& quot;RB1&quot; tablespace& quot;ROLLBACK_DATA&quot; storage (initial 1m next 1m);<br /> create rollback segment& quot;RB2&quot; tablespace& quot;ROLLBACK_DATA&quot; storage (initial 1m next 1m);<br /> create rollback segment& quot;RB3&quot; tablespace& quot;ROLLBACK_DATA&quot; storage (initial 1m next 1m);<br /> create rollback segment& quot;RB4&quot; tablespace& quot;ROLLBACK_DATA&quot; storage (initial 1m next 1m);<br /> create rollback segment& quot;RB5&quot; tablespace& quot;ROLLBACK_DATA&quot; storage (initial 1m next 1m);<br /> create rollback segment& quot;RB6&quot; tablespace& quot;ROLLBACK_DATA&quot; storage (initial 1m next 1m);<br />< br />< br /> alter rollback segment& quot;RB1&quot; online;<br /> alter rollback segment& quot;RB2&quot; online;<br /> alter rollback segment& quot;RB3&quot; online;<br /> alter rollback segment& quot;RB4&quot; online;<br /> alter rollback segment& quot;RB5&quot; online;<br /> alter rollback segment& quot;RB6&quot; online;<br />< br />< br /> alter database add logfile 'c:orantdatabaselog1.ora' size 10m;<br /> alter database add logfile 'c:orantdatabaselog2.ora' size 10m;<br /> alter database add logfile 'c:orantdatabaselog3.ora' size 10m;<br /> alter database add logfile 'c:orantdatabaselog4.ora' size 10m;<br /> alter database drop logfile 'c:orantdatabaselog1orcl.ora';<br /> alter database drop logfile 'c:orantdatabaselog2orcl.ora';<br /> alter database drop logfile 'c:orantdatabaselog3orcl.ora';<br /> alter database drop logfile 'c:orantdatabaselog4orcl.ora';<br />< br />< br /> INITORAL.ORA配置:<br /> SGA=db_block_buffers*db_block_size+share_pool_size+log_buffers+sort_arer_size+1m<br />& nbsp;& nbsp;=1/3--1/2<br /> 以128M为例:<br />< br />< br />< br /> DB_BLOCK_BUFFERS=16000(db_block_size=2k)<br /> SHARE_POOL_SIZE=30720000(服务器要增大10倍)<br /> LOG_BUFFERS=655360<br /> SORT_AREA_SIZE=327680(服务器要增大100倍)----------添加<br /> GLOBAL_NAME=FALSE<br /> ROLLBACK_SEGEMENTS=(RB1,RB2)//一般大型数据库要建立6-8个回滚段<br />< br /> 添加:<br /> DML_LOCKS=1000<br /> OPEN_CURSORS=200</p>http://www.downcc.com/tech/66.htmlOracle2009/04/16 01:46:56<p>一、概论  &nbsp;< br />< br /> ORACLE&nbsp;是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。&nbsp;< br />< br /> 二、特点&nbsp;&nbsp;<br />< br /> 1、ORACLE7.X以来引入了共享SQL和多线索服务器体系结构。这减少了ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。&nbsp;&nbsp;<br />< br /> 2、提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。&nbsp;&nbsp;<br />< br /> 3、支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。&nbsp;&nbsp;<br />< br /> 4、提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如&nbsp;POWER&nbsp;BUILD、SQL*FORMS、VISIA&nbsp;BASIC&nbsp;等,可以快速开发生成基于客户端PC&nbsp;平台的应用程序,并具有良好的移植性。&nbsp;< br />< br /> 5、提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。&nbsp;< br />< br /> 三、存储结构&nbsp;< br />< br /> 1、物理结构&nbsp;< br />< br /> ORACLE数据库在物理上是存储于硬盘的各种文件。它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化。&nbsp;< br />< br /> 2、逻辑结构&nbsp;< br />< br /> ORACLE数据库在逻辑上是由许多表空间构成。主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数据、索引、程序等相关信息。我们准备上马一个较大的ORACLE应用系统时,应该创建它所独占的表空间,同时定义物理文件的存放路径和所占硬盘的大小。&nbsp;&nbsp;< br />< br /> 四、分布式数据库管理介绍&nbsp;< br />< br /> 1、原理&nbsp;&nbsp;<br />< br /> 物理上存放于网络的多个ORACLE数据库,逻辑上可以看成一个单个的大数据库。用户可以通过网络对异地数据库中的数据同时进行存取,而服务器之间的协同处理对于工作站用户及应用程序而言是完全透明的:开发人员无需关心网络的连接细节、无需关心数据在网络接点中的具体分布情况、也无需关心服务器之间的协调工作过程。&nbsp;< br />< br /> 2、过程&nbsp;&nbsp;<br />< br /> 由网络相连的两个ORACLE数据库之间通过数据库链接(DB-LINKS)建立访问机制,&nbsp;相当于一方以另一方的某用户远程登录所做的操作。但ORACLE采用的一些高级管理方法,如同义词(SYNONME)等使我们觉察不到这个过程,似乎远端的数据就在本地。数据库复制技术包括:实时复制、定时复制、储存转发复制。对复制的力度而言,&nbsp;有整个数据库表的复制,表中部分行的复制。在复制的过程中,有自动冲突检测和解决的手段。&nbsp;</p>http://www.downcc.com/tech/65.htmlOracle2009/04/16 01:43:31<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>操作符优化</strong></p>< p>&nbsp;&nbsp;&nbsp;&nbsp;<b>IN< /b><b>操作符</b></p>< p>&nbsp;&nbsp;&nbsp;&nbsp;用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案:在业务密集的SQL当中尽量不采用IN操作符。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;<b>NOT IN</b><b>操作符</b></p>< p>&nbsp;&nbsp;&nbsp;&nbsp;此操作是强列推荐不使用的,因为它不能应用表的索引。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案:用NOT EXISTS 或(外连接+判断为空)方案代替</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;<b>&lt;&gt;< /b><b>操作符(不等于)</b></p>< p>&nbsp;&nbsp;&nbsp;&nbsp;不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案:用其它相同功能的操作运算代替,如</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;a&lt;&gt;0 改为 a&gt;0 or a&lt;0</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;a&lt;&gt;&rsquo;&rsquo; 改为 a&gt;&rsquo;&rsquo;</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;<b>IS NULL< /b><b>或IS NOT NULL</b><b>操作(判断字段是否为空)</b></p>< p>&nbsp;&nbsp;&nbsp;&nbsp;判断字段是否为空一般是不会应用索引的,因为B树索引是不索引空值的。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案:</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;用其它相同功能的操作运算代替,如</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;a is not null 改为 a&gt;0 或a&gt;&rsquo;&rsquo;等。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;不允许字段为空,而用一个缺省值代替空值,如业扩申请中状态字段不允许为空,缺省为申请。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;建立位图索引(有分区的表不能建,位图索引比较难控制,如字段值太多索引会使性能下降,多人更新操作会增加数据块锁的现象)</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;<b>&gt;< /b><b>及& lt;< /b><b>操作符(大于或小于操作符)</b></p>< p>&nbsp;&nbsp;&nbsp;&nbsp;大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A&gt;2与A&gt;=3的效果就有很大的区别了,因为A&gt;2时ORACLE会先找出为2的记录索引再进行比较,而A&gt;=3时ORACLE则直接找到=3的记录索引。</p>< p>&nbsp;&nbsp;&nbsp;&nbsp;<b>LIKE</b><b>操作符</b></p>< p>&nbsp;&nbsp;&nbsp;&nbsp;LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE& lsquo;%5400%&rsquo; 这种查询不会引用索引,而LIKE& lsquo;X5400%&rsquo;则会引用范围索引。一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE& lsquo;%5400%&rsquo; 这个条件会产生全表扫描,如果改成YY_BH LIKE& rsquo;X5400%&rsquo; OR YY_BH LIKE& rsquo;B5400%&rsquo; 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。</p>http://www.downcc.com/tech/63.htmlMySQL2009/04/15 16:08:49<p><span >写了一个Mysql备份的脚本,大家看看,有什么不妥地方。< br />< br /> 这是我写的第一个Shell脚本,大家帮忙看看,< br />< br /> 有谁需要的,我可以发给他。< br />< br /> 可以将这个脚本放进crontab,每天凌晨执行一次,自动备份< br />< br /> 这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上。< br />< br />< /span>< table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">< tbody>< tr>< td><span >代码:</span></td>< /tr>< tr>< td ><br />< br /> #!/bin/bash< br /> #This is a ShellScript For Auto DB Backup< br /> #Powered by aspbiz< br /> #2004-09< br />< br /> #Setting< br /> #设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,以及备份方式< br /> #默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy< br /> #默认情况下,用root(空)登录mysql数据库,备份至/root/dbxxxxx.tgz< br /> DBName=mysql< br /> DBUser=root< br /> DBPasswd=< br /> BackupPath=/root/< br /> LogFile=/root/db.log< br /> DBPath=/var/lib/mysql/< br /> #BackupMethod=mysqldump< br /> #BackupMethod=mysqlhotcopy< br /> #BackupMethod=tar< br /> #Setting End< br />< br />< br /> NewFile=&quot;$BackupPath&quot;db$(date +%y%m%d).tgz< br /> DumpFile=&quot;$BackupPath&quot;db$(date +%y%m%d)< br /> OldFile=&quot;$BackupPath&quot;db$(date +%y%m%d --date='5 days ago').tgz< br />< br /> echo& quot;-------------------------------------------&quot;& gt;&gt; $LogFile< br /> echo $(date +&quot;%y-%m-%d %H:%M:%S&quot;)& gt;&gt; $LogFile< br /> echo& quot;--------------------------&quot;& gt;&gt; $LogFile< br /> #Delete Old File< br /> if [ -f $OldFile ]< br /> then< br />& nbsp;& nbsp;rm -f $OldFile& gt;&gt; $LogFile 2&gt;&amp;1< br />& nbsp;& nbsp;echo& quot;[$OldFile]Delete Old File Success!&quot;& gt;&gt; $LogFile< br /> else< br />& nbsp;& nbsp;echo& quot;[$OldFile]No Old Backup File!&quot;& gt;&gt; $LogFile< br /> fi< br />< br /> if [ -f $NewFile ]< br /> then< br />& nbsp;& nbsp;echo& quot;[$NewFile]The Backup File is exists,Can't Backup!&quot;& gt;&gt; $LogFile< br /> else< br />& nbsp;& nbsp;case $BackupMethod in< br />& nbsp;& nbsp;mysqldump)< br />& nbsp;& nbsp;& nbsp; if [ -z $DBPasswd ]< br />& nbsp;& nbsp;& nbsp; then< br />& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;mysqldump -u $DBUser --opt $DBName& gt; $DumpFile< br />& nbsp;& nbsp;& nbsp; else< br />& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;mysqldump -u $DBUser -p$DBPasswd --opt $DBName& gt; $DumpFile< br />& nbsp;& nbsp;& nbsp; fi< br />& nbsp;& nbsp;& nbsp; tar czvf $NewFile $DumpFile& gt;&gt; $LogFile 2&gt;&amp;1< br />& nbsp;& nbsp;& nbsp; echo& quot;[$NewFile]Backup Success!&quot;& gt;&gt; $LogFile< br />& nbsp;& nbsp;& nbsp; rm -rf $DumpFile< br />& nbsp;& nbsp;& nbsp; ;;< br />& nbsp;& nbsp;mysqlhotcopy)< br />& nbsp;& nbsp;& nbsp; rm -rf $DumpFile< br />& nbsp;& nbsp;& nbsp; mkdir $DumpFile< br />& nbsp;& nbsp;& nbsp; if [ -z $DBPasswd ]< br />& nbsp;& nbsp;& nbsp; then< br />& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;mysqlhotcopy -u $DBUser $DBName $DumpFile& gt;&gt; $LogFile 2&gt;&amp;1< br />& nbsp;& nbsp;& nbsp; else< br />& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile& gt;&gt;$LogFile 2&gt;&amp;1< br />& nbsp;& nbsp;& nbsp; fi< br />& nbsp;& nbsp;& nbsp; tar czvf $NewFile $DumpFile& gt;&gt; $LogFile 2&gt;&amp;1< br />& nbsp;& nbsp;& nbsp; echo& quot;[$NewFile]Backup Success!&quot;& gt;&gt; $LogFile< br />& nbsp;& nbsp;& nbsp; rm -rf $DumpFile< br />& nbsp;& nbsp;& nbsp; ;;< br />& nbsp;& nbsp;*)< br />& nbsp;& nbsp;& nbsp; /etc/init.d/mysqld stop& gt;/dev/null 2&gt;&amp;1< br />& nbsp;& nbsp;& nbsp; tar czvf $NewFile $DBPath$DBName& gt;&gt; $LogFile 2&gt;&amp;1< br />& nbsp;& nbsp;& nbsp; /etc/init.d/mysqld start& gt;/dev/null 2&gt;&amp;1< br />& nbsp;& nbsp;& nbsp; echo& quot;[$NewFile]Backup Success!&quot;& gt;&gt; $LogFile< br />& nbsp;& nbsp;& nbsp; ;;< br />& nbsp;& nbsp;esac< br /> fi< br />< br /> echo& quot;-------------------------------------------&quot;& gt;&gt; $LogFile< br />& nbsp;</td>< /tr>< /tbody>< /table>< /p>http://www.downcc.com/tech/62.htmlMySQL2009/04/15 16:05:49<p>mysql的最大连接数默认是100,&nbsp;这个数值对于并发连接很多的数据库应用是远远不够的,可以把它适当调大,&nbsp;whereis&nbsp;safe_mysqld&nbsp;找到safe_mysqld的位置,然后编辑它,找到mysqld启动的那两行,在后面加上参数&nbsp; -O&nbsp;max_connections=1000&nbsp;< br /> 例如&nbsp;< br /> ---&nbsp;safe_mysqld.orig&nbsp;Mon&nbsp;Sep&nbsp;25&nbsp;09:34:01&nbsp;2000&nbsp;< br /> +++&nbsp;safe_mysqld&nbsp;Sun&nbsp;Sep&nbsp;24&nbsp;16:56:46&nbsp;2000&nbsp;< br /> @@&nbsp;-109,10&nbsp;+109,10&nbsp;@@&nbsp;< br /> if&nbsp;test&nbsp;&quot;$#&quot;&nbsp;-eq&nbsp;0&nbsp;< br /> then&nbsp;< br /> nohup&nbsp;$ledir/mysqld&nbsp;--basedir=$MY_BASEDIR_VERSION&nbsp;--datadir=$DATADIR&nbsp;\&nbsp;< br /> -&nbsp;--skip-locking&nbsp;&gt;&gt;&nbsp;$err_log&nbsp;2&gt;&amp;1&nbsp;< br /> +&nbsp;--skip-locking&nbsp;-O&nbsp;max_connections=1000&nbsp;&gt;&gt;&nbsp;$err_log&nbsp;2&gt;&amp;1&nbsp;< br /> else&nbsp;< br /> nohup&nbsp;$ledir/mysqld&nbsp;--basedir=$MY_BASEDIR_VERSION&nbsp;--datadir=$DATADIR&nbsp;\&nbsp;< br /> -&nbsp;--skip-locking&nbsp;&quot;$@&quot;&nbsp;&gt;&gt;&nbsp;$err_log&nbsp;2&gt;&amp;1&nbsp;< br /> +&nbsp;--skip-locking&nbsp;&quot;$@&quot;&nbsp;-O&nbsp;max_connections=1000&nbsp;&gt;&gt;&nbsp;$err_log&nbsp;2&gt;&amp;1&nbsp;< br /> fi&nbsp;< br /> if&nbsp;test&nbsp;!&nbsp;-f&nbsp;$pid_file&nbsp;#&nbsp;This&nbsp;is&nbsp;removed&nbsp;if&nbsp;normal&nbsp;shutdown&nbsp;< br /> then&nbsp;< br /> 然后关闭mysql重启它,用&nbsp; /mysqladmin所在路径/mysqladmin&nbsp;-uroot&nbsp;-p&nbsp;variables&nbsp;< br /> 输入root数据库账号的密码后可看到&nbsp; |&nbsp;max_connections&nbsp;|&nbsp;1000&nbsp;|&nbsp;< br /> 即新改动已经生效。</p>http://www.downcc.com/tech/61.htmlMySQL2009/04/15 16:02:46<p>有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如< br /> 检查优化并修复所有的数据库用:< br /> # mysqlcheck -A -o -r -p< br /> Enter password:< br /> guestbook.simpgb_avatars OK< br /> guestbook.simpgb_bad_words OK< br /> guestbook.simpgb_banlist OK< br /> guestbook.simpgb_data OK< br /> ......< br /> ......< br /> ......< br /> 修复指定的数据库用< br /> # mysqlcheck -A -o -r Database_NAME -p< br /> 即可</p>http://www.downcc.com/tech/60.htmlMySQL2009/04/15 15:59:38<p>   字段类型&nbsp;&nbsp;<br />    1.INT[(M)]&nbsp;&nbsp;<br />< br />    正常大小整数类型< br />< br />    2.DOUBLE[(M,D)] [ZEROFILL]&nbsp;&nbsp;<br />< br />    正常大小(双精密)浮点数字类型< br />< br />    3.DATE&nbsp;&nbsp;<br />< br />    日期类型。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列< br />< br />    4.CHAR(M)&nbsp;&nbsp;<br />< br />    定长字符串类型,当存储时,总是是用空格填满右边到指定的长度< br />< br />    5.BLOB TEXT&nbsp;&nbsp;<br />< br />    BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。< br />< br />    6.VARCHAR< br />< br />    变长字符串类型。&nbsp;&nbsp;<br />< br />    1: 显示数据库&nbsp;&nbsp;<br />  &nbsp;&nbsp;<br />    SHOW DATABAS,&nbsp;&nbsp;<br />< br />    2:当前选择的数据库,&nbsp;&nbsp;<br />< br />    mysql&gt; SELECT DATABASE();&nbsp;&nbsp;<br />    +------------+&nbsp;&nbsp;<br />    | DATABASE() |&nbsp;&nbsp;<br />    +------------+&nbsp;&nbsp;<br />    | test ;&nbsp;&nbsp;<br />    +------------+&nbsp;&nbsp;<br />    | DATABASE() |&nbsp;&nbsp;<br />    +------------+&nbsp;&nbsp;<br />    | test    |&nbsp;&nbsp;<br />    +------------+&nbsp;&nbsp;<br />< br />    当前数据库包含的表信息:&nbsp;&nbsp;<br />< br />    mysql&gt; SHOW TABLES;&nbsp;&nbsp;<br />    +---------------------+&nbsp;&nbsp;<br />    | Tables in test &nbsp;&nbsp;<br />    mysql&gt; SHOW TABLES;&nbsp;&nbsp;<br />    +---------------------+&nbsp;&nbsp;<br />    | Tables in test   |&nbsp;&nbsp;<br />    +---------------------+&nbsp;&nbsp;<br />    | mytable1      |&nbsp;&nbsp;<br />    | mytable2      |&nbsp;&nbsp;<br />    +---------------------+&nbsp;&nbsp;<br />< br />    获取表结构&nbsp;&nbsp;<br />< br />    mysql&gt; desc mytable1;&nbsp;&nbsp;<br />    +---------+-------------+------+-----+---------+-------+&nbsp;&nbsp;<br />    | Field  mysql&gt; desc mytable1;&nbsp;&nbsp;<br />    +---------+-------------+------+-----+---------+-------+&nbsp;&nbsp;<br />    | Field  | Type  | Null | Key | Default | Extra |&nbsp;&nbsp;<br />    +---------+-------------+------+-----+---------+-------+&nbsp;&nbsp;<br />    | s1  | varchar(20) | YES |NULL  |    |&nbsp;&nbsp;<br />    +---------------------+------+-----+---------+-------+&nbsp;&nbsp;<br />< br />< br />< br />    5.导入数据库表&nbsp;&nbsp;<br />    (1)创建.sql文件< br />< br />    (2)先产生一个库如auction.c:mysqlbin&gt;mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。< br />< br />    (2)导入auction.sql文件< br />< br />    c:mysqlbin&gt;mysql -u root -p auction& lt; auction.sql。< br />< br />    通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction。< br />< br />    6.修改数据库< br />< br />    (1)在mysql的表中增加字段:< br />< br />    alter table dbname add column userid int(11) not null primary key auto_increment;< br />< br />    这样,就在表dbname中添加了一个字段userid,类型为int(11)。< br />< br />    7.mysql数据库的授权< br />< br />    mysql&gt;grant select,insert,delete,create,drop< br />< br />    on *.* (或test.*/user.*/..)< br />< br />    to 用户名@localhost< br />< br />    identified by '密码';< br />< br />    如:新建一个用户帐号以便可以访问数据库,需要进行如下操作:< br />< br />    mysql&gt; grant usage< br />< br />    -&gt; ON test.*< br />    -&gt; TO testuser@localhost;< br />    Query OK, 0 rows affected (0.15 sec)< br />< br />    此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些操作:< br />< br />    mysql&gt; GRANT select, insert, delete,update< br />    -&gt; ON test.*< br />    -&gt; TO testuser@localhost;< br />    Query OK, 0 rows affected (0.00 sec)< br />< br />    此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序:< br />< br />    mysql&gt; exit< br />    Bye&nbsp;&nbsp;</p>http://www.downcc.com/tech/59.htmlMySQL2009/04/15 15:56:05<p>  如何从一位菜鸟蜕变成为高手,灵活使用的SQL语句是必不可少的。本文收集了部分比较经典,常用的SQL语句供大家参考,希望对大家有所帮助。< br />< br />   说明:复制表(只复制结构,源表名:a 新表名:b)  < br />< br />   SQL: select * into b from a where 1&lt;&gt;1< br />< br />   说明:拷贝表(拷贝数据,源表名:a 目标表名:b)  < br />< br />   SQL: insert into b(a, b, c) select d,e,f from b;< br />< br />   说明:显示文章、提交人和最后回复时间  < br />< br />   SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b< br />< br />   说明:外连接查询(表名1:a 表名2:b)  < br />< br />   SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c< br />< br />   说明:日程安排提前五分钟提醒  < br />< br />   SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5  < br />< br />   说明:两张关联表,删除主表中已经在副表中没有的信息< br />< br />   SQL:   < br />< br />   delete from info where not exists ( select * from infobz where info.infid=infobz.infid< br />< br />   说明:--< br />< br />   SQL:   < br />< br />   SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE< br />< br />    FROM TABLE1,< br />< br />    (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE< br />< br />    FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND< br />< br />    FROM TABLE2< br />< br />    WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,< br />< br />    (SELECT NUM, UPD_DATE, STOCK_ONHAND< br />< br />    FROM TABLE2< br />< br />    WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =< br />< br />    TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM')& brvbar;&brvbar; '/01','YYYY/MM/DD') - 1, 'YYYY/MM') Y,< br />< br />    WHERE X.NUM = Y.NUM (+)< br />< br />    AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0)& lt;&gt; X.STOCK_ONHAND B< br />< br />   WHERE A.NUM = B.NUM< br />< br />   说明:--< br />< br />   SQL:   < br />< br />   select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='&quot;&amp;strdepartmentname&amp;&quot;' and 专业名称='&quot;&amp;strprofessionname&amp;&quot;' order by 性别,生源地,高考总成绩< br />< br />   说明:< br />< br />   从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)< br />< br />   SQL:  < br />< br />   SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,< br />< br />    SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC< br />< br />   FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration< br />< br />    FROM TELFEESTAND a, TELFEE b< br />< br />    WHERE a.tel = b.telfax) a< br />< br />   GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')< br />< br />   说明:四表联查问题:  < br />< br />   SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....< br />< br />   说明:得到表中最小的未使用的ID号< br />< br />   SQL: < br />< br />   SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID< br />< br />    FROM Handle< br />< br />    WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)</p>http://www.downcc.com/tech/51.htmlSQL Server2009/04/11 11:37:11<p>最近做一个项目(Asp.net+Sql Server 2000),在原来开发的机器上运行没有任何问题.但当我在另外一台机器上调试程序(本机调试)的时候,总出现&ldquo;SQL Server不存在或访问被拒绝&rdquo;。相信在任何一个搜索网站输入这样的检索词,一定会获得n多的页面。</p>< p>总结起来的关于SQL Server连接中此类四个最常见错误错误解决方案如下:</p>< p>一.&quot;SQL Server 不存在或访问被拒绝&quot;</p>< p>这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.</p>< p>一般说来,有以下几种可能性:</p>< p>1,SQL Server名称或IP地址拼写有误<br /> 2,服务器端网络配置有误<br /> 3,客户端网络配置有误</p>< p>要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因.</p>< p>============= 首先,检查网络物理连接 =============</p>< p>ping& lt;服务器IP地址/服务器名称&gt;</p>< p>如果 ping& lt;服务器IP地址&gt; 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等.<br /> 还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如 ISA Server.防火墙软件可能会屏蔽对 ping,telnet 等的响应<br /> 因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.</p>< p>如果ping& lt;服务器IP地址&gt; 成功而,ping& lt;服务器名称&gt; 失败<br /> 则说明名字解析有问题,这时候要检查 DNS 服务是否正常.<br /> 有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,<br /> 具体的方法是:</p>< p>1.使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc).<br /> 添加一条IP地址与服务器名称的对应记录,如:<br /> 172.168.10.24 myserver</p>< p>2.或在 SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明.</p>< p>============= 其次,使用 telnet 命令检查SQL Server服务器工作状态 =============<br /> telnet& lt;服务器IP地址&gt; 1433</p>< p>如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明 SQL Server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接<br /> 如果命令返回&quot;无法打开连接&quot;的错误信息,则说明服务器端没有启动 SQL Server 服务,<br /> 也可能服务器端没启用 TCP/IP 协议,或者服务器端没有在 SQL Server 默认的端口1433上监听.</p>< p>=============接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了 TCP/IP 协议等等 =============<br /> 可以利用 SQL Server 自带的服务器网络使用工具来进行检查.</p>< p>点击:程序 -- Microsoft SQL Server -- 服务器网络使用工具</p>< p>打开该工具后,在&quot;常规&quot;中可以看到服务器启用了哪些协议.<br /> 一般而言,我们启用命名管道以及 TCP/IP 协议.<br /> 点中 TCP/IP 协议,选择&quot;属性&quot;,我们可以来检查 SQK Server 服务默认端口的设置<br /> 一般而言,我们使用 SQL Server 默认的1433端口.如果选中&quot;隐藏服务器&quot;,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接.</p>< p>============= 接下来我们要到客户端检查客户端的网络配置 =============<br /> 我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,<br /> 所不同的是这次是在客户端来运行这个工具.</p>< p>点击:程序 -- Microsoft SQL Server -- 客户端网络使用工具</p>< p>打开该工具后,在&quot;常规&quot;项中,可以看到客户端启用了哪些协议.<br />< br /> 一般而言,我们同样需要启用命名管道以及 TCP/IP 协议.<br /> 点击 TCP/IP 协议,选择&quot;属性&quot;,可以检查客户端默认连接端口的设置,该端口必须与服务器一致.</p>< p>单击&quot;别名&quot;选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称,<br /> 连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处.</p>< p>通过以上几个方面的检查,基本上可以排除第一种错误.</p>< p>二.&quot;无法连接到服务器,用户xxx登陆失败&quot;</p>< p>该错误产生的原因是由于SQL Server使用了&quot;仅 Windows&quot;的身份验证方式,<br /> 因此用户无法使用SQL Server的登录帐户(如 sa )进行连接.解决方法如下所示:</p>< p>1.在服务器端使用企业管理器,并且选择&quot;使用 Windows 身份验证&quot;连接上 SQL Server<br /> 2.展开&quot;SQL Server组&quot;,鼠标右键点击SQL Server服务器的名称,选择&quot;属性&quot;,再选择&quot;安全性&quot;选项卡<br />< br /> 3.在&quot;身份验证&quot;下,选择&quot;SQL Server和 Windows& quot;.<br /> 4.重新启动SQL Server服务.</p>< p>在以上解决方法中,如果在第 1 步中使用&quot;使用 Windows 身份验证&quot;连接 SQL Server 失败,<br /> 那就通过修改注册表来解决此问题:</p>< p>1.点击&quot;开始&quot;-&quot;运行&quot;,输入regedit,回车进入注册表编辑器<br /> 2.依次展开注册表项,浏览到以下注册表键:<br /> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]<br /> 3.在屏幕右方找到名称&quot;LoginMode&quot;,双击编辑双字节值<br /> 4.将原值从1改为2,点击&quot;确定&quot;<br /> 5.关闭注册表编辑器<br /> 6.重新启动SQL Server服务.</p>< p>此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,<br /> 但是仍然无法使用Windows身份验证模式来连接SQL Server.<br /> 这是因为在 SQL Server 中有两个缺省的登录帐户:<br /> BUILTIN\Administrators<br />& lt;机器名&gt;\Administrator 被删除.<br /> 要恢复这两个帐户,可以使用以下的方法:</p>< p>1.打开企业管理器,展开服务器组,然后展开服务器<br /> 2.展开&quot;安全性&quot;,右击&quot;登录&quot;,然后单击&quot;新建登录&quot;<br /> 3.在&quot;名称&quot;框中,输入 BUILTIN\Administrators<br /> 4.在&quot;服务器角色&quot;选项卡中,选择&quot;System Administrators&quot;< br /> 5.点击&quot;确定&quot;退出<br /> 6.使用同样方法添加& lt;机器名&gt;\Administrator 登录.</p>< p>说明:</p>< p>以下注册表键:<br /> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode<br /> 的值决定了SQL Server将采取何种身份验证模式.<br /> 1.表示使用&quot;Windows 身份验证&quot;模式<br /> 2.表示使用混合模式(Windows 身份验证和 SQL Server 身份验证).</p>< p>三.提示连接超时</p>< p>如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,<br /> 不过是由于连接的时间大于允许的时间而导致出错.<br /> 这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,<br /> 并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由于局域网的网络问题,也会导致这样的错误.</p>< p>要解决这样的错误,可以修改客户端的连接超时设置.<br /> 默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,<br /> 而查询分析器是 15 秒(这也是为什么在企业管理器里发生错误的可能性比较大的原因).</p>< p>具体步骤为:</p>< p>企业管理器中的设置:<br /> 1.在企业管理器中,选择菜单上的&quot;工具&quot;,再选择&quot;选项&quot;<br /> 2.在弹出的&quot;SQL Server企业管理器属性&quot;窗口中,点击&quot;高级&quot;选项卡<br /> 3.在&quot;连接设置&quot;下的&quot;登录超时(秒)&quot;右边的框中输入一个比较大的数字,如 20.</p>< p>查询分析器中的设置:<br /> 工具 -- 选项 -- 连接 -- 将登录超时设置为一个较大的数字</p>< p>四.大部分机都用Tcp/ip才能成功,有次我发现用Named Pipes才可以?</p>< p>这是因为在windows 2000以后的操作系统中,MS为解决SQL SERVER的安全问题将TCP/IP配置<br /> 为SQLSERVER的默认连接协议,你可以在CLIENT NETWORK UTILITY中看到TCP/IP和NAME PIPE<br /> 的顺序。</p>< p>你也可以在:<br /> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]<br />& quot;ProtocolOrder&quot;=hex(7):74,00,63,00,70,00,00,00,00,00<br /> 看到默认的协议。</p>< p>2.怎么在程序中更改Named Pipes , Tcp/ip ,其sql语句怎么写?<br /> 你可以在上面提到的注册表的位置修改:<br /> CLIENT端:<br /> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]<br />& quot;ProtocolOrder&quot;=hex(7):74,00,63,00,70,00,00,00,00,00</p>< p>SERVER端:<br /> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib]<br />& quot;ProtocolOrder&quot;=hex(7):74,00,63,00,70,00,00,00,00,00</p>< p>我的问题应该属于第一类,遗憾的是我按照上面说的方法都不能解决这个问题。我使用:telnet& lt;服务器IP地址&gt; 1433 显示不能正确连接。按照说的方法也不能解决这个问题。有网友说出现1433端口不能连接的因为是Sql Server 2000没有打补丁的缘故,但我打过sp4后仍然不能正确连接1433端口。<br />< br /> 我在web.config里的设置为:<br />& lt;configuration&gt;<br />& nbsp;&nbsp;&nbsp;& lt;appSettings&gt;<br />& nbsp;&nbsp;&nbsp;& lt;!--&quot;data source=SASANK;initial catalog=CODER;persist security info=False;user id=sa;workstation id=SASANK;packet size=4096&quot;--&gt;<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;add key=&quot;ConnectionString&quot; value=http://www.downcc.com/tech/50.htmlSQL Server2009/04/11 11:35:16<p>/*******&nbsp; 导出到excel</p>< p>EXEC master..xp_cmdshell& rsquo;bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S&quot;GNETDATA/GNETDATA&quot; -U&quot;sa&quot; -P&quot;&quot;&rsquo;</p>< p>/***********&nbsp; 导入Excel</p>< p>SELECT *< br /> FROM OpenDataSource(& rsquo;Microsoft.Jet.OLEDB.4.0&rsquo;,< br />& nbsp;& rsquo;Data Source=&quot;c:\test.xls&quot;;User ID=Admin;Password=;Extended properties=Excel 5.0&rsquo;)...xactions</p>< p>SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+&rsquo; &rsquo; 转换后的别名< br /> FROM OpenDataSource(& rsquo;Microsoft.Jet.OLEDB.4.0&rsquo;,< br />& nbsp;& rsquo;Data Source=&quot;c:\test.xls&quot;;User ID=Admin;Password=;Extended properties=Excel 5.0&rsquo;)...xactions</p>< p>/** 导入文本文件</p>< p>EXEC master..xp_cmdshell& rsquo;bcp& quot;dbname..tablename&quot; in c:\DT.txt -c -Sservername -Usa -Ppassword&rsquo;</p>< p>/** 导出文本文件</p>< p>EXEC master..xp_cmdshell& rsquo;bcp& quot;dbname..tablename&quot; out c:\DT.txt -c -Sservername -Usa -Ppassword&rsquo;</p>< p>或</p>< p>EXEC master..xp_cmdshell& rsquo;bcp& quot;Select * from dbname..tablename&quot; queryout c:\DT.txt -c -Sservername -Usa -Ppassword&rsquo;</p>< p>导出到TXT文本,用逗号分开</p>< p>exec master..xp_cmdshell& rsquo;bcp& quot;库名..表名&quot; out& quot;d:\tt.txt&quot; -c -t ,-U sa -P password&rsquo;</p>< p>BULK INSERT 库名..表名< br /> FROM& rsquo;c:\test.txt&rsquo;< br /> WITH (< br />& nbsp;&nbsp;&nbsp; FIELDTERMINATOR =& rsquo;;&rsquo;,< br />& nbsp;&nbsp;&nbsp; ROWTERMINATOR =& rsquo;\n&rsquo;< br /> )</p>< p>--/* dBase IV文件< br /> select * from< br /> OPENROWSET(&rsquo;MICROSOFT.JET.OLEDB.4.0&rsquo;< br /> ,&rsquo;dBase IV;HDR=NO;IMEX=2;DATABASE=C:\&rsquo;,&rsquo;select * from [客户资料4.dbf]&rsquo;)< br /> --*/</p>< p>--/* dBase III文件< br /> select * from< br /> OPENROWSET(&rsquo;MICROSOFT.JET.OLEDB.4.0&rsquo;< br /> ,&rsquo;dBase III;HDR=NO;IMEX=2;DATABASE=C:\&rsquo;,&rsquo;select * from [客户资料3.dbf]&rsquo;)< br /> --*/</p>< p>--/* FoxPro 数据库< br /> select * from openrowset(&rsquo;MSDASQL&rsquo;,< br />& rsquo;Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\&rsquo;,< br />& rsquo;select * from [aa.DBF]&rsquo;)< br /> --*/</p>< p>/**************导入DBF文件****************/< br /> select * from openrowset(&rsquo;MSDASQL&rsquo;,< br />& rsquo;Driver=Microsoft Visual FoxPro Driver;< br /> SourceDB=e:\VFP98\data;< br /> SourceType=DBF&rsquo;,< br />& rsquo;select * from customer where country !=& quot;USA&quot; order by country&rsquo;)< br /> go< br /> /***************** 导出到DBF ***************/< br /> 如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句</p>< p>insert into openrowset(&rsquo;MSDASQL&rsquo;,< br />& rsquo;Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\&rsquo;,< br />& rsquo;select * from [aa.DBF]&rsquo;)< br /> select * from 表</p>< p>说明:< br /> SourceDB=c:\&nbsp; 指定foxpro表所在的文件夹< br /> aa.DBF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定foxpro表的文件名.< br />< br />< br />& nbsp;</p>< p>/*************导出到Access********************/< br /> insert into openrowset(&rsquo;Microsoft.Jet.OLEDB.4.0&rsquo;,< br />& nbsp;&nbsp;& rsquo;x:\A.mdb&rsquo;;&rsquo;admin&rsquo;;&rsquo;&rsquo;,A表) select * from 数据库名..B表</p>< p>/*************导入Access********************/< br /> insert into B表 selet * from openrowset(&rsquo;Microsoft.Jet.OLEDB.4.0&rsquo;,< br />& nbsp;&nbsp;& rsquo;x:\A.mdb&rsquo;;&rsquo;admin&rsquo;;&rsquo;&rsquo;,A表)</p>< p>*********************&nbsp; 导入 xml 文件</p>< p>DECLARE @idoc int< br /> DECLARE @doc varchar(1000)< br /> --sample XML document< br /> SET @doc =&rsquo;< br />& lt;root&gt;< br />& nbsp;& lt;Customer cid=& quot;C1&quot; name=&quot;Janine&quot; city=&quot;Issaquah&quot;&gt;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;Order oid=&quot;O1&quot; date=&quot;1/20/1996&quot; amount=&quot;3.5&quot; /&gt;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;Order oid=&quot;O2&quot; date=&quot;4/30/1997&quot; amount=&quot;13.4&quot;&gt;Customer was very satisfied< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;/Order&gt;< br />& nbsp;&nbsp;& lt;/Customer&gt;< br />& nbsp;&nbsp;& lt;Customer cid=&quot;C2&quot; name=&quot;Ursula&quot; city=&quot;Oelde&quot;& gt;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;Order oid=&quot;O3&quot; date=&quot;7/14/1999&quot; amount=&quot;100&quot; note=&quot;Wrap it blue< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; white red&quot;&gt;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;Urgency&gt;Important&lt;/Urgency&gt;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Happy Customer.< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;/Order&gt;< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& lt;Order oid=&quot;O4&quot; date=&quot;1/20/1996&quot; amount=&quot;10000&quot;/&gt;< br />& nbsp;&nbsp;& lt;/Customer&gt;< br />& lt;/root&gt;< br />& rsquo;< br /> -- Create an internal representation of the XML document.< br /> EXEC sp_xml_preparedocument @idoc OUTPUT, @doc</p>< p>-- Execute a SELECT statement using OPENXML rowset provider.< br /> SELECT *< br /> FROM OPENXML (@idoc,& rsquo;/root/Customer/Order&rsquo;, 1)< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WITH (oid&nbsp;&nbsp;&nbsp;&nbsp; char(5),< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; amount&nbsp; float,< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comment ntext& rsquo;text()&rsquo;)< br /> EXEC sp_xml_removedocument @idoc</p>< p><br /> /********************导整个数据库*********************************************/</p>< p>用bcp实现的存储过程</p>< p><br /> /*< br />& nbsp;实现数据导入/导出的存储过程< br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据不同的参数,可以实现导入/导出整个数据库/单个表< br />& nbsp;调用示例:< br /> --导出调用示例< br /> ----导出单个表< br /> exec file2table& rsquo;zj&rsquo;,&rsquo;&rsquo;,&rsquo;&rsquo;,&rsquo;xzkh_sa..地区资料&rsquo;,&rsquo;c:\zj.txt&rsquo;,1< br /> ----导出整个数据库< br /> exec file2table& rsquo;zj&rsquo;,&rsquo;&rsquo;,&rsquo;&rsquo;,&rsquo;xzkh_sa&rsquo;,&rsquo;C:\docman&rsquo;,1</p>< p>--导入调用示例< br /> ----导入单个表< br /> exec file2table& rsquo;zj&rsquo;,&rsquo;&rsquo;,&rsquo;&rsquo;,&rsquo;xzkh_sa..地区资料&rsquo;,&rsquo;c:\zj.txt&rsquo;,0< br /> ----导入整个数据库< br /> exec file2table& rsquo;zj&rsquo;,&rsquo;&rsquo;,&rsquo;&rsquo;,&rsquo;xzkh_sa&rsquo;,&rsquo;C:\docman&rsquo;,0</p>< p>*/</p>< p>if exists(select 1 from sysobjects where name=&rsquo;File2Table&rsquo; and objectproperty(id,&rsquo;IsProcedure&rsquo;)=1)< br />& nbsp;drop procedure File2Table< br /> go< br /> create procedure File2Table< br /> @servername varchar(200)&nbsp; --服务器名< br /> ,@username varchar(200)&nbsp;&nbsp; --用户名,如果用NT验证方式,则为空&rsquo;&rsquo;< br /> ,@password varchar(200)&nbsp;&nbsp; --密码< br /> ,@tbname varchar(500)&nbsp;&nbsp; --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表< br /> ,@filename varchar(1000)&nbsp; --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt< br /> ,@isout bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --1为导出,0为导入< br /> as< br /> declare @sql varchar(8000)</p>< p>if @tbname like& rsquo;%.%.%&rsquo; --如果指定了表名,则直接导出单个表< br /> begin< br />& nbsp;set @sql=&rsquo;bcp& rsquo;+@tbname< br />& nbsp; +case when @isout=1 then& rsquo; out& rsquo; else& rsquo; in& rsquo; end< br />& nbsp; +&rsquo;& quot;&rsquo;+@filename+&rsquo;&quot; /w&rsquo;< br />& nbsp; +&rsquo; /S& rsquo;+@servername< br />& nbsp; +case when isnull(@username,&rsquo;&rsquo;)=&rsquo;&rsquo; then& rsquo;&rsquo; else& rsquo; /U& rsquo;+@username end< br />& nbsp; +&rsquo; /P& rsquo;+isnull(@password,&rsquo;&rsquo;)< br />& nbsp;exec master..xp_cmdshell @sql< br /> end< br /http://www.downcc.com/tech/35.htmlMySQL2009/04/08 02:32:38<p>对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6&nbsp;日期和时间类型。&nbsp;< br />< br /> 这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:&nbsp;< br />< br /> mysql&gt;&nbsp;SELECT&nbsp;something&nbsp;FROM&nbsp;table&nbsp;< br /> WHERE&nbsp;TO_DAYS(NOW())&nbsp;-&nbsp;TO_DAYS(date_col)&nbsp;&lt;=&nbsp;30;&nbsp;< br />< br /> DAYOFWEEK(date)&nbsp;< br /> 返回日期date的星期索引(1=星期天,2=星期一,&nbsp;&hellip;&hellip;7=星期六)。这些索引值对应于ODBC标准。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;DAYOFWEEK('1998-02-03');&nbsp;< br /> -&gt;&nbsp;3&nbsp;< br />< br /> WEEKDAY(date)&nbsp;< br /> 返回date的星期索引(0=星期一,1=星期二,&nbsp;&hellip;&hellip;6=&nbsp;星期天)。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;WEEKDAY('1997-10-04&nbsp;22:23:00');&nbsp;< br /> -&gt;&nbsp;5&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;WEEKDAY('1997-11-05');&nbsp;< br /> -&gt;&nbsp;2&nbsp;< br />< br /> DAYOFMONTH(date)&nbsp;< br /> 返回date的月份中日期,在1到31范围内。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;DAYOFMONTH('1998-02-03');&nbsp;< br /> -&gt;&nbsp;3&nbsp;< br />< br /> DAYOFYEAR(date)&nbsp;< br /> 返回date在一年中的日数,&nbsp;在1到366范围内。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;DAYOFYEAR('1998-02-03');&nbsp;< br /> -&gt;&nbsp;34&nbsp;< br />< br /> MONTH(date)&nbsp;< br /> 返回date的月份,范围1到12。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;MONTH('1998-02-03');&nbsp;< br /> -&gt;&nbsp;2&nbsp;< br />< br /> DAYNAME(date)&nbsp;< br /> 返回date的星期名字。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;DAYNAME(&quot;1998-02-05&quot;);&nbsp;< br /> -&gt;&nbsp;'Thursday'&nbsp;< br />< br /> MONTHNAME(date)&nbsp;< br /> 返回date的月份名字。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;MONTHNAME(&quot;1998-02-05&quot;);&nbsp;< br /> -&gt;&nbsp;'February'&nbsp;< br />< br /> QUARTER(date)&nbsp;< br /> 返回date一年中的季度,范围1到4。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;QUARTER('98-04-01');&nbsp;< br /> -&gt;&nbsp;2&nbsp;< br />< br /> WEEK(date)&nbsp;< br />  &nbsp;< br /> WEEK(date,first)&nbsp;< br /> 对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许< br /> 你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,< br /> 从星期一开始。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;WEEK('1998-02-20');&nbsp;< br /> -&gt;&nbsp;7&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;WEEK('1998-02-20',0);&nbsp;< br /> -&gt;&nbsp;7&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;WEEK('1998-02-20',1);&nbsp;< br /> -&gt;&nbsp;8&nbsp;< br />< br /> YEAR(date)&nbsp;< br /> 返回date的年份,范围在1000到9999。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;YEAR('98-02-03');&nbsp;< br /> -&gt;&nbsp;1998&nbsp;< br />< br /> HOUR(time)&nbsp;< br /> 返回time的小时,范围是0到23。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;HOUR('10:05:03');&nbsp;< br /> -&gt;&nbsp;10&nbsp;< br />< br /> MINUTE(time)&nbsp;< br /> 返回time的分钟,范围是0到59。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;MINUTE('98-02-03&nbsp;10:05:03');&nbsp;< br /> -&gt;&nbsp;5&nbsp;< br />< br /> SECOND(time)&nbsp;< br /> 回来time的秒数,范围是0到59。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;SECOND('10:05:03');&nbsp;< br /> -&gt;&nbsp;3&nbsp;< br />< br /> PERIOD_ADD(P,N)&nbsp;< br /> 增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;PERIOD_ADD(9801,2);&nbsp;< br /> -&gt;&nbsp;199803&nbsp;< br />< br /> PERIOD_DIFF(P1,P2)&nbsp;< br /> 返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。&nbsp;< br /> mysql&gt;&nbsp;select&nbsp;PERIOD_DIFF(9802,199703);&nbsp;< br /> -&gt;&nbsp;11&nbsp;< br />< br /> DATE_ADD(date,INTERVAL&nbsp;expr&nbsp;type)&nbsp;< br />  &nbsp;< br /> DATE_SUB(date,INTERVAL&nbsp;expr&nbsp;type)&nbsp;< br />  &nbsp;< br /> ADDDATE(date,INTERVAL&nbsp;expr&nbsp;type)&nbsp;< br />  &nbsp;< br /> SUBDATE(date,INTERVAL&nbsp;expr&nbsp;type)&nbsp;< br /> 这些功能执行日期运算。对于MySQL&nbsp;3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。< br /> 在MySQL&nbsp;3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的< br /> DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以< br /> 一个&ldquo;-&rdquo;开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type&nbsp;FROM&nbsp;date)函数从日期< br /> 中返回&ldquo;type&rdquo;间隔。下表显示了type和expr参数怎样被关联:&nbsp;type值&nbsp;含义&nbsp;期望的expr格式&nbsp;< br /> SECOND&nbsp;秒&nbsp;SECONDS&nbsp;< br /> MINUTE&nbsp;分钟&nbsp;MINUTES&nbsp;< br /> HOUR&nbsp;时间&nbsp;HOURS&nbsp;< br /> DAY&nbsp;天&nbsp;DAYS&nbsp;< br /> MONTH&nbsp;月&nbsp;MONTHS&nbsp;< br /> YEAR&nbsp;年&nbsp;YEARS&nbsp;< br /> MINUTE_SECOND&nbsp;分钟和秒&nbsp;&quot;MINUTES:SECONDS&quot;&nbsp;< br /> HOUR_MINUTE&nbsp;小时和分钟&nbsp;&quot;HOURS:MINUTES&quot;&nbsp;< br /> DAY_HOUR&nbsp;天和小时&nbsp;&quot;DAYS&nbsp;HOURS&quot;&nbsp;< br /> YEAR_MONTH&nbsp;年和月&nbsp;&quot;YEARS-MONTHS&quot;&nbsp;< br /> HOUR_SECOND&nbsp;小时,&nbsp;分钟,&nbsp;&quot;HOURS:MINUTES:SECONDS&quot;&nbsp;< br /> DAY_MINUTE&nbsp;天,&nbsp;小时,&nbsp;分钟&nbsp;&quot;DAYS&nbsp;HOURS:MINUTES&quot;&nbsp;< br /> DAY_SECOND&nbsp;天,&nbsp;小时,&nbsp;分钟,&nbsp;秒&nbsp;&quot;DAYS&nbsp;HOURS:MINUTES:SECONDS&quot;&nbsp;< br />< br /> MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅< br /> 包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。&nbsp;< br />< br /> mysql&gt;&nbsp;SELECT&nbsp;&quot;1997-12-31&nbsp;23:59:59&quot;&nbsp;+&nbsp;INTERVAL&nbsp;1&nbsp;SECOND;&nbsp;< br /> -&gt;&nbsp;1998-01-01&nbsp;00:00:00&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;INTERVAL&nbsp;1&nbsp;DAY&nbsp;+&nbsp;&quot;1997-12-31&quot;;&nbsp;< br /> -&gt;&nbsp;1998-01-01&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;&quot;1998-01-01&quot;&nbsp;-&nbsp;INTERVAL&nbsp;1&nbsp;SECOND;&nbsp;< br /> -&gt;&nbsp;1997-12-31&nbsp;23:59:59&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;DATE_ADD(&quot;1997-12-31&nbsp;23:59:59&quot;,&nbsp;< br /> INTERVAL&nbsp;1&nbsp;SECOND);&nbsp;< br /> -&gt;&nbsp;1998-01-01&nbsp;00:00:00&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;DATE_ADD(&quot;1997-12-31&nbsp;23:59:59&quot;,&nbsp;< br /> INTERVAL&nbsp;1&nbsp;DAY);&nbsp;< br /> -&gt;&nbsp;1998-01-01&nbsp;23:59:59&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;DATE_ADD(&quot;1997-12-31&nbsp;23:59:59&quot;,&nbsp;< br /> INTERVAL&nbsp;&quot;1:1&quot;&nbsp;MINUTE_SECOND);&nbsp;< br /> -&gt;&nbsp;1998-01-01&nbsp;00:01:00&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;DATE_SUB(&quot;1998-01-01&nbsp;00:00:00&quot;,&nbsp;< br /> INTERVAL&nbsp;&quot;1&nbsp;1:1:1&quot;&nbsp;DAY_SECOND);&nbsp;< br /> -&gt;&nbsp;1997-12-30&nbsp;22:58:59&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;DATE_ADD(&quot;1998-01-01&nbsp;00:00:00&quot;,&nbsp;< br /> INTERVAL&nbsp;&quot;-1&nbsp;10&quot;&nbsp;DAY_HOUR);&nbsp;< br /> -&gt;&nbsp;1997-12-30&nbsp;14:00:00&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;DATE_SUB(&quot;1998-01-02&quot;,&nbsp;INTERVAL&nbsp;31&nbsp;DAY);&nbsp;< br /> -&gt;&nbsp;1997-12-02&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;EXTRACT(YEAR&nbsp;FROM&nbsp;&quot;1999-07-02&quot;);&nbsp;< br /> -&gt;&nbsp;1999&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;EXTRACT(YEAR_MONTH&nbsp;FROM&nbsp;&quot;1999-07-02&nbsp;01:02:03&quot;);&nbsp;< br /> -&gt;&nbsp;199907&nbsp;< br /> mysql&gt;&nbsp;SELECT&nbsp;EXTRACT(DAY_MINUTE&nbsp;FROM&nbsp;&quot;1999-07-02&nbsp;01:02:03&quot;);&nbsp;< br /> -&gt;&nbsp;20102&nbsp;< br />< br /> 如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,< br /> 如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象&quot;1:10&quot;这样指定值,< br /> MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话http://www.downcc.com/tech/34.htmlSQL Server2009/04/08 02:29:07<p><strong>&nbsp;  故障现象</strong></p>< p>  使用SQL Server Service Manager启动MSSQLServer没有反应,启动MSDTC没有问题。使用控制面板中的&lt;服务&gt;启动时出现提示&ldquo;无法启动MSSQLServer服务。错误2140:发生Windows NT 内部错误。&rdquo;</p>< p><strong>  原因< /strong></p>< p>  经过询问操作人员得知,其在Enterprise Manager中,在SERVER的属性中有一个startup parameters中的parameter被删除掉,导致SQL SERVER 不能启动</p>< p><strong>  解决办法< /strong></p>< p>  在ms-dos中,进入c:mssql7inn,执行< br />   sqlservr -d c:mssql7datamaster.mdf -e c:mssql7logerrorlog -l< br />   大约一分钟后,当提示信息出现Using& rsquo;xpstar.dll&lsquo; version& lsquo;1998.11.13&rsquo; to execute extended stored procedure& rsquo;sp_MSgetversion&lsquo;.时,即表示已经正常启动,这时不能关掉该ms-dos窗口,打开Enterprise Manager,打开SERVER属性窗口中的Startup< br />   -dc:mssql7datamaster.mdf< br />   -ec:mssql7logerrorlog< br />   -lc:mssql7datamastlog.ldf< br />   然后关掉MS-DOS窗口,再用SQL Server Service Manager启动服务就行了。< br />   以上是在SQL7上进行修复,对于SQL2000,故障现象和操作方法基本上是一样的,差别就是在MS-DOS方式中的提示信息不太一样,还有就是文件的路径改为c:program filesmicrosoft sql servermssql,其余的就都一样了。</p>http://www.downcc.com/tech/33.htmlSQL Server2009/04/08 02:24:55<p>SQL-SERVER 声明游标<br /> 每一个游标必须有四个组成部分这四个关键部分必须符合下面的顺序;<br /> 1.DECLARE 游标<br /> 2.OPEN 游标<br /> 3.从一个游标中FETCH 信息<br /> 4.CLOSE 或DEALLOCATE 游标<br /> 通常我们使用DECLARE 来声明一个游标声明一个游标主要包括以下主要内容:</p>< ul>< li>游标名字</li>< li>数据来源(表和列)</li>< li>选取条件</li>< li>属性(仅读或可修改)<br /> 其语法格式如下:<br /> DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR<br /> FOR select_statement<br /> [FOR {READ ONLY | UPDATE [OF column_name [,...n]]}]<br /> 其中:</li>< li>cursor_name<br /> 指游标的名字。</li>< li>INSENSITIVE<br /> 表明MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过<br /> 游标来更新基本表。如果不使用该保留字,那么对基本表的更新、删除都会反映到游标中。<br />< br /> 另外应该指出,当遇到以下情况发生时,游标将自动设定INSENSITIVE 选项。<br /> 在SELECT 语句中使用DISTINCT、 GROUP BY、 HAVING UNION 语句;<br /> 使用OUTER JOIN;<br /> 所选取的任意表没有索引;<br /> 将实数值当作选取的列。</li>< li>SCROLL<br /> 表明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。如果不使用该保留字,那么只能进行NEXT 提取操作。由此可见,SCROLL 极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再<br /> 重开游标。</li>< li>select_statement<br /> 是定义结果集的SELECT 语句。应该注意的是,在游标中不能使用COMPUTE、COMPU- TE BY、 FOR BROWSE、 INTO 语句。</li>< li>READ ONLY<br /> 表明不允许游标内的数据被更新尽管在缺省状态下游标是允许更新的。而且在UPDATE或DELETE 语句的WHERE CURRENT OF 子句中,不允许对该游标进行引用。</li>< li>UPDATE [OF column_name[,&hellip;n]]<br /> 定义在游标中可被修改的列,如果不指出要更新的列,那么所有的列都将被更新。当游标被成功创建后,游标名成为该游标的惟一标识,如果在以后的存储过程、触发器或Transact_SQL 脚本中使用游标,必须指定该游标的名字。</li>< li><img height="106" alt="" width="245" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/20094822737351.gif" /><br /> 上面介绍的是SQL_92 的游标语法规则。下面介绍MS SQL SERVER 提供的扩展了的游标声明语法,通过增加另外的保留字,使游标的功能进一步得到了增强其语法规则为;<br />< img height="169" alt="" width="379" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/20094822737271.gif" /></li>< li>LOCAL<br /> 定义游标的作用域仅限在其所在的存储过程、触发器或批处理中。当建立游标的存储过程执行结束后,游标会被自动释放。因此,我们常在存储过程中使用OUTPUT 保留字,将游标传递给该存储过程的调用者,这样在存储过程执行结束后,可以引用该游标变量,在该种情况下,直到引用该游标的最后一个就是被释放时,游标才会自动释放。</li>< li>GLOBAL<br /> 定义游标的作用域是整个会话层会话层指用户的连接时间它包括从用户登录到SQLSERVER 到脱离数据库的整段时间。选择GLOBAL 表明在整个会话层的任何存储过程、触发器或批处理中都可以使用该游标,只有当用户脱离数据库、时该游标才会被自动释放。<br /> 注意:如果既未使用GLOBAL也未使用LOCAL,那么SQL SERVER将使用default local cursor数据库选项,为了与以彰的版本歉容,该选项常设置为FALSE。</li>< li>FORWARD_ONLY<br /> 选项指明在从游标中提取数据记录时,只能按照从第一行到最后一行的顺序,此时只能选用FETCH NEXT 操作。除非使用STATIC, KEYSET 和DYNAMIC 关键字,否则如果未指明是使用FORWARD_ONLY 还是使用SCROLL, 那么FORWARD_ONLY 将成为缺省选项,因为若使用STATIC KEYSET 和DYNAMIC 关键字,则变成了SCROLL 游标。另外如果使用了FORWARD_ONLY, 便不能使用FAST_FORWARD。</li>< li>STATIC<br /> 选项的含义与INSENSITIVE 选项一样,MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此对基本表的修改并不影响游标中的数据,即游标不会随着基本表内容的<br /> 改变而改变,同时也无法通过游标来更新基本表。</li>< li>KEYSET<br /> 指出当游标被打开时,游标中列的顺序是固定的,并且MS SQL SERVER 会在tempdb内建立一个表,该表即为KEYSET KEYSET 的键值可惟一识别游标中的某行数据。当游标拥有者或其它用户对基本表中的非键值数据进行修改时,这种变化能够反映到游标中,所以游标用户或所有者可以通过滚动游标提限这些数据。<br />< br />& nbsp;&nbsp;&nbsp;&nbsp;当其它用户增加一条新的符合所定义的游标范围的数据时,无法由此游标读到该数据。因为Transact-SQL 服务器游标不支持INSERT 语句。<br />& nbsp;&nbsp;&nbsp;&nbsp;如果在游标中的某一行被删除掉,那么当通过游标来提取该删除行时,@@FETCH_STATUS 的返回值为-2。 @@FETCH_STATUS 是用来判断读取游标是否成功的系统全局变量。<br />& nbsp;&nbsp;&nbsp;&nbsp;由于更新操作包括两部分:删除原数据插入新数据,所以如果读取原数据,@@FETCH_STATUS 的返回值为-2; 而且无法通过游标来读取新插入的数据。但是如果使用了WHERE CURRENT OF 子句时,该新插入行数据便是可见的。<br /> 注意:如果基础表未包含惟一的索引或主键,则一个KEYSET游标将回复成STATIC游标。</li>< li>DYNAMIC<br /> 指明基础表的变化将反映到游标中,使用这个选项会最大程度上保证数据的一致性。然而,与KEYSET 和STATIC 类型游标相比较,此类型游标需要大量的游标资源。</li>< li>FAST_FORWARD<br /> 指明一个FORWARD_ONLY, READ_ONLY 型游标。此选项已为执行进行了优化。如果SCROLL 或FOR_UPDATE 选项被定义,则FAST_FORWARD 选项不能被定义。</li>< li>SCROLL_LOCKS<br /> 指明锁被放置在游标结果集所使用的数据上当。数据被读入游标中时,就会出现锁。这个选项确保对一个游标进行的更新和删除操作总能被成功执行。如果FAST_FORWARD选项被定义,则不能选择该选项。另外,由于数据被游标锁定,所以当考虑到数据并发处理时,应避免使用该选项。</li>< li>OPTIMISTIC<br /> 指明在数据被读入游标后,如果游标中某行数据已发生变化,那么对游标数据进行更新或删除可能会导致失败。如果使用了FAST_FORWARD 选项,则不能使用该选项。</li>< li>TYPE_WARNING<br /> 指明若游标类型被修改成与用户定义的类型不同时,将发送一个警告信息给客户端。<br /> 注意:不可以将SQL_92的游标语法规则与MS SQL SERVER的游标扩展用法混合在一起使用。</li>< /ul>< p>&nbsp;&nbsp;&nbsp;&nbsp;下面我们将总结一下声明游标时应注意的一些问题。<br />& nbsp;&nbsp;&nbsp;&nbsp;如果在CURSOR 前使用了SCROLL 或INSENSITIVE 保留字,则不能在CURSOR 和FOR select_statement 之间使用任何的保留字。反之同理。<br />& nbsp;&nbsp;&nbsp;&nbsp;如果用DECLARE CURSOR 声明游标时,没有选择READ_ONLY、 OPTIMISTIC 或SCROLL_LOCKS 选项时,游标的缺省情况为:<br />& nbsp;&nbsp;&nbsp;&nbsp;如果SELECT 语句不支持更新,则游标为READ_ONLY;<br />& nbsp;&nbsp;&nbsp;&nbsp;STATIC 和FAST_FORWARD 类型的游标缺省为READ_ONLY;&nbsp;&nbsp;&nbsp;<br />& nbsp;&nbsp;&nbsp;&nbsp;DYNAMIC 和KEYSET 游标缺省为OPTIMISTIC。<br />& nbsp;&nbsp;&nbsp;&nbsp;我们仅能在Transact-SQL 语句中引用游标,而不能在数据库API 函数中引用。<br />& nbsp;&nbsp;&nbsp;&nbsp;游标被声明以后,可以通过系统过程对其特性进行设置。<br />& nbsp;&nbsp;&nbsp;&nbsp;对那些有权限对视图、表或某些列执行SELECT 语句的用户而言,它也具有使用游标的缺省权限。<img height="316" alt="" width="472" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/20094822737522.gif" /><br />< img height="107" alt="" width="178" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/20094822738524.gif" /></p>http://www.downcc.com/tech/29.htmlAccess2009/04/06 01:15:59<p>&nbsp;&nbsp;&nbsp; 问题</p>< p>&nbsp;&nbsp;&nbsp; 1.什么是Microsoft Access 工作组,怎样创建工作组信息文件?< br />& nbsp;&nbsp;&nbsp; 2.怎样打开&ldquo;工作组管理器&ldquo;?< br />& nbsp;&nbsp;&nbsp; 3.怎样允许他人查看或执行查询,但不能更改数据或查询设计?< br />& nbsp;&nbsp;&nbsp; 4.怎样防止复制、设置数据库密码或更改启动选项?< br />& nbsp;&nbsp;&nbsp; 5.怎样定义用户级安全?</p>< p>&nbsp;&nbsp;&nbsp; 问:什么是Microsoft Access 工作组,怎样创建工作组信息文件?</p>< p>&nbsp;&nbsp;&nbsp; 答:Microsoft Access 工作组是在多用户环境下共享数据的一组用户。如果定义了用户级安全,工作组的成员将记录在用户帐号和组帐号中,这些帐号则保存在 Microsoft Access 工作组信息文件中。用户的密码也保存在工作组信息文件中。可以为这些安全帐号指定对数据库及其对象的权限。权限本身将存储在安全数据库中。< br /> 在 Microsoft Access 97 中,用户的设置存储在 Windows 注册表的 Hkey_Current_UserSoftwareMicrosoftOffice8.0AccessSettings 关键字中。在 Microsoft Access 的旧版本中,&ldquo;选项&rdquo;对话框中定义的用户选项设置记录在工作组信息文件中。</p>< p>&nbsp;&nbsp;&nbsp; 默认的工作组是由安装程序自动在安装 Microsoft Access 的文件夹中创建的工作组信息文件定义的。 可以使用&ldquo;工作组管理器&rdquo;重新创建工作组。</p>< p>&nbsp;&nbsp;&nbsp; 问:怎样打开&ldquo;工作组管理器&ldquo;?</p>< p>&nbsp;&nbsp;&nbsp; 答:如果使用的是 Windows 95 或 Windows NT Workstation 4.0,可使用&ldquo;我的电脑&rdquo;或 Windows&ldquo;资源管理器&rdquo;打开安装 Microsoft Access 的文件夹(默认文件夹是 Program FilesMicrosoft OfficeOffice),然后双击 Wrkgadm.exe。</p>< p>&nbsp;&nbsp;&nbsp; 问:怎样允许他人查看或执行查询,但不能更改数据或查询设计?</p>< p>&nbsp;&nbsp;&nbsp; 答:在安全工作组里,可以指定他人查看查询返回数据的权限。如果是操作查询,还可以允许他们执行查询,即使限制他们不得查看查询的基表或基础查询。< br /> 1 在&ldquo;设计&rdquo;视图中打开查询。< br /> 2 在查询&ldquo;设计&rdquo;视图中单击设计网格与字段列表外的任何地方,以选定查询。< br /> 3 单击工具栏上的&ldquo;属性&rdquo;按钮 ,以显示查询的属性表。< br /> 4 将&ldquo;执行权限&rdquo;属性设置为&ldquo;所有者的&rdquo;。</p>< p>&nbsp;&nbsp;&nbsp; 设置了此属性后,应出现以下情形:</p>< p>。所有用户都具有查询所有者的查看或执行查询权限。< br /> 。只有查询所有者才能保存更改过的查询。< br /> 。只有查询所有者才能更改查询的所有权。</p>< p>&nbsp;&nbsp;&nbsp; 注释 也可以设置所有新查询的默认权限。请在&ldquo;工具&rdquo;菜单上单击&ldquo;选项&rdquo;,再单击&ldquo;表/查询&rdquo;选项卡,然后单击想要使用的&ldquo;执行权限&rdquo;选项。</p>< p>&nbsp;&nbsp;&nbsp; 问:怎样防止复制、设置数据库密码或更改启动选项?</p>< p>&nbsp;&nbsp;&nbsp; 答:如果共享数据库没有定义用户级安全,就无法防止用户作出以上更改。定义了用户级安全性之后,就只有具有管理员权限的用户帐号或组帐号才能对数据库进行复制、设置密码或更改启动属性等操作。</p>< p>&nbsp;&nbsp;&nbsp; 问:怎样定义用户级安全?</p>< p>&nbsp;&nbsp;&nbsp; 答:< br />& nbsp;&nbsp;&nbsp; 1 加入一个安全工作组或新建一个工作组信息文件。< br />& nbsp;&nbsp;&nbsp; 要点 要完全确保数据库的安全,请不要使用安装 Microsoft Access 时创建的工作组信息文件所定义的默认工作组。而应该确保定义所加入的工作组的工作组信息文件是使用唯一的工作组 ID (WID) 创建的,否则应该创建一个新的工作组。</p>< p>&nbsp;&nbsp;&nbsp; 2 激活&ldquo;登录&rdquo;对话框。< br />& nbsp;&nbsp;&nbsp; 操作方法:启动 Microsoft Access ,打开数据库, 单击&ldquo;工具&rdquo;菜单&ldquo;安全&rdquo;子菜单中的&ldquo;用户与组帐号&rdquo;命令,单击&ldquo;用户&rdquo;选项卡,确保在&ldquo;名称&rdquo;框中预定义的&ldquo;管理员&rdquo;用户帐号呈高亮度显示,单击&ldquo;更改登录密码&rdquo;选项卡,单击&ldquo;新密码&rdquo;框,然后键入新密码。不要在&ldquo;旧密码&rdquo;框中输入任何内容, 在&ldquo;验证&rdquo;框中再次键入密码进行确认,然后单击&ldquo;确定&rdquo;按钮。退出ACCESS并重新启动ACCESS,就会出现&ldquo;登录&rdquo;对话框。</p>< p>&nbsp;&nbsp;&nbsp; 3&nbsp; 创建管理员的用户帐号。</p>< p>&nbsp;&nbsp;&nbsp; 操作方法:</p>< p>&nbsp;&nbsp;&nbsp; 1)打开工作组管理器,按下&ldquo;联接。。。&rdquo;按钮,选择 使用在第1 步骤中创建的安全工作组信息文件,退出管理器,启动 Microsoft Access。< br /> 要点 如果要确保数据库是完全安全的,请不要使用安装 Microsoft Access 时创建的工作组信息文件中定义的默认工作组,并确保定义所用工作组的工作组信息文件是以唯一的工作组 ID (WID) 创建的,否则就应该重新创建一个工作组信息文件。</p>< p>&nbsp;&nbsp;&nbsp; 2 )选择&ldquo;工具&rdquo;菜单&ldquo;安全&rdquo;子菜单中的&ldquo;用户与组帐号&rdquo;命令,单击&ldquo;用户&rdquo;选项卡上的&ldquo;新建&rdquo;按钮, 在&ldquo;新用户/组&rdquo;对话框中,键入管理员帐号名称和个人 ID (PID),然后单击&ldquo;确定&rdquo;按钮新建帐号。< br /> 警告 一定要记住正确的帐号名和 PID,包括字母的大小写,并其将其放在安全的地方。如果要重新创建帐号,必须提供其名称和 PID。遗忘或丢失了帐号名和 PID 将无法恢复。</p>< p>&nbsp;&nbsp;&nbsp; 3)在&ldquo;可用的组&rdquo;框中,单击&ldquo;管理员组&rdquo;,然后单击&ldquo;添加&rdquo;按钮。Microsoft Access 将把新的管理员帐号添加到管理员组并在&ldquo;隶属于&rdquo;框中显示&ldquo;管理员组&rdquo;。</p>< p>&nbsp;&nbsp;&nbsp; 4)单击&ldquo;确定&rdquo;按钮新建管理员帐号。</p>< p>&nbsp;&nbsp;&nbsp; 4 退出 Microsoft Access 并以新建的管理员身份登录。</p>< p>&nbsp;&nbsp;&nbsp; 5 删除管理员组中的管理员帐号。</p>< p>&nbsp;&nbsp;&nbsp; 操作方法:选择&ldquo;工具&rdquo;菜单&ldquo;安全&rdquo;子菜单中的&ldquo;用户与组帐号&rdquo;命令,在&ldquo;用户&rdquo;选项卡上的&ldquo;名称&rdquo;框中输入要移去的用户。在&ldquo;隶属于&rdquo;框中,选择要&ldquo;管理员组&rdquo;的组,然后单击&ldquo;删除&rdquo;按钮。</p>< p>&nbsp;&nbsp;&nbsp; 6 打开要设置安全的数据库。</p>< p>&nbsp;&nbsp;&nbsp; 7 单击&ldquo;工具&rdquo;菜单&ldquo;安全&rdquo;子菜单中的&ldquo;用户级安全性向导&rdquo;命令。</p>< p>&nbsp;&nbsp;&nbsp; 8 根据向导对话框中的指示完成各个步骤。</p>< p>&nbsp;&nbsp;&nbsp;& ldquo;用户级安全性向导&rdquo;将创建一个新的数据库,并将原有数据库中所有对象的副本导出到新的数据库中,然后通过取消用户组对新数据库对象的所有权限,为向导第一个对话框中的选定对象类型设置安全,然后加密新数据库。原有数据库没有进行任何更改。表之间的关系和所有的链接表在新的数据库中都将重建。</p>< p>&nbsp;&nbsp;&nbsp; 现在,只有在步骤 1 中加入的工作组管理员组成员可以访问新数据库中设置了安全的对象。&ldquo;用户&rdquo;组则不具备对这些对象的权限。要限制用户和/或组对这些对象的访问必须为其设置权限。</p>http://www.downcc.com/tech/28.htmlAccess2009/04/06 01:05:29<p><span >(三)显示/查看数据库记录:<br />< br />& lt;%< br /> set dbconnection=Server.CREATEOBJECT(&quot;ADODB.CONNECTION&quot;)<br /> DBPath = Server.MapPath(&quot;customer.mdb&quot;)<br /> dbconnection.Open& quot;driver={Microsoft Access Driver (*.mdb)};dbq=&quot;& amp; DBPath<br />< br /> 建立与数据库的连接,与上同。< br />< br /> SQL=&quot;select * from 客户 Order By 时间 DESC&quot;<br /> SET CustomerList=dbconnection.EXECUTE(SQL)<br /> %&gt;<br />< br /> 建立SQL查询语句,表示从&quot;客户&quot;表中查询所有记录,Order By 时间 DESC表示&quot;按时间降序排序,&quot;这样最后添加的信息再最上面显示。下面一句执行SQL查询并将结果返回给Recordset对象CustomerList。< br />< br />& lt;html&gt;<br />& lt;body&gt;<br />& lt;FONT SIZE=&quot;5&quot;&gt;&lt;center&gt;数据库记录&lt;/center&gt;&lt;/FONT&gt;<br />& lt;CENTER&gt;<br />& lt;TABLE BORDER=1&gt;<br />& lt;tr&gt;< br />< br />& lt;td&gt;编号&lt;/td&gt;<br />& lt;td&gt;公司名称&lt;/td&gt;<br />& lt;td&gt;联络人姓名&lt;/td&gt;<br />& lt;td&gt;所在城市&lt;/td&gt;<br />& lt;td&gt;电话号码&lt;/td&gt;<br />& lt;/tr&gt;<br />& lt;% DO WHILE NOT CustomerList.EOF %&gt;<br />< br /> 检测记录是否到了最后一条。EOF表示End of File。< br />< br />& lt;TR&gt;<br />& lt;TD&gt;&lt;% =CustomerList(&quot;客户编号&quot;) %&gt;&lt;/TD&gt;<br />& lt;TD&gt;&lt;% =CustomerList(&quot;公司名称&quot;) %&gt;&lt;/TD&gt;<br />& lt;TD&gt;&lt;% =CustomerList(&quot;联络人姓名&quot;) %&gt;&lt;/TD&gt;<br />& lt;TD&gt;&lt;% =CustomerList(&quot;所在城市&quot;) %&gt;&lt;/TD&gt;<br />& lt;TD&gt;&lt;% =CustomerList(&quot;电话号码&quot;) %&gt;&lt;/TD&gt;<br />& lt;/TR&gt;<br />< br />& lt;% =CustomerList(&quot;客户编号&quot;) %&gt;可以说是Response.Write方法的简写。将&quot;客户编号&quot;字段内的数据写入TD标签间。< br />< br />& lt;% CustomerList.movenext< br /> loop< br /> %&gt;<br />< br /> 如果还没有到最后一条则指针移动到下一条。用Do While ... Loop循环逐一取得所有的记录。< br />< br />& lt;/TABLE&gt;<br />& lt;/CENTER&gt;<br />< br />< br />& lt;center&gt;<br />& lt;input type=&quot;button&quot; value=&quot;添加数据&quot;&gt;<br />& lt;/center&gt;<br />& lt;/BODY&gt;<br />& lt;/HTML&gt;<br />< br /> 缺陷:仅仅实现了最基本的功能。先不说其它功能,仅就数据的添加和查看功能来看,比较完美的还应该加入&ldquo;分页功能&rdquo;。否则数据大到一定程度显示全部数据基本上是不可能的。<br /> 本期至此全部完毕。</span></p>http://www.downcc.com/tech/27.htmlAccess2009/04/06 01:02:21<p><span >(三)关键部分:建立与数据库的联系并将表单中收集到的信息添加到ACCESS数据库中。<br />< br /> ASP代码放在〈%和%&gt;之间。< br />< br />& lt;%<br /> CompanyName = Request(&quot;CompanyName&quot;)<br /> CName = Request(&quot;CName&quot;)<br /> City = Request(&quot;City&quot;)<br /> Tel = Request(&quot;Tel&quot;)<br />< br /> 以上,首先取得表单中填写的数据,使用ASP的Request对象非常容易可以实现数据的收集。双引号中的就是上一步建立的各个项目的名字(NAME)。所以今后为每个项目起名字是个好习惯,尽管有时候并不一定用得到。这样取得的数据就保存在等号坐侧的变量中了。< br />< br /> If CompanyName =& quot;&quot; Or CName =& quot;&quot; Or City =& quot;&quot; Or Tel =& quot;&quot; Then<br /> 'Response.Write& quot;&lt;html&gt;&lt;body&gt;&lt;center&gt;&lt;font size=5&gt;请将资料填写完整。&lt;/font&gt;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;&quot;<br /> Response.Redirect& quot;error.htm&quot;<br /> Response.End< br /> End If<br />< br /> 这里是检测各个项目是否输入了东西,如果为空则不往下继续执行,显示错误信息。注意:你可以使用两种方法。我都列出了。方法一:使用Response.Write方法写一个出错页面,类似于javascripts的document.write写法,只是ASP使用Response.write罢了。方法二:使用Response.Redirect方法导向出错页面error.htm。我在方法一的代码前加上单引号表示注释。(ASP中表示注释用单引号')。< br />< br /> set dbconnection=Server.CREATEOBJECT(&quot;ADODB.CONNECTION&quot;)<br /> DBPath = Server.MapPath(&quot;customer.mdb&quot;)<br /> dbconnection.Open& quot;driver={Microsoft Access Driver (*.mdb)};dbq=&quot;& amp; DBPath<br />< br /> (1)建立Connection对象:dbconnection,建立一个连接(Connection)是数据库存取的开始。我们使用ASP的内建对象方法Server.Createobject建立与数据库的连接。ADODB是ASP的数据库存取组件,不必担心只要有ASP就有它了,是内置的。< br /> (2)使用dbconnection.open方法打开数据库customer.mdb。driver参数语法: driver={Microsoft Access Driver (*.mdb)}必须这么写。告诉系统使用ACCESS ODBC驱动处理。dbq参数用来指定打开的数据库文件,它必须是完整的路径。例如&quot;c:inetpubwwwrootcustomercustomer.mdb&quot;,我们使用Server.MapPath的方法取得数据库的完整路径。&nbsp;&nbsp;<br />< br /> Set rs = Server.CreateObject(&quot;ADODB.Recordset&quot;)<br />< br /> 建立Recordset对象rs。Connection仅仅是建立了与数据库间的连接,要存取数据还应该再建立Recordset对象。< br />< br /> rs.Open& quot;客户&quot;, dbconnection, adOpenDynamic, 3<br />< br /> 打开数据库中的表&quot;客户&quot;(客户是表名)。 语法:<br />< br /> rs.open 数据表名或SQL指令,已经建立的Connection对象(这里是dbconnection), 锁定类型<br />< br />< br /> rs.AddNew<br /> rs(&quot;公司名称&quot;) = CompanyName<br /> rs(&quot;联络人姓名&quot;) = CName<br /> rs(&quot;所在城市&quot;) = City<br /> rs(&quot;电话号码&quot;) = Tel<br /> rs.Update<br />< br /> 用AddNew向数据库请求添加数据。最后用Update写入。注意:等号右侧的变量保存着用Request取得的表单数据。双引号内的就是数据库的字段,应该与数据库的一致啊。否则会出错的。这样变量内的数据就写入了数据库对应的字段内了。< br />< br /> Response.Write& quot;&lt;html&gt;&lt;body&gt;&lt;center&gt;&lt;font size=5&gt;祝贺,您的数据已经添加进数据库了!&lt;p&gt;&quot;<br /> Response.Write& quot;&lt;a href='viewdatabase.asp'&gt;查看数据&lt;/a&gt;&quot;<br /> Response.Write& quot;&lt;/font&gt;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;&quot;<br />< br /> 写入成功后显示祝贺信息并建立查看数据库记录的连接。< br />< br /> %&gt;<br />& lt;html&gt;<br />< br />& lt;head&gt;<br />& lt;title&gt;&lt;/title&gt;<br />& lt;/head&gt;<br />< br />& lt;body&gt;<br />& lt;/body&gt;<br />& lt;/html&gt;</span></p>http://www.downcc.com/tech/26.htmlAccess2009/04/06 00:52:37<p><span >前言:<br />< br /> 如何通过ASP与数据库建立连接是一个非常现实的问题,我尽量写得非常详细。相信看了这篇文章相信您已经能够写出类似的比较简单和实用的程序了。<br />< br /> (一)数据库的选择:<br />< br /> 有许多的数据库你可以选择,SQL SERVER、ACCESS(*.mdb)、EXCEL(*.xls)、FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储数据的功能。那么到底选择什么数据库最合适呢?其中SQL SERVER是服务器级的,足以应付每天上万次的访问量。对于非服务器级的数据库建议使用ACCESS97。因为:(1)只要安装了PWS或IIS4肯定有ACCESS的ODBC驱动,即你的系统肯定支持ACCESS数据库的存取。(2)ACCESS支持的SQL指令非常齐全。(3)ACCESS ODBC驱动程序的效率非常高。虽然它不是服务器级的数据库,但是作为中小型企业内部网的数据库支持还是绰绰有余的。(4)ACCESS97在OFFICE97中就有,非常方便得到和使用。<br />< br /> 本文就以ACCESS数据库为准介绍基于WEB的数据库存取方法。< br />< br /> (二)例子:我们建立一个&ldquo;客户&rdquo;数据库,需要保存如下的客户资料:客户名称、联络人姓名、所在城市、电话号码。<br />< br /> (1)首先建立ACCESS数据库customer.mdb(今后有用的)。建立如下字段:客户名称、联络人姓名、所在城市、电话号码、客户编号、时间。将表保存为&quot;客户&quot;(今后有用的,===&gt;看看图)。注意:建立字段时多作了2个(客户编号、时间),因为在今后排序时要用到它们。建议今后做数据库时最好都加上这2项,不会没用的。此外,在保存表时ACCESS会询问是否建立一个住关键字,我们不需要它所以不必建立。还有:时间字段的&quot;默认值&quot;设成&quot;now()&quot;,即去系统当时的时间。同时将索引项设成&quot;有(允许重复)&quot;,含义:WEB上极有可能同时存取数据,所以允许重复,索引设成&quot;有&quot;可以加快排序速度。===&gt;看看图<br />< br /> (2)建立递交表单add.htm:<br />< br /> 源代码如下:<br />< br />& lt;html&gt;<br />& lt;head&gt;<br />& lt;title&gt;添加数据库记录&lt;/title&gt;<br />& lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt;<br />& lt;/head&gt;<br />& lt;body bgcolor=&quot;#FFFFFF&quot;&gt;<br />& lt;p align=&quot;center&quot;&gt;&lt;font size=&quot;5&quot;&gt;添加数据库记录&lt;/font&gt;&lt;/p&gt;<br />& lt;form method=&quot;post&quot; action=&quot;adddatabase.asp&quot;&gt;<br />& lt;div align=&quot;center&quot;&gt;<br />& lt;table width=&quot;46%&quot; border=&quot;0&quot;&gt;<br />& lt;tr&gt;< br />& lt;td width=&quot;28%&quot;&gt;< br />& lt;div align=&quot;right&quot;&gt;公司名称:& lt;/div&gt;<br />& lt;/td&gt;<br />& lt;td width=&quot;72%&quot;&gt;< br />& lt;input type=&quot;text&quot; name=&quot;CompanyName&quot;&gt;<br />& lt;/td&gt;<br />& lt;/tr&gt;<br />& lt;tr&gt;< br />& lt;td width=&quot;28%&quot;&gt;< br />& lt;div align=&quot;right&quot;&gt;联络人姓名:& lt;/div&gt;<br />& lt;/td&gt;<br />& lt;td width=&quot;72%&quot;&gt;< br />& lt;input type=&quot;text&quot; name=&quot;CName&quot;&gt;<br />& lt;/td&gt;<br />& lt;/tr&gt;<br />& lt;tr&gt;< br />& lt;td width=&quot;28%&quot;&gt;< br />& lt;div align=&quot;right&quot;&gt;所在城市:& lt;/div&gt;<br />& lt;/td&gt;<br />& lt;td width=&quot;72%&quot;&gt;< br />& lt;input type=&quot;text&quot; name=&quot;City&quot;&gt;<br />& lt;/td&gt;<br />& lt;/tr&gt;<br />& lt;tr&gt;< br />& lt;td width=&quot;28%&quot;&gt;< br />& lt;div align=&quot;right&quot;&gt;电话号码:&lt;/div&gt;<br />& lt;/td&gt;<br />& lt;td width=&quot;72%&quot;&gt;< br />& lt;input type=&quot;text&quot; name=&quot;Tel&quot;&gt;<br />& lt;/td&gt;<br />& lt;/tr&gt;<br />& lt;tr&gt;< br />& lt;td width=&quot;28%&quot;&gt;< br />& lt;div align=&quot;right&quot;&gt;& lt;/div&gt;<br />& lt;/td&gt;<br />& lt;td width=&quot;72%&quot;&gt;<br />& lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Submit&quot;&gt;<br />& lt;input type=&quot;reset&quot; name=&quot;reset&quot; value=&quot;Reset&quot;&gt;<br />& lt;/td&gt;<br />& lt;/tr&gt;<br />& lt;/table&gt;<br />& lt;/div&gt;<br />& lt;/form&gt;<br />& lt;/body&gt;<br />& lt;/html&gt;<br />< br /> 这与普通的HTML没有任何区别,关键部分已经用黄色标记了。递交方法用POST,递交后处理的程序是adddatabase.asp(下一步就重点讨论它)。还有就是给每一个项目取一个名字(NAME,后面有用)。</span></p>http://www.downcc.com/tech/25.htmlAccess2009/04/06 00:28:15<p><span >dim appaccess, db, atable<br />< br /> set appaccess=createobject(&quot;access.application&quot;)< br /> set db=appaccess.dbengine.opendatabase(server.mappath(&quot;northwind.mdb&quot;))<br />< br /> for each atable in db.tabledefs<br />& nbsp;&nbsp;&nbsp;&nbsp;if instr(atable.name,&quot;Sys&quot;)=0 then<br />& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write atable.name +& quot;&lt;br&gt;&quot;<br />& nbsp;&nbsp;&nbsp;&nbsp;end if<br /> next<br />< br /> db.close<br /> appaccess.quit<br /> set db=nothing<br /> set appaccess=nothing<br /> 现存问题:<br /> 需要服务器安装access,而且每次都要启动access,这样肯定不行。<br /> 怎么能完全通过ado列举mdb中的table?</span></p>http://www.downcc.com/tech/24.htmlAccess2009/04/06 00:16:19<p><span style="line-height: 17pt">  </span>首先我们先讲讲设置和取消数据库密码。将鼠标单击ACCESS菜单栏上的&ldquo;工具&rdquo;主题,将鼠标移动到随后弹出的菜单上的&ldquo;安全&rdquo;项上,这时在&ldquo;安全&rdquo;项的右面弹出一个更小的菜单。将鼠标移动到这个菜单的第一项&ldquo;设置数据库密码&rdquo;上,单击鼠标左键。就会弹出一个&ldquo;设置数据库密码&rdquo;的对话框,</p>< p align="center"><img alt="" border="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/20094601837672.gif" /></p>< p align="left"><span style="line-height: 17pt">  在这个对话框中要我们在第一个文本框中要我们输入数据库密码,并在第二个文本框中再输入一遍刚才输入的密码,以保证我们输入的密码不会因为误输造成我们以后无法打开自己的数据库。将这些完成以后,就单击确定按钮。< br />   这时候弹出一个提示窗口,它提示要用独占方式打开数据库才能设置或撤销数据库密码。</span></p>< p align="center"><img alt="" border="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/2009460195285.gif" /></p>< p align="left"><span style="line-height: 17pt">  记住要设置数据库的密码时,必须要保证这个数据库的打开方式是独立打开方式。好在这个提示框中告诉我们怎样以独立方式打开一个数据库。那我们现在就单击这个提示框上的确定按钮,然后单击&ldquo;设置数据库密码&rdquo;对话框上的取消按钮。再单击数据库按钮上的关闭按钮来关闭这个数据库,然后再将鼠标移动到ACCESS工具栏上的打开图标按钮上,单击鼠标左键,这时会弹出一个&ldquo;打开&rdquo;对话框,</span></p>< p align="center"><img alt="" border="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/2009460195116.gif" /></p>< p align="left"><span style="line-height: 17pt">  在这个对话框中选择需要打开的数据库,然后将鼠标移动到这个对话框中&ldquo;打开&rdquo;按钮右面的向下按钮。在弹出的菜单中选择&ldquo;以独占方式打开&rdquo;,并单击这个选项。<br />   现在我们打开的数据库就可以设置它的密码了。按照刚才我们输入密码的过程再来一遍,这样就可以给这个数据库设置密码了。当下次打开这个数据库的时候,就会发现在打开数据库之前就会在屏幕上出现一个对话框,要求你输入这个数据库的密码。</span></p>< p align="center"><img alt="" border="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/2009460198528.gif" /></p>< p align="left"><span style="line-height: 17pt">  只有你输入正确的密码才能打开这个数据库,否则就不能打开这个数据库。< br />< br />   撤销密码也很简单,当你给一个数据库已经设置了一个密码后,要想撤销这个密码,就再用独立方式打开这个数据库,然后单击原来是&ldquo;设置数据库密码&rdquo;那个命令的位置,现在已经是&ldquo;撤销数据库密码&rdquo;命令了,单击这个命令,这时会在屏幕上弹出一个对话框,</span></p>< p align="center"><img alt="" border="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/2009460198374.gif" /></p>< p align="left"><span style="line-height: 17pt">  这次我们只要再输入一次正确的密码,就可以将这个数据库密码撤销了。</span></p>http://www.downcc.com/tech/23.htmlMySQL2009/04/05 23:58:07<p>&nbsp;&nbsp;&nbsp; 一、连接MYSQL。< br />< br /> 格式: mysql -h主机地址 -u用户名 -p用户密码< br />< br /> 1、例1:连接到本机上的MYSQL。< br />< br />& nbsp;& nbsp;&nbsp;&nbsp;首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql&gt;< br />< br /> 2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:< br />< br /> mysql -h110.110.110.110 -uroot -pabcd123< br />< br /> (注:u与root可以不用加空格,其它也一样)< br />< br /> 3、退出MYSQL命令: exit (回车)< br />< br />& nbsp;& nbsp;&nbsp;&nbsp;二、修改密码。< br />< br /> 格式:mysqladmin -u用户名 -p旧密码 password 新密码< br />< br /> 1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令< br />< br /> mysqladmin -uroot -password ab12< br />< br /> 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。< br />< br /> 2、例2:再将root的密码改为djg345。< br />< br /> mysqladmin -uroot -pab12 password djg345< br />< br />& nbsp;& nbsp;&nbsp;&nbsp;三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)< br />< br /> 格式:grant select on 数据库.* to 用户名@登录主机 identified by \&quot;密码\&quot;< br />< br /> 例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:< br />< br /> grant select,insert,update,delete on *.* to test1@\&quot;%\&quot; Identified by \&quot;abc\&quot;;< br />< br /> 但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。< br />< br />& nbsp;& nbsp;&nbsp;&nbsp;例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。< br />< br /> grant select,insert,update,delete on mydb.* to test2@localhost identified by \&quot;abc\&quot;;< br />< br /> 如果你不想test2有密码,可以再打一个命令将密码消掉。< br />< br /> grant select,insert,update,delete on mydb.* to test2@localhost identified by \&quot;\&quot;;< br />< br />& nbsp;& nbsp;&nbsp;&nbsp;在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。< br />< br /> 一、操作技巧< br />< br /> 1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。< br />< br /> 2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。< br />< br /> 二、显示命令< br />< br /> 1、显示数据库列表。< br />< br /> show databases;< br />< br /> 刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。< br />< br /> 2、显示库中的数据表:< br />< br /> use mysql; //打开库,学过FOXBASE的一定不会陌生吧< br />< br /> show tables;< br />< br /> 3、显示数据表的结构:< br />< br /> describe 表名;< br />< br /> 4、建库:< br />< br /> create database 库名;< br />< br /> 5、建表:< br />< br /> use 库名;< br />< br /> create table 表名 (字段设定列表);< br />< br /> 6、删库和删表:< br />< br /> drop database 库名;< br />< br /> drop table 表名;< br />< br /> 7、将表中记录清空:< br />< br /> delete from 表名;< br />< br /> 8、显示表中的记录:< br />< br /> select * from 表名;< br />< br /> 三、一个建库和建表以及插入数据的实例< br />< br /> drop database if exists school; //如果存在SCHOOL则删除< br />< br /> create database school; //建立库SCHOOL< br />< br /> use school; //打开库SCHOOL< br />< br /> create table teacher //建立表TEACHER< br />< br /> (< br />< br /> id int(3) auto_increment not null primary key,< br />< br /> name char(10) not null,< br />< br /> address varchar(50) default& rsquo;深圳&rsquo;,< br />< br /> year date< br />< br /> ); //建表结束< br />< br /> //以下为插入字段< br />< br /> insert into teacher values(&rsquo;&rsquo;,&rsquo;glchengang&rsquo;,&rsquo;深圳一中&rsquo;,&rsquo;1976-10-10&rsquo;);< br />< br /> insert into teacher values(&rsquo;&rsquo;,&rsquo;jack&rsquo;,&rsquo;深圳一中&rsquo;,&rsquo;1975-12-23&rsquo;);< br />< br />& nbsp;& nbsp;&nbsp;&nbsp;注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。< br />< br /> 如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令:< br />< br /> mysql -uroot -p密码& lt; c:\\school.sql< br />< br /> 如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。< br />< br /> 四、将文本数据转到数据库中< br />< br /> 1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替.< br />< br /> 例:< br />< br /> 3rose 深圳二中 1976-10-10< br />< br /> 4 mike 深圳一中 1975-12-23< br />< br /> 2、数据传入命令 load data local infile \&quot;文件名\&quot; into table 表名;< br />< br /> 注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。< br />< br /> 五、备份数据库:(命令在DOS的\\mysql\\bin目录下执行)< br />< br /> mysqldump --opt school&gt;school.bbb< br />< br /> 注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。< br />< br />& nbsp;& nbsp;&nbsp;&nbsp;后记:其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是&ldquo;晏子&ldquo;译的&ldquo;MYSQL中文参考手册&ldquo;不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象\&quot;PHP4中文手册\&quot;那样是chm的格式,在查找函数命令的时候不太方便。</p>http://www.downcc.com/tech/22.htmlSQL Server2009/04/05 23:21:51<p>在<a target="_blank" href="http://www.downcc.com/soft/7639.html">SQL2005</a>附加过后的数据库,不能再被2000附加了<br /> 如果想还原到<a target="_blank" href="http://www.downcc.com/soft/21204.html">SQL2000</a>,目前我用的方法是在sql 2005中生成数据库的脚本,</p>< p><img border="0" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945234643313.jpg" /></p>< p><img border="0" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945234646228.jpg" /></p>< p>如果是所有的数据请勾选:Script all objects in the selected database</p>< p><img border="0" alt="" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945234646254.jpg" /></p>< p>注意生成的时候, 要选择生成sql 2000这个版本的脚本然后在2000中用这个脚本建立目标库,< br /> 再用数据导入/导出工具或查询分析器,把数据从2005导到2000即可.<br /> 关系图需要自己重新建立!</p>http://www.downcc.com/tech/21.htmlSQL Server2009/04/05 22:34:07<p>  在使用 SQL Server 的过程中,用户遇到最多的问题莫过于连接失败了。一般而言,有两种连接SQL Server 的方式,一是利用 SQL Server 自带的客户端工具,如企业管理器、查询分析器、事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本、VB程序等,客户端程序中又是利用 ODBC 或者OLE DB等连接 SQL Server。下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题。< br />< br />   <b>一、&quot;SQL Server 不存在或访问被拒绝&quot;</b><br />< br />< table width="90%" align="center">< tbody>< tr>< td>< div align="center"><img alt="SQLServer连接失败错误故障的分析与排除" border="1" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945223618743.jpg" /><br /> (图1)</div>< /td>< /tr>< /tbody>< /table>< br />   &quot;SQL Server 不存在或访问被拒绝&quot;错误,通常是最容易发生的,因为错误发生的原因比较多,所以需要检查的方面也比较多。<br />< br />   一般说来,有以下几种可能性:<br />< br />   1、网络连接问题;<br />< br />   2、SQL Server服务器问题;<br />< br />   3、服务器端网络配置问题;<br />< br />   4、客户端网络配置问题。<br />< br />   首先,我们检查网络连接:<br />< br />   1、ping服务器IP地址。首先先关闭服务器和客户端的防火墙,这是为了排除防火墙软件可能会屏蔽对 ping,telnet 等的响应。然后开始ping服务器IP地址,如果 ping服务器IP地址不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等。<br />< br />   2、ping服务器名称。如果失败则说明名字解析有问题,这时候要检查Netbuis协议是否安装、;DNS 服务是否正常。<br /> 其次,使用 telnet 命令检查SQL Server服务器工作状态。如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明 SQL Server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接;如果命令返回&quot;无法打开连接&quot;的错误信息,则说明服务器没有启动 SQL Server 服务,也可能服务器端没启用 TCP/IP 协议,或者服务器没有在 SQL Server 默认的端口1433上监听。<br />< br />   最后,我们要检查服务器、客户端网络配置。服务器检查是否启用了命名管道;是否启用了 TCP/IP 协议等等。我们可以利用 SQL Server 自带的服务器网络使用工具来进行检查。<br />< br />   单击:程序-&gt; Microsoft SQL Server 服务器网络使用工具;打开该工具后,在&quot;常规&quot;中可以看到服务器启用了哪些协议,默认我们启用命名管道以及 TCP/IP 协议。点中 TCP/IP 协议,选择&quot;属性&quot;,我们可以来检查 SQK Server 服务默认端口的设置。一般而言,我们使用 SQL Server 默认的1433端口。如果选中&quot;隐藏服务器&quot;,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接。<br />< br />< table width="90%" align="center">< tbody>< tr>< td>< div align="center"><img alt="SQLServer连接失败错误故障的分析与排除" border="1" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945223619986.jpg" /><br /> (图2)<br />< img alt="SQLServer连接失败错误故障的分析与排除" border="1" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945223619731.jpg" /><br /> (图3)</div>< /td>< /tr>< /tbody>< /table>< br />   接下来我们要到客户端检查客户端的网络配置。我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,所不同的是这次是在客户端来运行这个工具。单击:程序-&gt; Microsoft SQL Server 客户端网络使用工具打开该工具后,在&quot;常规&quot;项中,可以看到客户端启用了哪些协议。同样,我们需要启用命名管道以及 TCP/IP 协议。点击 TCP/IP 协议,选择&quot;属性&quot;,可以检查客户端默认连接端口的设置,该端口必须与服务器一致。<br />< br />< table width="90%" align="center">< tbody>< tr>< td>< div align="center"><img alt="SQLServer连接失败错误故障的分析与排除" border="1" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945223619609.jpg" /><br /> (图4)</div>< /td>< /tr>< /tbody>< /table>< br />   通过以上几个方面的检查,基本上可以排除第一种错误。</p>< p>  <b>二、&quot;无法连接到服务器,用户xxx登陆失败&quot;< /b><br />< br />< table width="90%" align="center">< tbody>< tr>< td>< div align="center"><img alt="SQLServer连接失败错误故障的分析与排除(2)" border="1" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945223623658.jpg" /><br /> (图5)</div>< /td>< /tr>< /tbody>< /table>< br />   该错误产生的原因是由于SQL Server使用了&quot;仅 Windows&quot;的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接。解决方法如下所示:<br />< br />   1、在服务器端使用企业管理器,并且选择&quot;使用 Windows 身份验证&quot;连接上 SQL Server;<br />< br />   2、展开&quot;SQL Server组&quot;,鼠标右键点击SQL Server服务器的名称,选择&quot;属性&quot;,再选择&quot;安全性&quot;选项卡;<br />< br />   3、在&quot;身份验证&quot;下,选择&quot;SQL Server和 Windows& quot;;<br />< br />   4、重新启动SQL Server服务。<br />< br />   在以上解决方法中,如果在第1步中使用&quot;使用 Windows 身份验证&quot;连接 SQL Server 失败,那就通过修改注册表来解决此问题:<br />< br />   1、点击&quot;开始&quot;& quot;运行&quot;,输入regedit,回车进入注册表编辑器;</p>< p>  2、依次展开注册表项,浏览到以下注册表:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer];<br />< br />   3、在屏幕右方找到名称&quot;LoginMode&quot;,双击编辑双字节值;<br />< br />   4、将原值从1改为2,点击&quot;确定&quot;;<br />< br/>   5、关闭注册表编辑器;<br />< br />   6、重新启动SQL Server服务。<br />< br />   此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,但是仍然无法使用Windows身份验证模式来连接SQL Server。这是因为在 SQL Server 中有两个缺省的登陆户:<br />< br />< table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">< tbody>< tr>< td>BUILTIN\Administrators<br />& lt;机器名&gt;\Administrator 被删除。</td>< /tr>< /tbody>< /table>< br />   要恢复这两个帐户,可以使用以下的方法:<br />< br />   1、打开企业管理器,展开服务器组,然后展开服务器;<br />< br />   2、展开&quot;安全性&quot;,右击&quot;登录&quot;,然后单击&quot;新建登录&quot;;<br />< br />   3、在&quot;名称&quot;框中,输入 BUILTIN\Administrators;<br />< br />   4、在&quot;服务器角色&quot;选项卡中,选择&quot;System Administrators&quot; ;<br />< br />   5、点击&quot;确定&quot;退出;<br />< br />   6、使用同样方法添加& lt;机器名&gt;\Administrator 登录。<br />< br />   说明:<br />< br />   以下注册表键:<br />< br />   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode的值决定了SQL Server将采取何种身份验证模式。<br />< br />   1、表示使用&quot;Windows 身份验证&quot;模式;<br />< br />   2、表示使用混合模式(Windows 身份验证和 SQL Server 身份验证)。<br />< br />   <b>三、提示连接超时</b><br />< br />< table width="90%" align="center">< tbody>< tr>< td>< div align="center"><img alt="SQLServer连接失败错误故障的分析与排除(2)" border="1" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945223623862.jpg" /><br /> (图6)</div>< /td>< /tr>< /tbody>< /table>< br />   如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,不过是由于连接的时间大于允许的时间而导致出错。这种情况比较少见,一般发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,并且是慢速连接时,有可能会导致以上的超时错误。有些情况下,由于局域网的网络问题,也会导致这样的错误。<br />< br />   要解决这样的错误,可以修改客户端的连接超时设置。默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,而查询分析器是 15 秒。<br />< br />   具体步骤为:<br />< br />   企业管理器中的设置:<br />< br />   1、在企业管理器中,选择菜单上的&quot;工具&quot;,再选择&quot;选项&quot;;<br />< br />   2、在弹出的&quot;SQL Server企业管理器属性http://www.downcc.com/tech/20.htmlSQL Server2009/04/05 22:21:05<p>如果您数据库系统安装在系统盘(比如 C 盘),由于 C 盘容易受病毒侵害,您也许希望您的数据存放在非系统盘(比如 D 盘),要做的这点很简单,您并不需要重装数据库,只要把数据&ldquo;分离&rdquo;,然后将相关文件移动到 D 盘的某个目录,接着&ldquo;附加&rdquo;数据库即可。</p>< p>SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上。分离数据库将从 SQL Server 删除数据库,但是保证在组成该数据库的数据和事务日志文件中的数据库完好无损。然后这些数据和事务日志文件可以用来将数据库附加到任何 SQL Server 实例上,这使数据库的使用状态与它分离时的状态完全相同。</p>< p>数据库分离和附加其实很简单,您即使是初次接触数据库,做起来也很容易。</p>< p>一、分离数据库</p>< p>1、点击&ldquo;程序》Microsoft SQL Server》企业管理》&rdquo;,打开企业管理器</p>< p>2、展开服务器组,然后展开服务器,选中要分离的数据库</p>< p>3、点击鼠标右键&ldquo;所有任务》分离数据库&rdquo;,出现如下窗口</p>< p><img alt="" border="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945222429308.gif" /></p>< p>4、点击确定,该选定的数据库就被分离(分离后的数据库和事务日志文件路径就是它们原先所在的路径)。</p>< p>应注意,只有&ldquo;使用本数据库的连接&rdquo;数为0时,该数据库才能分离。所以分离数据库时尽量断开所有对要分离数据库操作的连接,如果还有连接数据库的程序,会出现数据库的连接状态窗口,显示正在连接此数据库的机器以及名称,点击清除按钮将从服务器强制断开现有的连接。</p>< p>二、附加数据库</p>< p>1、复制移动数据库文件</p>< p>在附加数据库之前,您必须将与数据库关联的 .MDF(主数据文件).LDF(事务日志文件) 这两个文件复制到目标服务器上,或是同一服务器的不同文件目录下。</p>< p>2、点击&ldquo;程序》Microsoft SQL Server》企业管理》&rdquo;,打开企业管理器</p>< p>3、展开服务器组,然后展开服务器</p>< p>4、右击&quot;数据库&quot;,然后选择&ldquo;所有任务》附加数据库&rdquo;,弹出窗口</p>< p><img alt="" border="0" style="cursor: pointer" src="http://pic.pdowncc.com/upload/tech/UploadPic/2009-4/200945222430832.gif" /></p>< p>5、输入要附加的数据库的 MDF 名称。如果不确定文件位于何处,单击浏览(&quot;...&quot;)搜索。若要确保指定的 MDF 文件正确,请单击&quot;验证&quot;。在&quot;附加为&quot;框内,输入数据库的名称。数据库名称不能与任何现有数据库名称相同。指定数据库的所有者</p>< p>6、单击&quot;确定&quot;按钮。新附加的数据库的数据库节点即创建在&quot;数据库&quot;文件夹中。</p>