2008-12-31 Wednesday
1. crontab
在cygwin下需要安装启动cron,出现问题,启动不了,不能运行
定时执行,并保存日志
0 6 * * * /home/hnpay/hnacct/shell/crontab/StartSmsSend.sh L>>/home/hnpay/hnacct/log/areaL/cron.log
在百度下搜索ams1@hadev,搜不到什么
但是在Google中搜索,可以搜到,功能真的很强,一个页面中的一个词而已
查询aaajj,Google的结果又好很多
2. grep多个选择
进行或操作
在某些机器上,要使用-E参数才能够进行逻辑匹配(详见下)
grep "a|b" (匹配包含字符样式为"a|b"的行)
grep -E "a|b" (匹配包含字符样式为"a"或"b"的行)
man grep里面关于-E参数的说明是
-E
Treats each pattern specified as an extended regular expression (ERE). A NULL value for the ERE matches every
line.
Note: The grep command with the -E flag is the same as the egrep command, except that error and usage messages
are different and the -s flag functions differently.
find . -name /* | xargs grep "ERROR"|grep -E "1231|12-31"
find . -name "SO*0101.log"|xargs grep "ERROR"
find . -name "*log"| xargs grep "ERROR"|grep -E "1231|12-31"
注意 日志的信息必须要详细
2009-1-1 Thursday
1. 查询表的创建时间
SQL> select created from user_objects where object_name='STUDENT';
CREATED
--------------
22-10月-08
select * from user_objects where object_name = 'BK_APPORT_BAL_HIS_P_200812'--
select created,last_ddl_time from dba_objects where owner='SCOTT' and object_name='EMP';
查询表的大小
select sum(bytes)/1024/1024||'M' from dba_segments where owner='SCOTT' and segment_name='EMP';
2. fork
fork()函数,Linux系统调用
头文件:
#include <unistd.h>
函数定义:
int fork( void );
返回值:
子进程中返回0,父进程中返回子进程ID,出错返回-1
函数说明:
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的"副本",这意味着父子进程间不共享这些存储空间,它们之间共享的存储空间只有代码段。
3. ls排序显示
ls -lrt 按时间递增显示文件
ls -lnt 按时间递减显示
2009-1-6 Tuesday
1. 表类和CRcords的比较
数据库中的字段为整数时,如果值比较小,如NUMBER(8)
产生的程序中,对应的类型为Int
stru->ACCT_ITEM_TYPE_ID = table.ACCT_ITEM_TYPE_ID.Int();
stru->PARTNER_ID = table.PARTNER_ID.Int();
在使用时应该注意
#include "writeoff_inc.h"
int main()
{
long j = Login("ORACLE");
if (j <= 0)
{
g_cLogFile.Info(0, "数据库连接失败/n");
return 1;
}
T_ACCT_ITEM_TYPE t_acct_item_type;
t_acct_item_type.SetConn(DefaultConnect);
t_acct_item_type.SetBatSize(10);
t_acct_item_type.SetTableName("ACCT_ITEM_TYPE");
j = t_acct_item_type.Query("rownum < 3");
cout << "采用表类方式, t_acct_item_type.PARTNER_ID.Int()/n";
while ( j > 0)
{
cout << t_acct_item_type.PARTNER_ID.Int() << endl;
j = t_acct_item_type.Next();
}
cout << "采用CRecords, crecord.Field(1).Float() /n";
CRecords crecord(DefaultConnect, 5);
crecord.Query("select * from ACCT_ITEM_TYPE");
// cout << crecord.Field(1).Int() << endl; // 0
cout << crecord.Field(1).Float() << endl;
return 0;
Logout();
}
结果:
采用表类方式, t_acct_item_type.PARTNER_ID.Int()
21508
21510
采用CRecords, crecord.Field(1).Float()
21508
配置文件
[ORACLE]
ConnectString = hadev
PassWord = ams1
UserName = ams1
2009-1-7 Wednesday
1. 重定向命令
> 写入文件并覆盖旧文件。
>> 加到文件的尾部,保留旧文件内容。
2009-1-8 Thursday
1. 转意字符
//2009-1-8 测试转意字符"/",如果去掉引号"",虽然这个句子注释了,但也会报错
void main()
{
char* aa = "abc/dfg";
char* b = "abc/123";
char c = '//';
char f = '/';//可以这样
// char d = '/';//编译报错
// char d = '';//报错empty character constant
cout << aa << endl;//abc/dfg
cout << c << endl;
cout << b << endl;//abcS
}
结果:
abc/dfg
/
abcS
//对Linux下的目录取路径 /home/hnpay/hnacct
char* GetFilePath(char* pathandfile, char* thepath)
{
char* p = pathandfile;
char* point = NULL;
while (*p != '/0')
{
if (*p == '/')
{
point = p;
}
p++;
}
p = thepath;
while (pathandfile < point)//(p < point) 出错
{
*p++ = *pathandfile++;
}
*p = '/0';
return thepath;
}
int main()
{
char path[128];
GetFilePath("/home/hnpay/hnacct/log", path);
cout << path << endl;
return 0;
}
结果:
/home/hnpay/hnacct
2. 解密
追本溯源,程序中可以实现对密文的解密,找到实现这个功能的函数
int main()
{
char key[32];
key[31] = '/0';
char secret[64];
cout << "输入密文:";
cin >> secret;
decrypt(secret, key);
cout << "密码:" << key << endl;
return 0;
}
3. sql
select * from ams.ins_prod_h
--hnzw 进行检查
SELECT PRODUCT_INSTANCE_ID FROM ams.INS_PROD_H
WHERE NVL(VALID_DATE, SYSDATE - 1) <= SYSDATE
AND NVL(EXPIRE_DATE, SYSDATE + 1) > SYSDATE GROUP BY PRODUCT_INSTANCE_ID HAVING COUNT(1) > 1
2009-1-9 Friday
1. vi编辑器
vi filename
vi out.txt
文件操作指令多以 : 开头,这跟编辑指令有点区别。
:q 结束编辑(quit)
:q! 不存档而要放弃编辑过的文件。
:w 保存文件(write)其後可加所要存档的档名。
:wq 即存档後离开。
zz 功能与 :wq 相同。
:x 与:wq相同
2009-1-12 Monday
1. Linux命令
rm 删除
copy
sun@usasun ~
$ cp -i out.txt copyOut.txt
- - a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
- d 拷贝时保留链接。
- f 删除已经存在的目标文件而不提示。
- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
- l 不作拷贝,只是链接文件。
需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。
例子:
Cp -i file1 file2 (将文档 file1 复制成 file2 . -i为提示确认。)
cp file1 dir1 将文档 file1 复制到目录 dir1 下,文件名仍为 file1.
cp /tmp/file1 . 将目录 /tmp 下的文档 file1复制到现行目录下,档名仍为 file1.
cp /tmp/file1 file2 将目录 /tmp 下的文档 file1现行目录下,档名为file2
cp -r dir1 dir2 (recursive copy) 复制整个目录.若目录 dir2 不存在,则将目录dir1,及其所有文档和子目录,复制到目录 dir2 下,新目录名称为dir1.若目录dir2不存在,则将dir1,及其所有文档和子目录,复制为目录 dir2.
创建文件夹
sun@usasun ~
$ mkdir newfile
2009-1-16 Friday
1. cvs 使用
查看版本改动
选中文件 右键 cvs history 选中要比较的文件 右键 Diff
还可以通过view来看各个版本
ps -ef|grep acct
hnpay 19758 17692 1 01:46:54 pts/0 0:00 grep acct
hnpay 19428 1 9 01:45:02 ? 0:00 /home/hnpay/hnacct/bin/acct -x SMSDATACRE -r P -s 415_1232127813436 -t 594
2009-1-19 Monday
1. Kill进程
在cygwin中进行测试
hanio.exe 需要用户输入,运行后开始等待输入数据
sun@usasun /code
$ ./hanio
Input the number :
这时再打开一个cygwin界面
sun@usasun ~
$ ps ef
PID PPID PGID WINPID TTY UID STIME COMMAND
3972 1 3972 3972 con 1003 23:22:08 /usr/bin/bash
I 280 3972 280 3024 con 1003 23:24:51 /code/hanio
4016 1 4016 4016 con 1003 23:25:57 /usr/bin/bash
2304 4016 2304 3152 con 1003 23:26:26 /usr/bin/ps
执行
sun@usasun ~
$ kill 280
之后,Kill了进程hanio.exe
sun@usasun ~
$ ps lax
PID PPID PGID WINPID TTY UID STIME COMMAND
I 3972 1 3972 3972 con 1003 23:22:08 /usr/bin/bash
4016 1 4016 4016 con 1003 23:25:57 /usr/bin/bash
780 4016 780 756 con 1003 23:36:31 /usr/bin/ps
等待的界面上显示:
sun@usasun /code
$ ./hanio
Input the number :
Terminated
前台的进程可以用ctrl + c 来停止,后台进程用Kill
在进程运行的时候,进行查询
% ps -ef|grep acct
hnpay 23166 1 0 01:12:15 ? 0:00 /home/hnpay/hnacct/bin/acct -x SMSDATACRE -r E -s 407_1232380740147 -t 498
hnpay 23474 1 0 01:12:40 ? 0:00 /home/hnpay/hnacct/bin/acct -x SMSDATACRE -r R -s 409_1232380740566 -t 522
ptquery 23650 23494 0 01:13:34 pts/2 0:00 grep acct
hnpay 23383 1 0 01:12:35 ? 0:00 /home/hnpay/hnacct/bin/acct -x SMSDATACRE -r S -s 410_1232380740226 -t 534
2009-2-1
手工执行进程
HA5-ZW03-hnpay%StartSoDataStat.sh E
启动 /home/hnpay/hnacct/bin/acct -x SODATASTAT -r E
HA5-ZW03-hnpay%Sending output to nohup.out
HA5-ZW03-hnpay%StartSoDataStat.sh S
启动 /home/hnpay/hnacct/bin/acct -x SODATASTAT -r S
HA5-ZW03-hnpay%Sending output to nohup.out
2009-2-2 Monday
1. bat
http://baike.baidu.com/view/18756.htm
批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用。
C:根目录下一批处理文件名为t.bat,内容为:
@echo off
type %1
type %2
那么运行C:/>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
2. sql
HA5-ZW01-hnpay%cat areaA/SODATASTAT_A_20090202.log
2009-02-02 00:10:02 [SODATASTAT][THREAD-1]INFO: 正在进行内存数据加载,请稍后...
2009-02-02 00:10:02 [SODATASTAT][THREAD-1]INFO: 营业用户资料稽核一,SQL=[ SELECT PRODUCT_INSTANCE_ID FROM INS_PROD_A WHERE NVL(VALID_DATE, SYSDATE - 1) <= SYSDATE AND NVL(EXPIRE_DATE, SYSDATE + 1) > SYSDATE GROUP BY PRODUCT_INSTANCE_ID HAVING COUNT(1) > 1 ]
2009-02-02 00:10:32 [SODATASTAT][THREAD-1]INFO: 营业用户资料稽核二,SQL=[ SELECT PRODUCT_INSTANCE_ID FROM INS_PROD_A WHERE NVL(VALID_DATE, SYSDATE - 1) <= SYSDATE AND NVL(EXPIRE_DATE, SYSDATE + 1) > SYSDATE AND PRODUCT_INSTANCE_ID < 0 ]
2009-02-02 00:10:32 [SODATASTAT][THREAD-1]INFO: 营业用户资料稽核三,SQL=[ SELECT PRODUCT_INSTANCE_ID, ACCT_ID FROM INS_ACCREL_A WHERE NVL(VALID_DATE, SYSDATE - 1) <= SYSDATE AND NVL(EXPIRE_DATE, SYSDATE + 1) > SYSDATE AND STATE = 1 AND (PRODUCT_INSTANCE_ID < 0 OR ACCT_ID < 0) ]
2009-02-02 00:10:32 [SODATASTAT][THREAD-1]INFO: 营业用户资料稽核四,SQL=[ SELECT ACCT_ID FROM PAYMENT_PLAN_A WHERE STATE = 'U' AND ACCT_ID < 0 ]
2009-02-02 00:10:32 [SODATASTAT][THREAD-1]INFO: 营业三户资料数据稽核成功
2009-02-02 00:10:32 [SODATASTAT][THREAD-1]INFO: 正在清空内存数据,请稍后...
2009-02-02 00:10:32 [SODATASTAT][THREAD-1]INFO: 已退出系统!
2009-2-3 Tuesday
1. spool
set echo off取消回显,同时增加你的buffer参数的值,再试试
set termout off必须写在脚本里面运行才有效. 对INTERACTIVELY的查询无效.
所以你可以写一个TEST.SQL脚本:
SPOOL c:/dd.txt
set feedback off
set termout off
select * from k;
SPOOL OFF
然后用SQLPLUS USER/PASSWORD @TEST.SQL来运行
在sqlplus
直接将表存为文本文件
spool c:/tbdata.txt
set heading off
set feedback off
select * from tbname;
spool off;
C:/Documents and Settings/sun>sqlplus sun@XE/sun
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 2月 3 21:23:09 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> spool D:/sp_data.txt
SQL> select * from student;
SNO SNAME
---------- --------------------
001 mm
002 mm
007 GG
007 GG
003 mm
006 mm
2009 NewYear
已选择7行。
SQL> spool off
SQL>
D:/sp_data.txt内容
SQL> select * from student;
SNO SNAME
---------- --------------------
001 mm
002 mm
007 GG
007 GG
003 mm
006 mm
2009 NewYear
已选择7行。
SQL> spool off
转
自测例:将ssrv_sendsms_task表中的数据导出到文本(数据库Oracle 9i 操作系统 SUSE LINUX Enterprise Server 9)
spool_test.sh脚本如下:
#!/bin/sh
DB_USER=zxdbm_ismp #DB USER
DB_PWD=zxin_smap #DB PASSWORD
DB_SERV=zx10_40_43_133 #DB SERVICE NAME
sqlplus -s $DB_USER/$DB_PWD@$DB_SERV<<EOF # -s 参数屏蔽打印到屏幕上的其他信息,只显示sql执行后从DB中查询出来的信息,过滤掉spool函数执行时在文件中写入的其他信息。
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool promt.txt
select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task;
spool off
EOF
执行./spool_test.sh后生成sp_test.txt,内容如下:
83|115|1|20080307
85|115|11|20080307
86|115|10|20080307
84|115|2|20080307
6|5|14|20080307
7|5|12|20080307
9|5|15|20080307
2. SQL PLUS登录
以管理员登录不需要密码,即任意密码都可以
sqlplus / as sysdba
注意/ 前后都有空格
如
sqlplus a/a as sysdba
连接到:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> select user from dual;
USER
------------------------------------------------------------
SYS
2009-2-4 Wednesday
1. 查询用户权限
SQL> select * from session_privs;
查询当前用户中的所有的表
SQL> select table_name from tabs;
2009-2-6 Friday
1. 判断月末
在日志中看到
HA5-ZW03-hnpay%cat BEFBACKUPDATA_E_20090205.log
2009-02-05 23:00:03 [BEFBACKUPDATA][THREAD-1]INFO: 正在进行内存数据准备,请稍后...
2009-02-05 23:00:03 [BEFBACKUPDATA][THREAD-1]INFO: 非月末最后一天,不进行经分数据备份处理
2009-02-05 23:00:03 [BEFBACKUPDATA][THREAD-1]INFO: 正在清空内存数据,请稍后...
2009-02-05 23:00:03 [BEFBACKUPDATA][THREAD-1]INFO: 已退出系统!
进行查找,发现在程序中进行了判断
//Add By June 20081212
CTime c_Time;
c_Time.GetLocalTime();
c_Time.AddDay(1);
if ( c_Time.GetDay() != 1 )
{
g_cLogFile.Info(0, "非月末最后一天,不进行经分数据备份处理");
return 1;
}
月末的下一天是1号,用这种方法进行判断值得注意,比较直观方便
判断一个整数是否为4的幂
bool fn(unsigned int x)
{
if ( x == 0 ) return false;
if ( x & (x - 1) ) return false;
return x & 0x55555555;
}
2009-2-9 Monday 元宵
1. move
移动文件,在dos中是命令move
在doc进行move操作
在使用前应该先建好文件夹
md PHOTO
D:/>pwd
/cygdrive/d
D:/>move *doc DOC
D:/1925332数据库课程设计).doc
D:/C语言面试题大汇总.doc
D:/三年级上学期.doc
D:/三年级下学期.doc
D:/数据库设计.doc
D:/新建 Microsoft Word 文档.doc
D:/用户说明书.doc
D:/知识点.doc
D:/高质量C++编程指南.doc
2009-2-10 Tuesday
1. 外连接查询
2009-2-11 Wednesday
1. shell中连接Oracle
可以在shell中使用sqlplus命令连接了数据库之后再执行操作命令,也可以把操作命令写在.sql文件中去执行。
可以在cygwin中进行测试
sun@usasun ~/09
$ cat sql.sh
#!/bin/sh
#2009-2-12 在shell中执行sql命令
sqlplus sun/sun@XE <<!
#注意 <<! 不可少,或者是 <<EOF
select * from student;
select sysdate from dual;
exit
sun@usasun ~/09
$ ./sql.sh
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 2月 12 17:57:48 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> SQL>
SNO SNAME
---------- --------------------
001 mm
002 mm
007 GG
007 GG
003 mm
006 mm
2009 NewYear
已选择7行。
SQL> SQL>
SYSDATE
--------------
12-2月 -09
SQL> SQL> 从 Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
断开
sun@usasun ~/09
$
2009-2-12 Thursday
1. cygwin访问路径
sun@usasun ~
$ cd /cygdrive/d
就可以到D盘了
2. 日期星期查询
select to_char(sysdate,'ww') from dual
select to_char(to_date('20090105', 'yyyymmdd'),'ww') aa from dual
select trunc(next_day(sysdate - 8, 1) + 1) from dual
select to_char(sysdate, 'day') from dual
select to_char(sysdate, 'd') from dual
sun@usasun ~/09
$ ./sql.sh >>2009-2-12-test.log
将结果导入到文件中,就不在屏幕上显示了
2009-2-16 Monday
1. sql分组查询
select min(sno), sname from student where sname <'mm' group by sname --ʹÓú¯Êýmin¶Ôsno×ֶνøÐÐÏÔʾ£¬×¢ÒâÕâÖÖ·½·¨
select sname from student where sname <'mm' group by sname
可以使用min(sno)这种方式显示非group by 的字段
2009-2-17 Tuesday
1. C中的system
使用system来执行系统指令
#include <iostream.h>
void main()
{
// system("d:");
int i = system("dir");
cout << i << endl;
}