Linux下没有专门为MSSQL设计的访问库,不过介于MSSQL本是从sybase派生出来的,因此用来访问Sybase的库自然也能访问MSSQL,FreeTDS就是这么一个实现。Perl中通常使用DBI来访问数据库,因此在系统安装了FreeTDS之后,可以使用DBI来通过FreeTDS来访问MSSQL数据库,例子:复制代码 代码如下:using DBI;my $cs = "DRIVER={FreeTDS};SERVER=主机;PORT=1433;DATABASE=数据库;UID=sa;PWD=密码;TDS_VERSION=7.1;charset=gb2312";my $dbh = DBI->connect("dbi:ODBC:$cs") or die [email protected];因为本人不怎么用windows,为了研究QQ群数据库,需要将数据从MSSQL中迁移到MySQL中,特地为了QQ群数据库安装了一个Windows Server 2008和SQL Server 2008r2,不过过几天评估就到期了,研究过MySQL的Workbench有从MS SQL Server迁移数据的能力,不过对于QQ群这种巨大数据而且分表分库的数据来说显得太麻烦,因此写了一个通用的perl脚本,用来将数据库从MSSQL到MySQL迁移,结合bash,很方便的将这二十多个库上百张表给转移过去了,Perl代码如下:复制代码 代码如下:#!/usr/bin/perluse strict;use warnings;use DBI;die "Usage: qq db\n" if @ARGV != 1;my $db = $ARGV[0];print "Connectin to databases $db...\n";my $cs = "DRIVER={FreeTDS};SERVER=MSSQL的服务器;PORT=1433;DATABASE=$db;UID=sa;PWD=MSSQL密码;TDS_VERSION=7.1;charset=gb2312";sub db_connect{    my $src = DBI->connect("dbi:ODBC:$cs") or die [email protected];    my $target = DBI->connect("dbi:mysql:host=MySQL服务器", "MySQL用户名", "MySQL密码") or die [email protected];    return ($src, $target);}my ($src, $target) = db_connect;print "Reading table schemas....\n";my $q_tables = $src->prepare("SELECT name FROM sysobjects WHERE xtype = 'U' AND name != 'dtproperties';");#获取所有表名my $q_key_usage = $src->prepare("SELECT TABLE_NAME, COLUMN_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE;");#获取表的主键$q_tables->execute;my @tables = ();my %keys = ();push @tables, @_ while @_ = $q_tables->fetchrow_array;$q_tables->finish;$q_key_usage->execute();$keys{$_[0]} = $_[1] while @_ = $q_key_usage->fetchrow_array;$q_key_usage->finish;#获取表的索引信息my $q_index = $src->prepare(qq(    SELECT T.name, C.name    FROM sys.index_columns I    INNER JOIN sys.tables T ON T.object_id = I.object_id    INNER JOIN sys.columns C ON C.column_id = I.column_id AND I.object_id = C.object_id;));$q_index->execute;my %table_indices = ();while(my @row = $q_index->fetchrow_array){    my ($table, $column) = @row;    my $columns = $table_indices{$table};    $columns = $table_indices{$table} = [] if not $columns;    push @$columns, $column;}$q_index->finish;#在目标MySQL上创建对应的数据库$target->do("DROP DATABASE IF EXISTS `$db`;") or die "Cannot drop old database $db\n";$target->do("CREATE DATABASE `$db` DEFAULT CHARSET = utf8 COLLATE utf8_general_ci;") or die "Cannot create database $db\n";$target->disconnect;$src->disconnect;my $total_start = time;for my $table(@tables){    my $pid = fork;    unless($pid)    {        ($src, $target) = db_connect;        my $start = time;        $src->do("USE $db;");        #获取表结构,用来生成MySQL用的DDL        my $q_schema = $src->prepare("SELECT COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = ? ORDER BY ORDINAL_POSITION;");        $target->do("USE `$db`;");        $target->do("SET NAMES utf8;");        my $key_column = $keys{$table};        my $ddl = "CREATE TABLE `$table` ( \n";        $q_schema->execute($table);        my @fields = ();        while(my @row = $q_schema->fetchrow_array)        {            my ($column, $nullable, $datatype, $length) = @row;            my $field = "`$column` $datatype";            $field .= "($length)" if $length;            $field .= " PRIMARY KEY" if $key_column eq $column;            push @fields, $field;        }        $ddl .= join(",\n", @fields);        $ddl .= "\n) ENGINE = MyISAM;\n\n";        $target->do($ddl) or die "Cannot create table $table\n";        #创建索引        my $indices = $table_indices{$table};        if($indices)        {            for(@$indices)            {                $target->do("CREATE INDEX `$_` ON `$table`(`$_`);\n") or die "Cannot create index on $db.$table$.$_\n";            }        }        #转移数据        my @placeholders = map {'?'} @fields;        my $insert_sql = "INSERT DELAYED INTO $table VALUES(" .(join ', ', @placeholders) . ");\n";        my $insert = $target->prepare($insert_sql);        my $select = $src->prepare("SELECT * FROM $table;");        $select->execute;        $select->{'LongReadLen'} = 1000;        $select->{'LongTruncOk'} = 1;        $target->do("SET AUTOCOMMIT = 0;");        $target->do("START TRANSACTION;");        my $rows = 0;        while(my @row = $select->fetchrow_array)        {            $insert->execute(@row);            $rows++;        }        $target->do("COMMIT;");        #结束,输出任务信息        my $elapsed = time - $start;        print "Child process $$ for table $db.$table done, $rows records, $elapsed seconds.\n";        exit(0);    }}print "Waiting for child processes\n";#等待所有子进程结束while (wait() != -1) {}my $total_elapsed = time - $total_start;print "All tasks from $db finished, $total_elapsed seconds.\n";这个脚本会根据每一个表fork出一个子进程和相应的数据库连接,因此做这种迁移之前得确保目标MySQL数据库配置的最大连接数能承受。然后在bash下执行复制代码 代码如下:for x in {1..11};do ./qq.pl QunInfo$x; donefor x in {1..11};do ./qq.pl GroupData$x; done就不用管了,脚本会根据MSSQL这边表结构来在MySQL那边创建一样的结构并配置索引。

