分类目录归档:方法秘笈

有什么好的方法,也不用私藏,大家都来分享一下吧….

DB2恢复数据:import VS load

刚开始学习DB2的时候 一直都以为DB2的导入导出语句只有export to与import from
但是 后来在一次数据库挂了之后 发现可以使用一条更优质的语句 ?restore用来进行数据库的恢复
然后 ?昨天在进行数据库恢复的时候 总是报日志已满的错误 ?在询问了公司相关人员之后 发现db2除了之前的那两句之外 还可以使用load来进行数据恢复….

Import和Load 都可以将数据导入到DB2服务器中,但是2者是有很大区别的。
Import 其实执行了SQL 的INSERT 操作。和INSERT 操作一样,Import 执行的时候会激活触发器,所有的约束会强制实现,而且会使用数据库的缓冲池。类似Oracle sql*loader工具的常规路径导入。

Load 工具可以更快的将数据文件导入到数据表中。Load 工具不会与DB2 数据引擎发生交互,所以当使用Load 工具时,不会触发触发器也不会使用缓冲池,而且必须单独实现数据表的约束。Import 工具执行起来比Load 慢是因为它是低层次的数据操作工具,它分
LOAD,BUILD,DELETE 三个阶段对硬盘上的数据页面来进行直接的处理。Load工具类似Oracle sql*loader工具的直接路径导入。

通过下面一个例子可以说明这一点:

db2 => connect @
 Database Connection Information
 Database server = DB2/LINUX 9.7.0
 SQL authorization ID = FAVORINFO
 Local database alias = DBTEST
 db2 => create table test(id int not null primary key,name varchar(20)) @
 DB20000I The SQL command completed successfully.
 db2 => commit @
 DB20000I The SQL command completed successfully.
 db2 => create trigger tri_test
 db2 (cont.) => no cascade
 db2 (cont.) => before insert on test
 db2 (cont.) => referencing new as n
 db2 (cont.) => for each row
 db2 (cont.) => begin atomic
 db2 (cont.) => set n.name=n.name||' [import test]';
 db2 (cont.) => end @
 DB20000I The SQL command completed successfully.
 db2 => commit @
 DB20000I The SQL command completed successfully.
 db2 => insert into test values(1,'a') @
 DB20000I The SQL command completed successfully.
 db2 => commit @ 
 DB20000I The SQL command completed successfully.
 db2 => select * from test @
 ID NAME
 ----------- --------------------
 1 a [import test]
 1 record(s) selected.
 db2 => ! cat test.txt @
 1,"aa"
 2,"bb"
 3,"cc"
 4,"dd"
 5,"ee"
 6,"ff"
 db2 => import from test.txt of del insert into test @
 SQL3109N The utility is beginning to load data from file "test.txt".
 SQL3148W A row from the input file was not inserted into the table. SQLCODE "-803" was returned.
 SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the
 primary key, unique constraint or unique index identified by "1" constrains table "FAVORINFO.TEST" from having duplicate values for the index key.
 SQLSTATE=23505
 SQL3185W The previous error occurred while processing data from row "1" of the input file.
 SQL3110N The utility has completed processing. "6" rows were read from the input file.
 SQL3221W ...Begin COMMIT WORK. Input Record Count = "6".
 SQL3222W ...COMMIT of any database changes was successful.
 SQL3149N "6" rows were processed from the input file. "5" rows were successfully inserted into the table. "1" rows were rejected.
 Number of rows read = 6
 Number of rows skipped = 0
 Number of rows inserted = 5
 Number of rows updated = 0
 Number of rows rejected = 1
 Number of rows committed = 6
 db2 => select * from test @
 ID NAME
 ----------- --------------------
 1 a [import test]
 2 bb [import test]
 3 cc [import test]
 4 dd [import test]
 5 ee [import test]
 6 ff [import test]
 6 record(s) selected.

