笔记 :09-1月

 

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;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值