分享、学习、提高
Thank you for reading...
2008/01/21 14:47
Tags: ,
很久以前刚学php时查过,如果在linux下要用php连接MSSQL,说是还需要额外安装软件,很麻烦D!今天碰到需要,就研究了一下。

其实挺简单,就是装一个freetds,然后重新编译php即可。以下是我安装的较详细的步骤以及一些说明:

FreeTDS的功能主要是在Liunx下能够访问Sybase及MS SQL,官方网站是:http://www.freetds.org/

下了最新版0.64,
wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-0.64.tar.gz
解压:
tar -zxf freetds-0.64.tar.gz
cd freetds-0.64
安装在/usr/local/freetds,要支持MSSQL2000,就要加以下两个参数:--with-tdsver=8.0 --enable-msdblib
./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
make;make install
FreeTDS安装完成,然后重编译php。
看一下phpinfo()的配置参数,后面加了 --with-mssql=/usr/local/freetds ,重新编译。

完成后,phpinfo中会多了一些内容,我的是:
mssql
MSSQL Support enabled
Active Persistent Links  0  
Active Links  0  
Library version  FreeTDS  

哈,就是支持MSSQL了:)

写一个简单程序测试一下:
<?
$msconnect = mssql_connect('192.168.1.48','sa','123456');
?>

运行没有报错,完成!

如果没有装FreeTDS,则会报错:
Fatal error: Call to undefined function mssql_connect() in /www/test/mssql.php on line 2

参考文章:
FreeTDS的安装与配置
Liunx下访问SQL2000的好工具!
2008/01/09 10:27
Tags: ,
本机用php连接远程MSSQL,代码
<?php
$linkId = mssql_connect('IP地址','用户名','密码');
?>

提示
引用
mssql_connect() [function.mssql-connect]: Unable to connect to server


而同事就可以连,他比较了ntwdblib.dll这个文件,版本都是2000.2.8.0。唯一不同的是他的机子装了MSSQL,怀疑是这个原因。

搜索了下,发现确实是这个原因。也有不少人碰到装了MSSQL就可以连远程MSSQL,没装则不行。

试验了下,发现原因还是在于NTWDBLIB.DLL这个文件。我本机是php5自带的,版本为2000.2.8.0,他也是。

在MSSQL光盘中搜索这个文件,找到NTWDBLIB.DLL,版本是2000.80.194.0。

将这个文件,Copy到php安装目录和c:\windows\system32目录下,停掉IIS或Apache。

重启,连接成功:)

为方便碰到此问题的朋友,我打包了NTWDBLIB.DLL这个文件,下载后解压即可:

另请注意:
如果更改了默认的1433端口号,则IP地址后面加端口号,用,号隔开,不是:号,如
$linkId = mssql_connect('IP地址,端口号','用户名','密码');
2007/11/29 19:28
Tags: ,
前几天,帮一个朋友恢复MSSQL数据库。机子可能因为重启的原因导致了数据库不见了。
2007/07/07 10:30
Tags: , ,
一大早起来,朋友在QQ上急问说:
引用

xxx 00:22:10
某数据库出现置疑,我按照
http://www.itlearner.com/article/2005/1375.shtml
xxx 00:22:35
在分离数据库时说分离失败,然后在数据库就消失了
xxx 07:39:39
我现在用一个多月前备份的
我 09:28:37
那现在用的你有没有换一个数据库名?
xxx 09:24:34
我就是右键,分离数据库,提示失败,在企业管理里一看,数据库没有了
xxx 09:25:02
没有换数据库名,但是我把那个mdf和log文件复制了一份


上服务器看一下,先停止MSSQL。把其一个月前备份的改个名字,将昨天出现问题的数据库.mbf和ldf文件恢复成原数据库名。重启MSSQL,在数据库列表中就看到它了:)只是后面有个(置疑)。

然后参照上面那篇文章说的运行:

USE MASTER
GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='hxdbname'
Go

sp_dboption 'hxdbname', 'single user', 'true'
Go

DBCC CHECKDB('test')
Go

update sysdatabases set status =28 where name='hxdbname'
Go