可以看到文件中的记录1由于主键冲突而被拒绝导入,日志文件显示 Number of rows rejected = 1 ,
其他导入的记录也都触发了触发器操作。
下面看看Load工具的情况:

 db2 => delete from test where id>1 @
 DB20000I The SQL command completed successfully.
 db2 => commit @ 
 DB20000I The SQL command completed successfully.
 db2 => select * from test @
 ID NAME
 ----------- --------------------
 1 a [import test]
 1 record(s) selected.

首先删掉导入的记录,只保留ID=1的记录。

 db2 => ! cat test.txt
 db2 (cont.) => @
 1,"aa"
 2,"bb"
 3,"cc"
 4,"dd"
 5,"ee"
 6,"ff"
 db2 => load from test.txt of del insert into test @
 SQL3501W The table space(s) in which the table resides will not be placed in backup pending state since forward recovery is disabled for the database.
 SQL3109N The utility is beginning to load data from file "/home/favorinfo/test.txt".
 SQL3500W The utility is beginning the "LOAD" phase at time "2013-11-04 10:11:44.784072".
 SQL3519W Begin Load Consistency Point. Input record count = "0".
 SQL3520W Load Consistency Point was successful.
 SQL3110N The utility has completed processing. "6" rows were read from the input file.
 SQL3519W Begin Load Consistency Point. Input record count = "6".
 SQL3520W Load Consistency Point was successful.
 SQL3515W The utility has finished the "LOAD" phase at time "2013-11-04 10:11:44.808464".
 SQL3500W The utility is beginning the "BUILD" phase at time "2013-11-04 10:11:44.809206".
 SQL3213I The indexing mode is "REBUILD".
 SQL3515W The utility has finished the "BUILD" phase at time "2013-11-04 10:11:44.914248". 
 SQL3500W The utility is beginning the "DELETE" phase at time "2013-11-04 10:11:44.952664".
 SQL3509W The utility has deleted "1" rows from the table.
 SQL3515W The utility has finished the "DELETE" phase at time "2013-11-04 10:11:44.979506".
 Number of rows read = 6
 Number of rows skipped = 0
 Number of rows loaded = 6
 Number of rows rejected = 0
 Number of rows deleted = 1
 Number of rows committed = 6
 db2 => select * from test @
 ID NAME
 ----------- --------------------
 1 a [import test]
 2 bb
 3 cc
 4 dd
 5 ee
 6 ff
 6 record(s) selected.

很明显导入结果没有触发触发器操作,而且并没有拒绝任何行,相反的是有一条记录被删除了,这是因为Load会把所有的满足条件记录导入到表中,在 load的DELETE阶段将会删掉重复的记录行。

使用load命令,首先要明白当前你要导入的库是否在本地。如果不在本地,就要使用 load client from …命令,否则load from..即可。
无论何时,我们应该优先选用load命令来完成导入数据,因为他的效率比import要高,而且高很多。

但是,在日常生活中因为各种原因,只能使用import导入数据。
如果直接使用import from c:/data.ixf of ixf insert into table.你会发现速度很慢,到被导入的数据达到上千后,明显感觉的到。平均导入100条数据的时候为1分钟左右。

更好的解决办法是使用参数:compound (范围0-100)。

import from [fileAddress]of [type]  modifiry by compound=100  insert into table.

平均导入100条数据的时间为1秒。导入效率提高100倍。
当然,在导入的过程中你可以100条或1000条左右数据就自动提交一次,看数据量大小。一般控制在3万条以下提交一次适宜
如:

import from ./data.ixf of ixf  commitcount 1000  modifiry by compound=100  insert into table

主机500错误缘由

使用主机有时候登陆网站的时候会出现“Internal Server Error,500 error”。经上网搜索,发现出现该种情况通常有以下三种可能:

1.服务器资源超载

如果你没对网站文件做过什么更改的话,最有可能的是同服务器的资源超载:即同一时间内处理器有太多的进程需要处理的时候,会出现500错误。借助SSH,可以在命令行中输入以下命令查看:

ps faux
ps faux |grep <em>username</em><em> </em>

