分类目录归档:技术天堂

作为一名资深的计算机宅男,总得要有那么一两门拿得出手的技术….

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

DB2基础函数大全

折腾了DB2也有一段时间了 但是发觉自己都只是查询一下其基本的表项
然而 考虑到以后可能要进行报表的统计 单纯的select语句已经不再够用
所以得要从基本函数着手 开始深入学习DB2了…..

AVG()
返回一组数值的平均值.

SELECT AVG(SALARY) FROM BSEMPMS;

CORR(),CORRELATION()
返回一对数值的关系系数.

SELECT CORRELATION(SALARY,BONUS) FROM BSEMPMS;

COUNT()
返回一组行或值的个数.

SELECT COUNT(*) FROM BSEMPMS;

COVAR(),COVARIANCE()
返回一对数值的协方差.

SELECT COVAR(SALARY,BONUS) FROM BSEMPMS;

MAX()
返回一组数值中的最大值.

SELECT MAX(SALARY) FROM BSEMPMS;

MIN()
返回一组数值中的最小值.

SELECT MIN(SALARY) FROM BSEMPMS;

STDDEV()
返回一组数值的标准偏差.

SELECT STDDEV(SALARY) FROM BSEMPMS;

SUM()
返回一组数据的和.

SELECT SUM(SALARY) FROM BSEMPMS;

VAR(),VARIANCE()
返回一组数值的方差.

SELECT VARIANCE(SALARY) FROM BSEMPMS;

ABS(),ABSVAL()
返回参数的绝对值.

SELECT ABS(-3.4) FROM BSEMPMS;

ACOS()
返回参数的反余弦值.

SELECT ACOS(0.9) FROM BSEMPMS;

ASCII()
返回整数参数最左边的字符的ASCII码.

SELECT ASCII('R') FROM BSEMPMS;

ASIN()
返回用弧度表示的角度的参数的反正弦函数.

SELECT ASIN(0.9) FROM BSEMPMS;

ATAN()
返回参数的反正切值,该参数用弧度表示的角度的参数.

SELECT ATAN(0.9) FROM BSEMPMS;

ATAN2()
返回用弧度表示的角度的X和Y坐标的反正切值.

SELECT ATAN2(0.5,0.9) FROM BSEMPMS;

BIGINT()
返回整型常量中的数字或字符串的64位整数表示

SELECT BIGINT(EMP_NO) FROM BSEMPMS;

CEILING() OR CEIL()
返回比参数大或等于参数的最小的整数值
CHAR()
返回日期时间型,字符串,整数,十进制或双精度浮点数的字符串表示.

SELECT CHAR(SALARY,',') FROM BSEMPMS;

CHR()
返回具有由参数指定的ASCII码的字符

SELECT CHAR(167) FROM BSEMPMS;

CONCAT()
返回两个字符串的连接.

SELECT CONCAT(EMP_NO,EMP_NAM) FROM BSEMPMS;

YEAR()
返回数值的年部分.

SELECT YEAR('2003/01/02') FROM BSEMPMS;

VARCHAR()
返回字符串,日期型,图形串的可变长度的字符串表示

SELECT VARCHAR(EMP_NAM,50) FROM BSEMPMS;

UCASE() OR UPPER()
返回字符串的大写
TRUNCATE() OR TRUNC()
从表达式小数点右边的位置开始截断并返回该数值.

SELECT TRUNCATE(345.6789,2) FROM BSEMPMS;

TIME()
返回一个数值中的时间

SELECT TIME('2001-03-19.12.30.123456') FROM BSEMPMS;

SUBSTR(EXP1,EXP2)
返回EXP1串自EXP2处开始的子串.
SQRT()
返回该参数的平方根.

SELECT SQRT(36) FROM BSEMPMS;

SPACE()
返回由参数指定的长度,包含空格在内的字符串.

SELECT SPACE(10) FROM BSEMPMS;

SECOND()
返回一个数值的秒部分.

SELECT SECOND('18:34:32') FROM BSEMPMS;

RTRIM()
删除字符串尾部的空格.

SELECT RTRIM('COMMENT') FROM BSEMPMS;

ROUND(EXP1,EXP2)
返回EXP1小数点右边的第EXP2位置处开始的四舍五入值.

SELECT ROUND(2345.6789,2) FROM BSEMPMS;

REPLACE(EXP1,EXP2,EXP3)
用EXP3替代EXP1中所有的EXP2

SELECT CHAR(REPLACE('ROMANDD','NDD','CCB'),10) FROM BSEMPMS;

REPEAT(EXP1,EXP2)
返回EXP1重复EXP2次后的字符串.

SELECT CHAR(REPEAT('REPEAT',3),21) FROM BSEMPMS;

REAL()
返回一个数值的单精度浮点数表示.

SELECT REAL(10) FROM BSEMPMS;