sp_configure 'allow updates', 0 reconfigure with override
Go

sp_dboption 'hxdbname', 'single user', 'false'
Go


1分钟后,下面显示了结果,看到了许多索引错误。如:

服务器: 消息 8909,级别 16,状态 1,行 2
表错误: 对象 ID 0,索引 ID 0,页 ID (1:60296)。页首结构中的 PageId = (0:0)。
'hxdbname' 的 DBCC 结果。
CHECKDB 发现了 0 个分配错误和 1 个一致性错误,这些错误并不与任何单个的对象相关联。
.......
表错误: 数据库 'hxdbname',索引 'Hx_Fav.bookid'(ID 133575514)(索引 ID 2)。下列键的键多余或无效:
服务器: 消息 8956,级别 16,状态 1,行 2
索引行(1:25141:294)(其值为 favid = 1172 and id = 212014)指向由  标识的数据行。
服务器: 消息 8952,级别 16,状态 1,行 2
表错误: 数据库 'hxdbname',索引 'Hx_Fav.bookid'(ID 133575514)(索引 ID 2)。下列键的键多余或无效:
服务器: 消息 8956,级别 16,状态 1,行 2
索引行(1:50440:363)(其值为 favid = 6070 and id = 212012)指向由  标识的数据行。
服务器: 消息 8952,级别 16,状态 1,行 2
........

先不管这些,此时网站就可以使用了:)

但是出现了这些索引错误,应该修复一下才对。于是,使用dbcc dbreindex('Hx_Fav'),提示
引用

服务器: 消息 3908,级别 16,状态 1,行 1
未能在数据库 'hxdbname' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。


同时,在网站访问时也出现了类似的错误。
引用

Microsoft OLE DB Provider for SQL Server 错误 '80004005'

未能在数据库 'hxdbname' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。

/book/log_show.asp,行 78  


网上找下资料,还是只能通过新建一个数据库,将数据库导入的方法来解决:(

新建一个数据库,将原数据库导入,选上了“扩展选项”,导入还算顺利。

然后将出现错误提示的表一一dbcc dbreindex了一下。

最后dbcc checkdb,没有显示错误了。

修改网站的连接数据库代码,问题解决:)
2007/05/20 22:37
Tags:
朋友的一个网站经常一天之中会出现几次访问很慢甚至完全打不开的情况,开始一直怀疑是程序问题,也优化了些,但是一直没能彻底解决。

前几天,比较严重的问题出现了。经常卡,有时iisreset完后就马上卡。我在服务器上的事件日志中,突然发现大量的SQL事件,打开一看,类似如下描述:

17052:
SQL Server 已为 8 个并发查询而优化。1 个查询超过了此限制,因而性能可能会受到不良影响。


搜索引擎中查一下,说是sql版本问题,改成企业版就行了。

咦,难道安装的不是企业版?先看看是什么版本,select @@version看下,显示
Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)   May  3 2005 23:18:38   Copyright (c) 1988-2003 Microsoft Corporation  Personal Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
晕,真的是个人版。。。

第二天,他让重装了企业版,程序没动,到现在还没有发现有访问非常慢的情况,看来这个SQL个人版是造成这个问题的罪魁祸首!我估计访问量只要稍大(超过1wIP),用SQL个人版就可能会出问题。

引用
SQL Server 2000 桌面版和 SQL Server 2000 个人版都有一个并发工作负荷调控器,可在并发执行 5 个以上的批处理时限制数据库引擎的性能。
并发工作负荷调控器限制了数据库引擎的性能。当同时执行五个以上的批处理命令时,个别 Transact-SQL 批处理命令的性能将降低。
来源:http://www.9zhidao.cn/info/8304.htm


另有一篇的解决方法:
引用
你的服务器上有 多个 CPU?
用sp_configure 改一下 cost threshod for parallelism,和max degree of parallelism
的值,企业服务器的 server属性的处理器页也有这个选项.
你在企业管理器中的'处理器'页下有个'并发',其中的最小查询计划阀值改一个看行不行.
还有连接页下的并发用户连接数也看一下
来源:http://www.9zhidao.cn/info/23105.htm
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]