如果你查到某个进程消耗过多资源,可以用kill命令强制关闭这个进程,只需输入该进程的进程号(Pid):

kill -9 <em>pid</em>

2.文件权限设置错误

500错误还有可能是对文件设置了不正确的权限:

后台目录和文件的权限默认应该是755,而图片,文字等html文件应该是644。所以如果在刚刚上传文件后出现500错误,应该主要检查文件权限设置。

可以使用FTP软件选中所有文件,然后批量修改文件权限。也可以在SSH中更改相应的权限…

chmod 644 [filename]

3 .htaccess文件写入错误的代码

在使用某些wordpress SEO插件的时候,插件会改写.htacess文件,如果语法错误的话就有可能造成500错误!

在.htaccess文件中,可能因为添入了一些与源文件冲突的代码。所以为了检测到错误语句,最好的方法是为语句添加注释来逐条验证。因为注释之后,语句就不再起作用。

逐条添加“#”在语句前面,如

DirectoryIndex default.html
    AddType application/x-httpd-php5 php

你可以添加#到该命令前,从而实现注释效果:

DirectoryIndex default.html
   #AddType application/x-httpd-php5 php

这个方法可以迅速定位错误的命令,如果你找不到错误的段落,可以尝试把所有的命令全部添上注释然后反过来逐条删除#检查错误!判断出错误语句之后,可以删掉#恢复正常!

本文参考至:hostgatorfans

大内存支持

众所周知,32位的系统只支持最多4G的内存  而更要命的是 其中还要有1G的内存存放内核
也即是说 4G的内存满打满算也就可以使用3G左右
而一般来说 32位的系统 当内存使用量达到2G的时候就已经有点慢了…
但是  真的是这样么?  其实也还是可以使用其他办法来使用大内存的……^_^

启用物理地址扩展 (PAE) X86

 1.打开 Windows 资源管理器。
 2.在“工具”菜单上,单击“文件夹选项”。
 3.在“查看”选项卡上,单击“显示所有文件和文件夹”,清除“隐藏受保护的操作系统文件”复选框,然后单击“确定”。如果显示警告对话框,单击“是”以继续。
 4.在根文件夹(如 C:)下查找 Boot.ini 文件并删除它的只读属性。
 5.打开 Boot.ini 文件,然后将 /PAE 参数添加到 ARC 路径中,如以下 Windows Server 2003 Datacenter Edition 示例所示:multi(0)disk(0)rdisk(0)partition(2)/%systemroot%="Windows Server 2003, Datacenter Edition" /PAE
 6.在“文件”菜单上,单击“保存”。
 7.还原 Boot.ini 文件的只读属性。
 8.为使更改生效,请重新启动计算机。
 <span style="color: #800000;">设置用户对应管理员组用户。</span>

boot.ini参数:

大致格式如下:

[boot loader]
 timeout=30
 default=multi(0)disk(0)rdisk(0)partition(1)/WINDOWS
 [operating systems]
 multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Windows Server 2003"
 /fastdetect

解析:

[boot loader]:
 timeout: 超时持续时间(s)
 default: 默认启动系统
[oprating systmems]:
 multi(A): 适配器序数
 disk(B): B总为0, 因为multi使用INT 13调用, 不使用disk参数
 rdisk(C): C表示连接到适配器的磁盘的序数(从0开始)
 partion(D): D表示分区序号(从1开始)

常用开关选项:

 /basevideo 强制系统进入640x480/16色VGA模式
 /bootlog 将引导日志写入%SystemRoot%/Ntbtlog.txt中
 /fastdetect 不检查并行和串行端口, 让即插即用驱动程序完成这个任务
 /nodebug 禁用内核调试器, 可以加速引导过程, 但可能会导致蓝屏死机
 /noserialmice:comx 禁用对指定COM端口的鼠标端口检查

其他参数:

/3GB
这是SP3新引入的。这使得用户区和系统区分为3G比1G的比例。只有用户使用NT企业版,应用程序也支持3GB选项时,此选项才生效。
/BASEVIDEO
使用标准VGA方式启动。这种方式主要用于显示驱动程序失效时。
/BAUDRATE
指出用于调度的波特率,如果用户不设置,则使用默认的9600,而对于线缆modem则使用19200。
/BOOTLOG
使W2K将日志写入 %SystemRoot%NTBTLOG.TXT
/BURNMEMORY
使NT在已知的内存上少使用指定的兆数,如果/burnmemory=64,则有64M内存NT不使用。
/CRASHDEBUG
调度器在NT启动时启动,但只有在内核错误时才有用,如果系统经常会无故出错,这个选项就很有用了。
/DEBUG
在启动NT时调入调度器,它可以在任何时间激活,在错误可以再次出现时使用它比较合适。
/DEBUGPORT= comx
指定用于调度的端口,其它X就指端口号。
/FASTDETECT
对于W2K启动时它使系统不检查串行口和并行口。
/HAL
允许用户不使用默认的HAL。
/INTAFFINITY
设置多处理器HAL(HALMPS.DLL),使编号最大的处理器接收中断请求。如果不设置此选项,W2K会使所有处理器接收中断请求。
/KERNEL
与上面的功能相同,不过是针对SMP中的内核而言的。
/MAXMEM:n
指定NT可以使用的最大内存数,如果一个内存片损坏,这个开关就十分有用了。
/NODEBUG
不使用调试信息
/NOGUIBOOT
指定此选项会使W2K不加载VGA驱动程序,也就不会显示启动过程和失败时的兰屏信息。
/NOSERIALMICE=[COMx | COMx,y,z…]
在特定的COM中上禁止对串行鼠标的检测。如果用户有一个非鼠标设备接在COM口上,这个选项会十分有用。如果此开关未加参数,系统会禁止所有COM口。
/NUMPROC=n
只允许前N个系统处理器工作
/ONECPU
在多处理器中只使用一个处理器
/PCILOCK
不让NT为PCI设置分配IO/IRQ资源,而启用BIOS设置。
/SAFEBOOT:
安全启动,这个大家一定十分熟悉,W2K只启动HKLMSystemCurrentControlSetControlSafeBoot中的驱动程序和服务,其后跟三个参数MINIMAL,NETWORK或DSREPAIR之一。MINIMAL和NETWORK在允许网络下启动系统。而DSREPAIR要求系统从备份设备中调入活动目录的设置。还有一个选项是”(AlterNATESHELL)”,它让系统调入由HKLMSystemCurrentControlSetSafeBootAlternateShell指定的SHELL程序,而不使用默认的Explorer。
/SOS
在调入驱动程序名时显示它的名字,在因驱动问题而无法启动时使用比较好。
/WIN95
在装有三个系统DOS,Win9x和Windows NT的系统上,让NTLDR直接调用Win9x启动文件BOOTSECT.W40
/WIN95DOS
在装有三个系统DOS,Win9x和Windows NT的系统上,让NTLDR直接调用DOS启动文件BOOTSECT.DOS
/YEAR
使用指定的年份,如果设置为/YEAR=2005,那现在的时间就是2005年,此选项仅对NT4+SP4和W2K生效

注释:[any text]

在[any text]下面的所有文本均会识别为注释. 如:

[boot loader]
 timeout=30
 default=multi(0)disk(0)rdisk(0)partition(1)/WINDOWS
 [operating systems]
 multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Windows Server 2003"
 /fastdetect
 [any text]
 multi(0)disk(0)rdisk(1)partition(1)/WINDOWS="Windows 2000 Server"

Windows 2000 Server将不会显示在选择菜单上….

本文参考至:老熊专栏

你不知道的CMD命令之ECHO

ECHO命令是大家都熟悉的DOS批处理命令的一条子命令。
但是如果你深入了解一下,你会发现他可不仅仅只有将内存中的数据显示到屏幕着一个简单的功能哦….