在使用电脑的过程中我们会遇到很多的问题,烦人的广告窗口不停的弹出;不停的在多套网络配置中切换;时常忘掉备份网络中的关键数据;加密的文件夹由于误操作无法打开。你想过没有以上这些问题都可以通过一个小文件解决?你甚至可以借助它解决几乎所有在使用电脑时遇到的问题。它就是功能强大的bat文件。   一、查漏补缺——给系统功能添把火  我们的操作系统虽然功能强大,但是在某方面的应用上依旧存在欠缺,如:没有定时关机软件。而用bat文件可以解决很多这类问题。  1.关机与重启  我们先做个让电脑在每天指定时间关机的bat,具体方法如下:  打开附件中的记事本,然后在里边写入,at 22:00 shutdown -s -f,然后选择“文件→保存”,保存类型选择“所有文件”,然后将其命名为:shutdown.bat,如图1所示。如果你希望每天都在晚上十点关机,则将这个文件拖动到“开始→程序→启动”中,这样每次开机该文件都将被执行,其具体含义是,at 22:00在每天十点,shutdown -s -f关机且关闭所有未响应程序。       如果你需要经常重启机器,可以编写一个快速关机的bat文件,还是打开一个记事本,写入:  @echo off  //关闭命令行显示  %systemroot%\system32\shutdown -r -t 0  //-r参数表示重启计算机,-t表示时间后边跟随等待秒数,为0则表示马上重启  2.磁盘整理  Windows XP自带的磁盘碎片整理程序无法进行全盘整理,我们可以编写一个全盘整理的bat,在记事本里边输入:  defrag c: /f /v  defrag d: /f /v  //有几个分区就写几行,其中-f表示即使可用磁盘空间不足,也强制进行磁盘整理。-v表示显示整理结果。  将这个存为bat文件,再双击即可。如果你嫌整理的时间太长,不愿意在一旁守着,可以在文件的结尾输入:shutdown -s -f,让其执行完关机即。  二、一律从简——让网络操作变轻松  访问共享文件夹、备份网络数据、切换网络配置等常规网络操作,如果采用传统做法,实在是费时费力。用bat文件,一切将可以简化为一个双击动作。  1.备份还原网络配置  对于经常使用笔记本电脑在两地上网的朋友,切换网络配置就成了家常便饭,总是该来该去实在麻烦,用bat文件可以使一切都变得简单。  首先选择“开始→运行”,输入:cmd,回车后进入命令行界面,然后输入:netsh -c interface dump>d:\home.txt,回车后,系统将会把你当前的网络配置备份到d盘的home.txt文档中。然后开始编写bat文件,只有简单的一行:netsh -f d:\home.txt,保存为bat文件,以后双击该文件就会应用home.txt中的网络配置。如果你觉得两个文件烦,也可以将两个文件写成一个bat文件:   @echo off  netsh interface ip set address name="本地连接" source=static addr=10.10.10.1   mask=255.255.255.0  //设置本地连接的ip地址为:10.10.10.1,子网掩码为:255.255.255.0  netsh interface ip set address name="本地连接" gateway=110.10.10.2 gwmetric=0  //设置网关  netsh interface ip set dns name="本地连接" source=static addr=10.10.10.3 register=PRIMARY  //设置主dns  netsh interface ip add dns name="本地连接" addr=10.10.10.4  //设置备份dns  netsh interface ip set wins name="本地连接" source=static addr=none  //设置wins  2.在局域网中群发信息  如果你局域网中的机器没有禁止信使服务的话(启用方法为:在“运行”里输入services.msc,双击里边的Messenger,选择启用即可),当需要定时向全网发送消息时,完全可以用批处理文件实现,实现方法是:  rem 准备发布“9点断网”给局域网所有计算机  //显示在bat运行前,起到提示作用  pause  //暂停运行,按任意键继续,如果需要定时运行,则不要此段  net send * 9点断网  //发送下“9点断网”的信息,网段中所有的机器,“*”表示所有的机器  将其保存为bat文件,双击后得到如图2所示的效果。再按键盘上的任意键,信息将被发送到全网。如果你希望它定时发送,则将pause字段去掉,然后将其加入到计划任务中即可。        3.打开或关闭网络共享   当你需要共享某个远程的文件夹时,总要跑到本地去操作,如果数量众多,就有可能跑断腿,我们可以编写一个自动共享硬盘的bat文件,将文件发给用户,只要其双击该文件,即可实现共享的目的。  @echo off  echo REGEDIT4>c:\1.reg  echo [HKEY_LOCAL_MACHINE \SOFTWARE \Microsoft \Windows \CurrentVersion \Network \LanMan \E]  >>c:\j.reg echo "Flags"=dword:00000102>>c:\j.reg  //Flags用于是确定共享目录的访问方式,其中"Flags"=dword:00000102是完全共享,101是只读,103是根据密码访问。  echo "Parm1enc"=123:>>c:\1.reg  //Parm1enc键值保存着完全访问方式下的密码  echo "Parm2enc"=456:>>c:\1.reg  //Parm2enc键值保存着只读访问方式下的密码  echo "Path"="D:\">>c:\1.reg  //Path键值是共享文件夹的路径  echo "Remark"="我共享了你的D盘">>c:\1.reg  //Remark键值是备注  echo "Type"=dword:00000000>>c:\1.reg  REGEDIT /S c:\j.reg DEL c:\j.reg cls exit  用户运行这个bat文件后,再注销一下,文件夹就会被共享出来了。如果你每天都需要访问某个共享文件夹,且这个共享文件夹设置了密码,你还可以让bat文件帮你在开机的时候先输入密码,你再访问时就只需要双击打开即可。输入:net use \\192.168.0.1\IPC$ "1234" /user:"administrator,这个表示访问PC机192.168.0.1上边的共享文件夹,用administrator用户,密码为:1234。将其保存为bat文件,并将其加入到启动组中即可。   共享文件夹管理不当,会产生严重安全隐患,所以有时为了安全,需要批量卸载掉共享文件夹,其实只要将命令:net share c$ /del加入到bat文件中即可,其中c$为共享文件夹的名字,完整的例子可以到XXXX下载。  4.备份网络数据  你还可以利用bat文件将数据备份到局域网内的某台文件服务器上,这样就省去了复制粘贴的麻烦,具体做法是:   set source=e:\work  //文件来源为本机e盘的work文件夹  set dest=\\192.168.0.1\backup  //目标文件夹为PC机192.168.0.1的backup文件夹  net use \\192.168.0.1\IPC$ "1234" /user:"administrator"  xcopy %source% %dest% /e /v /r /y /z  //将源盘文件拷贝到目的服务器  将其保存为bat文件,以后只要双击此文件即可完成备份任务。  三、固若金汤——令电脑安全更放心   1.用bat加密文件   无论使用使用加密工具还是系统自带的EFS加密,一旦遇到密码丢失或者证书损坏时,想要恢复原来的文件就变得非常困难,用bat文件实现的加密则非常简单。  具体的操作步骤为,首先在D盘中建立一个文件夹ABC,然后在运行中输入:cmd后回车,打开命令行编辑窗口,然后输入:  C:\>Documents and Settings\Administrator\cd\  C:\>d:  D:\>cd abc  D:\abc>md 1..\  //在abc目录下建立s.目录   然后在abc目录下建立一个bat文件,内容为:  copy abc\* 1..\*  del /q abc\*  将其保存为:加密.bat,并将其放到abc目录下。然后再建立一个bat文件,内容为:  copy 1..\* abc\*  将其保存为:解密.bat,顾名思义,需要加密文件时双击加密.bat文件,需要解密时双击解密.bat文件。  我们来了解一下这个加密的具体原理,在Windows中“\”符号代表的是路径分隔符,用于区分父文件夹与子文件夹。所以Windows无法打开名称中含有“\”的文件或文件夹,双击这类文件或文件夹时系统会提示错误,如图3所示。而这类文件夹在命令行模式下是可以访问的。我们在abc文件夹中建立这么一个无法打开的文件夹,当需要加密时,用加密.bat将abc文件夹中的内容复制到这个特殊文件夹中。反之,将其复制出来则完成解密工作。如果将命令:D:\abc>md 1..\,改为:D:\abc>md 1..\a,则1..\文件夹将不可见。         2.屏蔽淘宝网广告  很多惹人厌的网站都喜欢在我们的机器中弹出一堆的广告,以增加其知名度,淘宝就是其中的一个,它的广告在你的桌面上肆无忌惮的弹出,实在让人没有安全感,我们可以用bat文件将其禁用。对于操作系统是Windows XP/2003的系统,建立bat文件:   %SystemRoot% \system32 \notepad.exe C:\WINDOWS \system32 \drivers \etc \hosts   kill taobao  0.0.0.0 www.taobao.com  0.0.0.0 search.taobao.com  0.0.0.0 taobao.com  0.0.0.0 www.unionsky.cn  0.0.0.0 www.allyes.com   如果操作系统是Windows 98/ME,则需将首行替换为:%SystemRoot%\system32\notepad.exe C:\WINDOWS\hosts,这个bat文件的作用是将与淘宝相关的网页都指向一个空IP,是你的机器无法访问淘宝,也就不会看到它的广告了,呵呵。   其实bat文件还有很多强大的功能,如:自动安装软件、操作系统,杀毒,批量删除文件等。由于篇幅所限这里就不一一介绍了。最后提一句,bat文件还可以用于优化系统中的各项服务,优化文件可以到http://family1.chinaok.com/down/200602/datf.rar下载。