RAND()
返回0和1之间的随机浮点数.

SELEC TRAND() FROM BSEMPMS;

POWER(EXP1,EXP2)
返回EXP1的EXP2次幂.

SELEC TPOWER(2,5) FROM BSEMPMS;

POSSTR(EXP1,EXP2)
返回EXP2在EXP1中的位置.

SELECT ('ABCDEFGH','D') FROM BSEMPMS;

NULLIF(EXP1,EXP2)
如果EXP1=EXP2,则为NULL,否则为EXP1
NODENUMBER()
返回行的分区号.

SELECT NODENUMBER(EMP_NO) FROM BSEMPMS;

MONTH()
返回一个数值的月部分.

SELECT MONTH('2003/10/20') FROM BSEMPMS;

MOD(EXP1,EXP2)
返回EXP1除以EXP2的余数.

SELECT MOD(20,8) FROM BSEMPMS
<strong>MINUTE()
</strong>返回一个数值的分钟部分.
SELECT MINUTE('18:34:23') FROM BSEMPMS;

LTRIM()
删除字符串前面的空格.

SELECT LTRIM('CDDD') FROM BSEMPMS;

HOUR()
返回一个数值的小时部分.

SELECT HOUR('18:34:23') FROM BSEMPMS;

DOUBLE()
如果参数是一个数字表达式,返回与其相对应的浮点数,如果参数是字符串表达式,则返回该数的字符串表达式.

SELECT DOUBLE('5678') FROM BSEMPMS;

EXP()
返回参数的指数函数.

SELECT EXP(2) FROM BSEMPMS;

FLOAT()
返回一个数的浮点表示.

SELECT FLOAT(789) FROM BSEMPMS;

FLOOR()
返回小于或等于参数的最大整数.SLECTFLOOR(88.93) FROM BSEMPMS;

HEX()
返回一个表示为字符串的值的16进制表示.

SELECT HEX(16) FROM BSEMPMS;

DAYNAME
返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK
返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期日。
DAYOFWEEK_ISO
返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期一。
DAYOFYEAR
返回参数中一年中的第几天,用范围在1-366 的整数值表示。
DAYS
返回日期的整数表示。
JULIAN_DAY
返回从公元前4712 年1 月1 日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS
返回午夜和参数中指定的时间值之间的秒数,用范围在0 到86400 之间的整数值表示。
MONTHNAME
对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO
根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT
从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF
根据两个时间戳记之间的时差,返回由第一个参数定义的类型表示的估计时差。
TO_CHAR
返回已用字符模板进行格式化的时间戳记的字符表示。TO_CHAR 是VARCHAR_FORMAT 的同义词。
TO_DATE
从已使用字符模板解释过的字符串返回时间戳记。TO_DATE 是TIMESTAMP_FORMAT 的同义词。
WEEK
返回参数中一年的第几周,用范围在1-54 的整数值表示。以星期日作为一周的开始。
WEEK_ISO
返回参数中一年的第几周,用范围在1-53 的整数值表示。

要使当前时间或当前时间戳记调整到GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:
current time – current timezone
current timestamp – current timezone

给定了日期、时间或时间戳记,则使用适当的函数可以单独抽取出(如果适用的话)年、月、日、时、分、秒及微秒各部分:
YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)

因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:
current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS – 3 MINUTES + 10 SECONDS

从时间戳记单独抽取出日期和时间也非常简单:
DATE (current timestamp)
TIME (current timestamp)

而以下示例描述了如何获得微秒部分归零的当前时间戳记:

CURRENT TIMESTAMP – MICROSECOND (current timestamp) MICROSECONDS

如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。为此,只要使用CHAR() 函数:

char(current date)
char(current time)
char(current date + 12 hours)

要将字符串转换成日期或时间值,可以使用:

TIMESTAMP (‘2002-10-20-12.00.00.000000’)
TIMESTAMP (‘2002-10-20 12:00:00’)
DATE (‘2002-10-20′)
DATE (’10/20/2002′)
TIME (’12:00:00’)
TIME (‘12.00.00’)

TIMESTAMP()、DATE() 和TIME() 函数接受更多种格式。上面几种格式只是示例,我将把它作为一个练习,让读者自己去发现其它格式。

有时,您需要知道两个时间戳记之间的时差。为此,DB2 提供了一个名为TIMESTAMPDIFF() 的内置函数。但该函数返回的是近似值,因为它不考虑闰年,而且假设每个月只有30 天。以下示例描述了如何得到两个日期的近似时差:

timestampdiff (, char(
timestamp(‘2002-11-30-00.00.00’)-
timestamp(‘2002-11-08-00.00.00’)))

对于,可以使用以下各值来替代,以指出结果的时间单位:

1 = 秒的小数部分
2 = 秒
4 = 分
8 = 时
16 = 天
32 = 周
64 = 月
128 = 季度
256 = 年
当日期很接近时使用timestampdiff() 比日期相差很大时精确。如果需要进行更精确的计算,可以使用以下方法来确定时差(按秒计):

(DAYS(t1) – DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) – MIDNIGHT_SECONDS(t2))

为方便起见,还可以对上面的方法创建SQL 用户定义的函数:

CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP)
RETURNS INT
RETURN (
(DAYS(t1) – DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) – MIDNIGHT_SECONDS(t2))
)
@

如果需要确定给定年份是否是闰年,以下是一个很有用的SQL 函数,您可以创建它来确定给定年份的天数:

CREATE FUNCTION daysinyear(yr INT)
RETURNS INT
RETURN (CASE (mod(yr, 400)) WHEN 0 THEN 366 ELSE
CASE (mod(yr, 4)) WHEN 0 THEN
CASE (mod(yr, 100)) WHEN 0 THEN 365 ELSE 366 END
ELSE 365 END
END)@

最后,以下是一张用于日期操作的内置函数表。它旨在帮助您快速确定可能满足您要求的函数,但未提供完整的参考。有关这些函数的更多信息,请参考SQL 参考大全。

SQL 日期和时间函数
DAYNAME 返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期日。
DAYOFWEEK_ISO 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期一。
DAYOFYEAR 返回参数中一年中的第几天,用范围在1-366 的整数值表示。
DAYS 返回日期的整数表示。
JULIAN_DAY 返回从公元前4712 年1 月1 日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS 返回午夜和参数中指定的时间值之间的秒数,用范围在0 到86400 之间的整数值表示。
MONTHNAME 对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO 根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT 从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF 根据两个时间戳记之间的时差,返回由第一个参数定义的类型表示的估计时差。
TO_CHAR 返回已用字符模板进行格式化的时间戳记的字符表示。TO_CHAR 是VARCHAR_FORMAT 的同义词。
TO_DATE 从已使用字符模板解释过的字符串返回时间戳记。TO_DATE 是TIMESTAMP_FORMAT 的同义词。
WEEK 返回参数中一年的第几周,用范围在1-54 的整数值表示。以星期日作为一周的开始。
WEEK_ISO 返回参数中一年的第几周,用范围在1-53 的整数值表示。
db2日期操作函数
db2日期操作函数
当前时间:
CURRENT DATE
CURRENT TIME
CURRENT TIMESTAMP
获取时间的年、月、日、时、分、秒及微秒各部分:
YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)
时间的加减:
current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS – 3 MINUTES + 10 SECONDS
要计算两个日期之间的天数,您可以对日期作减法:
days (current date) – days (date(‘1999-10-22’))
时间转换为字符串:
char(current date)
字符串转换成时间:
TIMESTAMP()、DATE() 和TIME(), 支持的字符串格式需要参考帮助, 没有oracle的to_date灵活
Data(‘2005-01-01’)
日期和时间的一些函数:
DAYNAME 返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期日。
DAYOFWEEK_ISO 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期一。
DAYOFYEAR 返回参数中一年中的第几天,用范围在1-366 的整数值表示。
DAYS 返回日期的整数表示。
JULIAN_DAY 返回从公元前4712 年1 月1 日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS 返回午夜和参数中指定的时间值之间的秒数,用范围在0 到86400 之间的整数值表示。
MONTHNAME 对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO 根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT 从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF 根据两个时间戳记之间的时差,返回由第一个参数定义的类型表示的估计时差。
TO_CHAR 返回已用字符模板进行格式化的时间戳记的字符表示。TO_CHAR 是VARCHAR_FORMAT 的同义词。
TO_DATE 从已使用字符模板解释过的字符串返回时间戳记。TO_DATE 是TIMESTAMP_FORMAT 的同义词。
WEEK 返回参数中一年的第几周,用范围在1-54 的整数值表示。以星期日作为一周的开始。
WEEK_ISO 返回参数中一年的第几周,用范围在1-53 的整数值表示。
因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:

current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS – 3 MINUTES + 10 SECONDS

要计算两个日期之间的天数,您可以对日期作减法,如下所示:

days (current date) – days (date(‘1999-10-22’))

而以下示例描述了如何获得微秒部分归零的当前时间戳记:

CURRENT TIMESTAMP – MICROSECOND (current timestamp) MICROSECONDS

如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。为此,只要使用CHAR() 函数:

char(current date)
char(current time)
char(current date + 12 hours)

要将字符串转换成日期或时间值,可以使用:

TIMESTAMP (‘2002-10-20-12.00.00.000000’)
TIMESTAMP (‘2002-10-20 12:00:00’)
DATE (‘2002-10-20′)
DATE (’10/20/2002′)
TIME (’12:00:00’)
TIME (‘12.00.00’)