1. 作为控制批处理命令在执行时是否显示命令行自身的开关

ECHO [ON|OFF]

如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”。

2. 显示当前ECHO设置状态

ECHO

3. 输出提示信息

ECHO 信息内容

上述是ECHO命令常见的三种用法,也是大家熟悉和会用的,但作为DOS命令淘金者你还应该知道下面的技巧:

4. 关闭DOS命令提示符

在DOS提示符状态下键入ECHO OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO ON,提示符才会重新出现。

5. 输出空行,即相当于输入一个回车

ECHO.

值得注意的是命令行中的“.”要紧跟在ECHO后面中间不能有空格,否则“.”将被当作提示信息输出到屏幕。另外“.”可以用,:;”/[\]+等任一符号替代。

在下面的例子中ECHO.输出的回车,经DOS管道转向作为TIME命令的输入,即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态:

C:>ECHO.|TIME

ECHO命令输出空行的另一个应用实例是:将ECHO.加在自动批处理文件中,使原本在屏幕下方显示的提示画面,出现在屏幕上方。

6. 答复命令中的提问

ECHO 答复语|命令文件名

上述格式可以用于简化一些需要人机对话的命令(如:CHKDSK/F;FORMAT Drive:;del *.*)的操作,它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。下面的例子就相当于在调用的命令出现人机对话时输入“Y”回车:

C:>ECHO Y|CHKDSK/F
C:>ECHO Y|DEL A :*.*

7. 建立新文件或增加文件内容

ECHO 文件内容>文件名
ECHO 文件内容>>文件名

例如:

C:>ECHO @ECHO OFF>AUTOEXEC.BAT建立自动批处理文件
C:>ECHO C:\CPAV\BOOTSAFE>>AUTOEXEC.BAT向自动批处理文件中追加内容
C:TYPE AUTOEXEC.BAT显示该自动批处理文件
@ECHO OFF
C:\CPAV\BOOTSAFE

8. 向打印机输出打印内容或打印控制码

格式:

ECHO 打印机控制码>PRN
ECHO 打印内容>PRN

下面的例子是向M-1724打印机输入打印控制码。<Alt>156是按住Alt键在小键盘键入156,类似情况依此类推:

C:>ECHO +156+42+116>PRN(输入下划线命令FS*t)
C:>ECHO +155@>PRN(输入初始化命令ESC@)
C:>ECHO.>PRN(换行)

9. 使喇叭鸣响

C:>ECHO ^G

“^G”是用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。

10.执行ESC控制序列修改屏幕和键盘设置

我们知道DOS的设备驱动程序ANSI.SYS提供了一套用来修改屏幕和键盘设置的ESC控制序列。如执行下述内容的批处理程序可以把功能键F12定义为DOS命令“DIR/W”,并把屏幕颜色修改为白色字符蓝色背景。