定义:把模块定义成二进制语言程序的这个过程叫做字节编译python是解释型语言,它的字节编译是由解释器完成的编译py文件,生成pyc结尾的文件的方法,方法一:Import zipfile.py方法二:以上这篇基于python的字节编译详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

激光打印机故障维修两例   故障现象一:   一台惠普HP LaserJet 1010激光打印机使用一段时间后,联机打印时,进纸正常,但打印无字迹。   分析与维修:   我们知道,惠普HP LaserJet 1010激光打印机是目前一款采用惠普独有的瞬时热熔器技术,高达12 ppm(A4, letter)打印速度;应用惠普分辨率增强技术(REt), 分辨率高达600 dpi;月打印负荷高达5,000页,8 MB RAM的主打产品,在当今党政机关、大中型企事业单位、金融证券服务业等领域均占有一定的比例。   下面,笔者根据故障现象,先从计算机及其外设(如打印线缆、打印机连接卡口、电源插座等)硬件部分入手检查是否正常;若无异常,则可初步排除计算机及其外设硬件故障,故确定是HP激光打印机本身故障所致。打印字迹全无,可依照下列步骤逐一加以排除:   1、先更换新的粉盒看故障是否消失。更换时应先检查墨粉密封条是否拉出、墨粉是否已经用完。如若密封条没有拉出或墨粉已用完,就会造成字迹全无现象;但若是粉盒内墨粉用完的故障现象是输出样张先是纵向中间部分逐渐变淡,红色显示灯不停闪烁告警,提示机内粉盒中墨粉即将用完。打印字迹全无的现象非常罕见,且须在图像变淡后经过较长一段时间,故基本排除粉盒内无墨粉的原因。   2、接着检查HP激光打印机硒鼓是否故障。仔细检查发现硒鼓表面上有文字的墨粉痕迹,故判定打印机显影部件无故障,问题出在字迹从硒鼓感光鼓向纸上转移阶段。   3、最后检查转印电极组件上的电极丝,发现电极丝并未熔断脱落,但在电极丝的前后左右附着有大量的黑色漏粉,从而判定故障出自大量的带电漏粉致使电极丝无法发生正常的电晕放电,或发生电晕放电电压过低,无法将带负电的显影墨粉吸附到纸上,从而造成打印纸上无字迹现象。    解决办法是用一小团洁净棉花蘸取少量甲基乙基酮,在关机状态下轻轻擦拭,清除转印电极组件上电极丝周围的碳粉。清理完毕后,再用一小团棉花蘸取少量无水酒精重新擦拭一遍,等酒精挥发干净后,重新安装到位。开机使用,打印文字正常,故障随即排除。   故障现象二:   一台爱普生Epson激光打印机,开机后自行检测时运转时间明显加长,完毕后显示“MOB5”,绿色指示灯全部熄灭,联机不打印。   分析与维修:   开机能自检运转,表明该激光打印机机械部分基本正常。断电后,依次打开机壳检查硒鼓、碳粉,未见任何异常。根据开机后自检运转时间过长这一故障现象初步判断可能与纸路故障有关。因手中并无该机现成的电路图及相关资料,只能凭以前的维修经验逐一检查该激光打印机实物图,逐一检查时发现该机仅有一个电路传感器,拆下该传感器用万用表欧姆档测量,发现该传感器动作与不动作时的电阻值极不稳定,由此断定传感器是造成打印机工作不正常的原因所在。   由于市面上很难买到此类同型号的传感器,只能予以修复为宜。小心拆开传感器,发现其内部动作接触部件因使用时间过长已严重氧化出现绿色铜锈。先用一工具刀仔细刮去表面氧化层,再倒入少许无水酒精反复清洗几次,取出后用电吹风低温慢慢烘干,然后原样装配到位(因其体积仅几毫米,装配过程要十分小心谨慎,以免损坏锁钩和丢失弹簧)。最后将该传感器装入激光打印机后重新开机试运行,联机打印正常,故障排除。

勾子程序q.dll太狠了! 1、反安装所有杀毒软件和各种木马清除程序(包括360、瑞星卡卡等),只要一装就重启,然后删除这些程序的主程序。 2、修改hosts表,全部指向一个特定的IP地址,一些下载木马清除程序的网站都上不了。 3、稳藏启动,msconfig看不到,运行后,挂勾explorer.exe,自动启动两个假的ie进程及各种网络相关程序和部分本地运行的程序,如unlock等,使你无法用unlock程序。 4、专盗QQ等游戏账号,然后获取工具、Q币等。 清杀方法: 1、安装unlock最新版 2、在c:\windows\system32目录下找到q.dll 3、右击unlock,在出现的连接程序中,除unlock线程外,逐一进行结束,最后只剩下unlock时,选择“删除” 4、安装360清杀其余木马。 5、安装杀毒程序。

分类:网页制作

时间:2016-07-01 04:02:12