如果你想将当前日期格式转化成定制的格式(比如‘yyyymmdd’),那又该如何去做呢?按照我的经验,最好的办法就是编写一个自己定制的格式化函数。

下面是这个UDF 的代码:

create function ts_fmt(TS timestamp, fmt varchar(20))
returns varchar(50)
return
with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as
(
select
substr( digits (day(TS)),9),
substr( digits (month(TS)),9) ,
rtrim(char(year(TS))) ,
substr( digits (hour(TS)),9),
substr( digits (minute(TS)),9),
substr( digits (second(TS)),9),
rtrim(char(microsecond(TS)))
from sysibm.sysdummy1
)
select
case fmt
when ‘yyyymmdd’
then yyyy || mm || dd
when ‘mm/dd/yyyy’
then mm || ‘/’ || dd || ‘/’ || yyyy
when ‘yyyy/dd/mm hh:mi:ss’
then yyyy || ‘/’ || mm || ‘/’ || dd || ‘ ‘ ||
hh || ‘:’ || mi || ‘:’ || ss
when ‘nnnnnn’
then nnnnnn
else
‘date format ‘ || coalesce(fmt,’ ‘) ||
‘ not recognized.’
end
from tmp

建议找一个DB2基础的东东看看,比在这里问快多了,虽然别人找的时候也快!!
SQL 日期和时间函数
DAYNAME 返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期日。
DAYOFWEEK_ISO 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期一。
DAYOFYEAR 返回参数中一年中的第几天,用范围在1-366 的整数值表示。
DAYS 返回日期的整数表示。
JULIAN_DAY 返回从公元前4712 年1 月1 日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS 返回午夜和参数中指定的时间值之间的秒数,用范围在0 到86400 之间的整数值表示。
MONTHNAME 对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO 根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT 从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF 根据两个时间戳记之间的时差,返回由第一个参数定义的类型表示的估计时差。
TO_CHAR 返回已用字符模板进行格式化的时间戳记的字符表示。TO_CHAR 是VARCHAR_FORMAT 的同义词。
TO_DATE 从已使用字符模板解释过的字符串返回时间戳记。TO_DATE 是TIMESTAMP_FORMAT 的同义词。
WEEK 返回参数中一年的第几周,用范围在1-54 的整数值表示。以星期日作为一周的开始。
WEEK_ISO 返回参数中一年的第几周,用范围在1-53 的整数值表示。

——————————————————————————–
mymm 回复于:2003-08-04 14:22:38
Example:

YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)

引用:
mymm 回复于:2003-08-08 17:01:11
DAYS函数返回日期的整数表示。

要计算两个日期之间的天数,可以:
days (current date) – days (date(‘2000-9-1’))
要使用 SQL 获得当前的日期、时间及时间戳记,请参考适当的DB2 寄存器:

SELECT current date FROM sysibm.sysdummy1
SELECT current time FROM sysibm.sysdummy1
SELECT current timestamp FROM sysibm.sysdummy1

sysibm.sysdummy1 表是一个特殊的内存中的表,用它可以发现如上面演示的DB2 寄存器的值。您也可以使用关键字VALUES 来对寄存器或表达式求值。例如,在DB2 命令行处理器(Command Line Processor,CLP)上,以下SQL 语句揭示了类似信息:

VALUES current date
VALUES current time
VALUES current timestamp

在余下的示例中,我将只提供函数或表达式,而不再重复SELECT … FROM sysibm.sysdummy1 或使用VALUES 子句。

要使当前时间或当前时间戳记调整到GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:

current time – current timezone
current timestamp – current timezone

给定了日期、时间或时间戳记,则使用适当的函数可以单独抽取出(如果适用的话)年、月、日、时、分、秒及微秒各部分:

YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)

从时间戳记单独抽取出日期和时间也非常简单:

DATE (current timestamp)
TIME (current timestamp)

因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:

current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS – 3 MINUTES + 10 SECONDS

要计算两个日期之间的天数,您可以对日期作减法,如下所示:

days (current date) – days (date(‘1999-10-22’))

而以下示例描述了如何获得微秒部分归零的当前时间戳记:

CURRENT TIMESTAMP – MICROSECOND (current timestamp) MICROSECONDS

如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。为此,只要使用CHAR() 函数:

char(current date)
char(current time)
char(current date + 12 hours)

要将字符串转换成日期或时间值,可以使用:

TIMESTAMP (‘2002-10-20-12.00.00.000000’)
TIMESTAMP (‘2002-10-20 12:00:00’)
DATE (‘2002-10-20′)
DATE (’10/20/2002′)
TIME (’12:00:00’)
TIME (‘12.00.00’)

TIMESTAMP()、DATE() 和TIME() 函数接受更多种格式。上面几种格式只是示例,我将把它作为一个练习,让读者自己去发现其它格式。

大内存支持

众所周知,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