@ECHO”←[0;134;”DIR/W”;13p
@ECHO”←[1;37;44m

(注:批处理文件中“←”字符的输入方法是在编辑状态下按Alt中小键盘上的27)

绕过百度云管家下载云盘大文件

前段时间百度网盘和360云盘纷纷展开容量攻势,各自送出了高达1TB的永久容量。再算上基础容量,想必各位的网盘空间在很长一段时间内都不需要再扩容了。

然后虽然容量上去了,但是百度网盘开始对大文件下载做出限制,超出2G的文件只能通过百度云管家下载。

绕过百度云管家下载云盘大文件

这一点对于分享族和下载族而言都不是个好消息,其实要解决这个解决方法也不是很难…

就教大家如何绕过百度云管家直接下载大文件。

测试链接:http://pan.baidu.com/share/link?uk=2787975149&shareid=3754203130

1.点击保存至网盘,将文件存到你自己的网盘中
2.打开网址 WAP版
3.找到刚刚转存的文件,点击下载
然后尽情的享受下载的乐趣吧~~~

 

本文参考至:reizhi

CMD切换本机IP

在Windows中,如果你要设置IP地址,一般是进入“本地连接”->“属性”,手动设置要更改的IP地址。
其实,在命令行同样可以设置IP地址。如果你的IP需要在几个IP中来回切换,可以使用 netsh 命令更改:

1.进入CMD命令行;

点击“开始”->“运行”,输入“cmd”,回车,

2.设置IP:

设置动态获取IP地址(DHCP)

c:/>netsh interface ip set address name="本地连接" sourse=dhcp

设置固定IP

c:/>netsh interface ip set address name="本地连接" sourse=static addr=192.168.1.2 mask=255.255.255.0 gateway=192.168.1.1 gwnetric=auto

参数说明:

1.name:网络连接名称,一般为“本地连接”。你可以在“控制面板”->“网络连接”中看到。
2.source:获取IP的途径。动态获取,则为dhcp,手动设置,则为static。
3.addr:要设置的IP地址。
4.mask:子网掩码。
5.gateway:网关地址。
6.gwmetric:网关跃点数,可以设置为整型数值,也可以设置为“自动”:auto。

3.设置DNS:

自动获取DNS

c:/>netsh interface ip set address name="本地连接" sourse=dhcp

手动设置单个DNS

c:/>netsh interface ip set address name="本地连接" sourse=static addr=210.52.149.2 register=primary

手动设置多个DNS

c:/>netsh interface ip set address name="本地连接" addr=202.106.0.133 index=2

参数说明:

1.name:网络连接名称,一般为“本地连接”。你可以在“控制面板”->“网络连接”中看到。
2.source:获取IP的途径。动态获取,则为dhcp,手动设置,则为static。
3.addr:要设置的IP地址。
4.register:
5.none: 禁用动态 DNS 注册。
6.primary: 只在主 DNS 后缀下注册。
7.both: 在主 DNS 后缀下注册,也在特定连接后缀下注册。
8.index:设置的DNS的顺序号。

DB2 找不到有效的产品许可证

很不幸 今天一早开机就发现原来安装的DB2不能正常运行了
提示说DB2未打开 于是赶紧前往命令提示符下用db2start命令 却是被告知

产品名: “DB2 企业服务器版”
到期日期: “已到期”
产品标识: “db2ese” 版本信息: “9.5”
SQL8008N 产品 “DB2 企业服务器版” 未安装有效的许可证密钥,试用期已到期。不启用特定于此产品的功能。 SQL8000N DB2START 处理失败;找不到有效的产品许可证。如果许可您使用此产品,则应 确保正确注册了许可证…

上网搜索了一阵DB2许可证的情况 发现了要解决这个方法其实还是比较简单的
只要使用IBM提供的db2licm命令就可以了…

db2licm命令提供了添加、移除、列示和修改本地系统上安装的许可证功能。

db2licm [-a filename]
    [-e HARD | SOFT]
    [-p prod-password
    REGISTERED | CONCURRENT |
    INTERNET | MEASURED]
    [-r prod-password]
    [-u prod-password num-users]
    [-n prod-password num-processors]
    [-l]
    [-v]
    [-?]

命令选项详解:

-a 添加产品的许可证。
指定包含了有效许可证信息的文件名。这可从您的特许产品 CD中获得,或者与 IBM 代表或授权经销商联系。

-n 更新授权的处理器数目。
指定您有权与此产品配合使用的处理器的数目。

-e 更新系统上的强制策略。 有效值是:HARD 和 SOFT。HARD
指定将不允许没有许可证的请求。 SOFT指定将把没有许可证的请求记录下来,但是不限制。

-l 列示具有可用许可证信息的所有产品。

-p 更新要在系统上使用的许可证策略类型。 可以指定关键字CONCURRENT、REGISTERED 或 CONCURRENTREGISTERED。另外,可以为“DB2 UDB 工作组服务器”产品
指定INTERNET。另外,还可以为 DB2 Connect 非限制产品指定 MEASURED。

-r 除去产品的许可证。除去许可证之后,产品就以“先试后买”方式运作。要获取特定产品的密码,使用 -l 选项调用命令。

-u 更新已购买的用户许可证的数目。指定已购买其许可证的产品的密码和用户数。

-v 显示版本信息。

-? 显示帮助信息。
指定了此选项时,将忽略其它所有选项,仅显示帮助信息。

使用例子:

添加license: db2licm -a xxx.lic

添加完成之后,再使用db2licm -l查看下信息:

Product name: "DB2 Enterprise Server Edition"
 License type: "CPU 选项"
 Expiry date: "永久"
 Product identifier: "db2ese"
 Version information: "9.5"
 Enforcement policy: "软停止"
 Features:
 DB2 Database Partitioning: "未许可"
 DB2 Performance Optimization ESE: "未许可"
 DB2 Storage Optimization: "未许可"
 DB2 Advanced Access Control: "未许可"
 DB2 Geodetic Data Management: "未许可"
 IBM Homogeneous Replication ESE: "未许可"

哈哈 DB2又可以继续用了~~

好吧,到此我也附带一个从他处获得的lic文件吧 至少对于9.5 x86版本的还是可以用的….
下载地址: 百度盘

Tomcat参数报错

最近需要在60服务器上部署对账平台来做相应测试   结果发现缘由的内网平台中只有信息平台…
没办法 赶紧从敏哥那里要了一份程序过来  也做了基本的部署
结果却是发现 总报错  而且是报参数的错误:

 The CATALINA_HOME environment variable is not defined correctly
 This environment variable is needed to run this program

于是  赶紧想着应该是参数填写错误
赶紧按照安装JAVA_HOME的方式来对Tomcat进行全局变量的设置:

1.安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:\java\jdk;
2.安装完成后,右击“我的电脑”,点击“属性”;
3.选择“高级”选项卡,点击“环境变量”;
4.在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓)。若已存在则点击“编辑”,不存在则点击“新建”;
5.JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:\java\jdk。此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量);
6.Path使得系统可以在任何路径下识别java命令,设为:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin  其中:%JAVA_HOME%就是引用前面指定的JAVA_HOME,下同;
7.CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar  (要加.表示当前路径)
8.“开始”->;“运行”,键入“cmd”;
9.键入命令“java -version”,“java”,“javac”几个命令,出现画面,说明环境变量配置成功;
10.按照步骤四设定Tomcat参数 CATALINA_HOME D:\Tomcat
11.双击startup.bat,启动tomcat。

