如何禁用/屏蔽IBM笔记本Fn+空格键的屏幕放大功能
2、任务管理器杀掉TpScrex.exe
经常调整输入法按错,导致桌面上的图标乱套,这下世界清净了。
一组双节点的Windows 2003群集,配合IBM DS4300磁盘阵列,安装了SQL Server 2000,A机安装完最新的安全补丁之后,将此节点上的SQL Server 2000服务切换到B机,重启A机之后发现Cluster Service无法启动,使用事件查看器检查系统日志,发现有以下错误记录:
Event Type: Warning
Event Source: ql2300
Event Category: None
Event ID: 118
Date: 2008-6-11
Time: 20:10:42
User: N/A
Computer: IAMS-DB2-1
Description:
The driver for device \Device\Scsi\ql23001 performed a bus reset upon request.
Event Type: Error
Event Source: ClusSvc
Event Category: Startup/Shutdown
Event ID: 1009
Date: 2008-6-11
Time: 20:11:19
User: N/A
Computer: IAMS-DB2-1
Description:
Cluster service could not join an existing server cluster and could not form a new server cluster. Cluster service has terminated.
Event Type: Error
Event Source: Service Control Manager
Event Category: None
Event ID: 7031
Date: 2008-6-11
Time: 20:11:20
User: N/A
Computer: IAMS-DB2-1
Description:
The Cluster Service service terminated unexpectedly. It has done this 3 time(s). The following corrective action will be taken in 240000 milliseconds: Restart the service.
开始怀疑是磁盘阵列状态迁移记录问题,类似的问题原来遇到过(read.php?549),本计划找机房的同事协助将两个节点和磁盘阵列都关闭,然后先开磁盘阵列,再开一个节点,正常后,最后再开另外一个节点。但这个准备作为最后一招,先看能不能远程解决。
先将节点A又重启,群集服务依然无法启动;在节点A中进入设备管理器,将RDAC Muti-Path Pseudo-Bus和两个QLogic QLA2340 PCI Fiber Channel Adapter禁用,重启节点A之后再启用这些设备,还是无效。
在正常启动的节点B上检查,突然发现在资源管理器中只看到SQL Server群集组下面的一个磁盘分区,本来是绑定了两个的。在磁盘管理中可以看到对应的几个分区,进入命令行,切换盘符到这个看不到的分区,提示驱动器没有准备好,在SQL Server企业管理器中尝试打开一些数据文件放在这个看不到分区的时候,企业管理器出现挂死状态,在群集管理器中看到SQL Server组自动脱机又重新联机,再查看之前有问题的那个分区,竟然正常了。再重启节点A,群集服务正常启动,也正常加入了群集,各个应用组切换也正常,问题消失。
最后检查之前出现问题的磁盘,发现里面有两个补丁安装文件的临时目录,考虑到补丁安装需要重启,且这些目录没有被正常清除掉,所以判断引起故障的原因是安装的补丁占用了SQL Server一个分区作为临时文件存放,安装之后某些文件挂起,需要重启之后才能被清理,但是这时又将节点A上的应用切换到了B上,导致这个磁盘未能被节点B正常获取(或者是某些资源状态),进而在节点A启动的时候,群集也在尝试抓取这个分区,导致出现“The driver for device \Device\Scsi\ql23001 performed a bus reset upon request.”错误,群集服务也就无法正常启动。
最后总结就一句话:群集上安装补丁,先将此节点上的全部应用组全部转移走后,再进行补丁安装!
PS. 如果采用之前准备的最后一招,我想应该也是可以解决这个问题的。
备忘,以SSG550为例,进入WEB管理界面,操作如下:
1.增加公网VIP
Network
Interfaces
ethernet0/2 211.136.199.14/28 Edit
VIP
*ADD Virtual IP Address
2.绑定内网IP、端口
*New VIP Service
选择Map to Service 如果没有需要先添加Service
填写Map to IP
选择Server Auto Detection
3.设置策略
Policies
Untrust>Trust
*New
Destination Address 选择VIP
选择Service
选择Logging
#如何添加Service
Objects
Services
Custom
*New
Service Timeout Use protocol default
选择协议类型 TCP/UDP
Source Port Low 0 High 65535
Destination Port 要映射的端口
同一个公网IP的不同端口可以映射在内网不同IP的端口
什么是EXIF(网上抄来的):
Exif是英文Exchangeable Image File(可交换图像文件)的缩写,最初由日本电子工业发展协会(JEIDA --Japan Electronic Industry Development Association) 制订,目前的最新版本是2.21 版。国际标准化组织(ISO)正在制订的相机文件设计标准(DCF -- Design role for Camera File system)可能以Exif2.1为基础。
Exif 文件实际是JPEG文件的一种,遵从JPEG标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以你可以使用任何支持JPEG格式的图像工具软件观看或修改Exif文件,但,打开时可能看不到Exif信息,一旦修改,Exif信息可能丢失。
简单来说,EXIF 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部,也就是说 EXIF 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过 EXIF 信息所记录的资讯更为详尽和完备。
包含EXIF信息的JPEG文件:
所有的JPEG文件以字符串“0xFFD8”开头(SOI),并以字符串“0xFFD9”结束(EOI),一个JPEG文件的格式大致如下图一(Exif2-2.PDF 第11页):
APP1 Maker固定为0xFFE1
APP1 Length是一个2bytes的SHORT
Exif Identifier Code为6bytes,前4bytes是字符"EXIF",后2bytes是0x00
TIFF Headers的结构可以参考下表一(Exif2-2.PDF 第10页):
TIFF Header开始到最后的详细结构可以查考如下图二(Exif2-2.PDF 第9页):
如果是要获取一张照片拍摄的相关信息,一般来说我们主要是需要关注的结构有0th IFD、Exif IFD,还有一个就是MakerNote。
0th IFD一般称为“图像信息”,里其中包含了相机厂商、相机型号、拍摄时间和Exif IFD结构入口的指针(TAG为0x8769);
Exif IFD一般称为“相机拍摄记录”,其中包含了快门、光圈、测光模式、ISO等拍摄参数信息,还有就是包含了MakerNote结构的入口指针(TAG为0x927C);
MakerNote一般称为“厂商注释”,这个是个最混乱的结构,因为不同的厂商都有自己定义的结构,里面都是一些厂商定义的信息,例如Nikon在里面定义了镜头相关的信息,ISO数值;对于D70之类N家的“老”相机,ISO数值是没有按照规范记录在Exif IFD中的,并且MakerNote中的这个字段还没有遵照文件中多字节存储顺序(big-endian和little-endian)存放,很是神奇。
phpexif:
最近给公司的摄影协会搞了个Discuz!论坛,论坛最大的目的就是交流相片,于是考虑做些改动,在页面上直接显示上传照片的Exif信息。在网上找了一下,解决的方法多数都是启用PHP自带的Exif函数,然后修改include\attachment.func.php和模板templates\default\discuzcode.htm,但是试用之后我发现php的Exif函数有些问题,有些信息显示出来格式有问题,我的php版本是4.4.7,于是改用我自己原来为自己的相册写的一个函数替代。发现原来写得很粗糙,很多问题都没有考虑,兴致一来,决定重写一个。
这次的这个版本使用了面向对象的结构,相对规整,而且对一些情况考虑得也周全一些,不过只是用来获取有限的一些参数,其他的暂时忽略不计。且对于MakerNote结构,也只是针对Nikon的jpeg文件获取了ISO数值,Nikon文件的其他信息和其他品牌的MakerNote均未涉及。一些功能也不通用,放上来主要供有兴趣的人参考或者修改使用。
版本:v0.1
功能:获取指定jpeg文件的如下Exif信息,相机厂商、相机型号、快门、光圈、曝光程序、测光模式、拍摄时间、感光度、闪光灯模式、焦距、曝光补偿、白平衡模式、等价35mm焦距、感光度,并输出成固定格式的HTML字符串
下载
参考资料:
这里还有一个压缩包包含了一些我收藏的参考资料供大家使用:
1、JEIDA 制定的EXIF 2.1官方标准 (1998.6.12)
2、JEIDA 制定的EXIF 2.2 官方标准 (2002.4)
3、EXIF 文件格式说明,一个日本人写的EXIF英文参考文档,内容有点旧,不过还是比官方规范好读很多;原始下载地址已经404错误了,好在我有备份
4、Nikon Tags说明
下载
在Discuz! 6.0中增加图片显示Exif信息的方法:
大家可以参考《数码相片EXIF信息For DZ 6.0正式版》:http://www.discuz.net/viewthread.php?tid=733174
将phpexif.php上传到Discuz! 6.0的include目录,将文中include\attachment.func.php中添加的代码改为:
/*******EXIF信息**********/
if (($extension == 'jpg' || $extension == 'jpeg'))
{
require_once("./include/phpexif.php");
if (!isset($ex) || $ex == null)
{
$ex = new EXIF();
}
$ex->get_exif("./attachments/".$attach['attachment']);
$attach['exif'] = $ex->TAG->to_string();
}
/*******EXIF信息**********/
显示效果如下:
Exif查看工具推荐:
最后还是推荐查看Exif的IE插件Opanda IExif,下载地址:http://www.opanda.com/cn/iexif/download.htm,方便查看更多Exif信息。
SQL Server中存储过程和触发器一般只会在初次编译时进行优化,之后如果相关的索引或数据库统计发生变化后,已编译的存储过程和触发器不会随之更新优化,可能会导致执行效率低下甚至失效,解决方法:
1、删除重新创建存储过程或触发器,也可以用ALTER方法代替
2、SQL Server提供了sp_recompile用于设置强制编译标识,存储过程或者触发器下次被使用的时候会先重新编译定制优化
3、在创建存储过程的时候使用WITH_RECOMPILE选项,指明不创建优化计划缓存,在每次执行之前都重新编译,但这个会导致存储过程执行数据缓慢;
类似,有时修改完表之后,与之关联视图也有可能不会自动刷新,导致出现一些奇观的问题,例如查询出来的数据列是错位的等,解决方法:
1、删除重新创建视图,也可以用ALTER方法提到
2、SQL Server提供了sp_refreshview方法强制刷新视图
为了自己方便,写了一个自动获取整个数据库中所有数据库实例中用户创建的的存储过程、触发器和视图进行强制刷新的SQL,可将其添加到数据库的JOB中周期执行:
--重新编译存储过程、触发器
use tempdb
go
--create temp table
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[gmcc_recompile_info]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
delete from gmcc_recompile_info
else
create table gmcc_recompile_info
(
dbname varchar(255),
objtype varchar(255),
objowner varchar(255),
objname varchar(255)
)
GO
--get all store procdure info
declare @dbname as varchar(255)
declare xx cursor for
select name from master.dbo.sysdatabases
open xx
fetch next from xx into @dbname
while @@fetch_status = 0
begin
exec('use [' + @dbname + '] insert into tempdb.dbo.gmcc_recompile_info select ''' + @dbname + ''', xtype, sysusers.name, sysobjects.name from sysobjects left join sysusers on sysobjects.uid=sysusers.uid where (xtype=''P'' or xtype=''TR'' or xtype=''V'') and category=0');
fetch next from xx into @dbname
end
close xx
DEALLOCATE xx
--set recompile
declare @objtype as varchar(255)
declare @objowner as varchar(255)
declare @objname as varchar(255)
declare yy cursor for
select dbname, objtype, objowner, objname from tempdb.dbo.gmcc_recompile_info
open yy
fetch next from yy into @dbname, @objtype, @objowner, @objname
while @@fetch_status = 0
begin
if @objtype='P' --storeprocedure
exec('use [' + @dbname + '] exec sp_recompile ''[' + @objowner + '].[' + @objname + ']''')
else if @objtype='TR' --trigger
exec('use [' + @dbname + '] exec sp_recompile ''[' + @objowner + '].[' + @objname + ']''')
else if @objtype='V' --view
exec('use [' + @dbname + '] exec sp_refreshview ''[' + @objowner + '].[' + @objname + ']''')
fetch next from yy into @dbname, @objtype, @objowner, @objname
end
close yy
DEALLOCATE yy
--drop temp table
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[gmcc_recompile_info]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table gmcc_recompile_info
GO
上述SQL存在两个问题尚未解决:
1、由于sp_refreshview刷新视图的及时执行的,如果由于数据库表发生变化,导致某个视图刷新失败的话,整个过程就会停止下来,导致后面的刷新不能进行;
2、不支持数据库名称包含中文的情况
看起来是连接成功了ASPState服务的,但是服务出错,搜索错误代码0x80072747,提示:
WSAENOBUFS (0x80072747)
No buffer space available.
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
貌似内存管理的问题,Google出来的信息非常有限,有4-5个有相同问题,但是均没有答案。完全没有头绪了。想了很久,折腾了很久,突然想到boot.ini中开启了/3GB开关:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /3GB
将/3GB开关去掉,重启,恢复~~!怀疑是ASPState在大内存管理下有BUG造成。
天才呀,这个都能想到,其实还是运气好。下班,咔咔。