双击startup.bat,结果却是发现启动不了tomcat。便想着是不是其中的设置结果出了问题:

1、JAVA_HOME中的路径不能使用分号结尾,如

D:\Java\jdk;

这样写就会出现提示CATALINA_HOME或是JAVA_HOME没有配置好的错误,,还有就是JAVA_HOME的路径一定不要写成了JRE的路径

2、CATALINA_BASE,CATALINA_HOME,TOMCAT_HOME中的路径不能以”\”结尾,如

D:\Tomcat\

这样写就会出现java.util.logging.ErrorManager的错误,屏幕一闪而过

正确的写法:

JAVA_HOME D:\Java\jdk
CATALINA_BASE D:\Tomcat
CATALINA_HOME D:\Tomcat
TOMCAT_HOME D:\Tomcat

注意这里路径的标点符号,不能写多了,也不能写少了

但是 结果发现还是报同样的错误
没办法 只能打开原始的bat文件来查看了
果然  那里面是这样进行设定的

加入设定了相应的环境变量,则以设定的环境变量来进行查看
而如果没有进行环境变量的设定的话,则需要在文件中指定

而本次就是犯下了这个错  因为我在bat文件中进行了设定 故而他是会直接读取其中的配置的文件的
要解决这一个问题也很简单
直接删除该问下下的设定语句 或者将其更改成为正确语句就OK了!!

重启了一下Tomcat  果不其然 现在对账平台能够正常启用啦~~

SQL执行顺序

我们做软件开发的,尤其是像我现在这样在做运维的,大部分人都离不开跟数据库打交道。而现今的数据库动辄即是千万条数据,虽然说我们在获取了需求之后能够立马就想到其查询语句,但是在应对突然之间的数据获取时,谁又能保证在第一时间内就能获取到最新的数据呢?

要知道SQL语句,我想我们有必要知道查询分析器怎么执行我们的SQL语句的。
我们很多人会看执行计划,或者用Profiler来监视和调优查询语句或者存储过程慢的原因。
但是如果我们知道查询分析器的执行逻辑顺序,下手的时候就胸有成竹,那么下手是不是有把握点呢?

在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。
每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。

(8)SELECT (9)DISTINCT  (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>

逻辑查询处理阶段简介

  1. FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
  2. ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
  3. OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
  4. WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
  5. GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
  6. CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
  7. HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
  8. SELECT:处理SELECT列表,产生VT8.
  9. DISTINCT:将重复的行从VT8中移除,产生VT9.
  10. ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
  11. TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。

注:

步骤10,按ORDER BY子句中的列列表排序上步返回的行,返回游标VC10。这一步是第一步也是唯一一步可以使用SELECT列表中的列别名的步骤。这一步不同于其它步骤的是,它不返回有效的表,而是返回一个游标。
SQL是基于集合理论的。集合不会预先对它的行排序,它只是成员的逻辑集合,成员的顺序无关紧要。对表进行排序 的查询可以返回一个对象,包含按特定物理顺序组织的行。

本文参考至:qanholas

DB2 编目catalog

DB2数据库中的编目即catalog这个单词很难理解。至少对于初学者的我来说是比较难于理解的….
具体来说编目有编目节点,编目数据库等。如果要理解编目,必须要讲一下DB2数据库的体系结构。
在DB2数据库中最大的概念是系统(节点)也就是主机,下面是实例,实例下面是数据库,然后是表空间,然后是数据库对象。
现在假设你有一个数据库服务器在自己的ASUS机器上,你有一个客户端在windows,linux或任何平台上,你现在想建立一个客户端到服务器端的连接,具体步骤是什么呢?

第1步:
你必须要在客户端的机器上能够把远程的服务器能够识别出来。即需在DB2使用的编目(catalog)方式,具体来说就是通过编目把远程的服务器写在本地客户端的一个文件中:

db2 catalog tcpip node asus remote 172.10.10.10 server 50000

在上面的这条命令中asus是一个节点名(在一个机器上必须是唯一的),remote后面是服务器的IP地址,server是远程服务器上实例对应的端口号。DB2通过这种方式在本地的SQLNODIR文件中把远程服务器的信息记录下来,所以编目节点其实就是把远程服务器映射到本地,通过SQLNODIR中的记录能够找到远程服务器和实例,类似指向远程服务器和实例的地址指针。

第2步:
当把远程的服务器IP地址,实例编目下来后,第二步应该把该实例下的数据库编目到本地

db2 catalog db REMOTEDB at node asus

在这条命令中,REMOTEDB是远程实例下的数据库,asus是我们在第一步中编目的节点名
这条命令执行后会在本地SQLDBDIR文件中记录远程数据库的信息,这这里编目数据库可以理解为把远程服务器实例下的数据库映射到本地为一个别名

上面是客户端和服务器不在同一台机器上,是通过编目节点、编目数据库来实现客户端连接到服务器上数据库的目的。如果是连接在同一台机器上,那么这时候则不需要显示的编目节点。但是当在我们在服务器上创建一个实例的时候,系统会有一个隐含的把实例在本地编目的过程–假设在asus上创建一个实例名为db2inst1,其实有一个隐含的的步骤:

db2 catalog local node db2inst1 instance db2inst1 system asus ostype aix

同样当你在db2inst1下创建一个数据库MYDB的时候,有一个隐含的编目数据库的步骤

db2 catalog db mydb at node db2inst1

至此你可以这样理解编目:编目就是在本地或远程主机上建立客户端到服务器的数据库连接