Ruby 语言 思想驱动生活

Ruby,Rails,编程是一种乐趣。

Tag List for:

哪有数据库抱怨sql太复杂的

Posted by liubin on Wednesday September 5 @ 22:30
Taged with: tagged and

其实就是一个简单的update语句

  1. UPDATE TAB1 SET COL1 =
  2. SUBSTRING(COL1 FROM 1 FOR POSITION( "AAAAAA" IN UPSHIFT(COL1))-1) 
  3. || "BBBBBB"||
  4.  SUBSTRING(COL1 FROM 
  5.  POSITION( "AAAAAA" IN UPSHIFT(COL1))  + 7
  6.  FOR CHAR_LENGTH(COL1) - POSITION( "AAAAAA" IN UPSHIFT(COL1)) - 7)
  7.  WHERE POSITION( "AAAAAA" IN UPSHIFT(COL1)) > 0;

这个语句就是想把一个字段的AAAAAA替换成BBBBBB而已,不过sql/mp没有提供replace之类的函数,只好用这样的土方法了。(如果这个字段有5个AAAAAA,则这个语句要执行5次,呵呵,够土)
但是执行的时候出错:
*** ERROR from SQL [-8300]: File system error occurred on
*** \XXXXX.$DATA01.TEST.TAB1.
*** ERROR from File System [1133]: The selection expression or update expression
*** is too complex to be represented in NonStop SQL/MP internal data
*** structures.

哪有数据库抱怨sql太复杂的,只有人脑想不到的,没有机器处理不了的。
如果用select来选这个字段(当然包括那些函数)的话则没问题,所以应该说这些函数的组合应该没问题的,可能是数据类型限制。结果把表定义中这个字段改小一点就好了。试了几次,G06.28的话是1424,如果char列的长度是1425,就会出上面的错误。

TAG:

NSK里的DEFINE

Posted by liubin on Friday August 24 @ 15:40
Taged with: tagged and

Nsk里的Define跟c语言里的define类似,不过不是语言级别的,是执行环境级别的,或者说是session级别的。Logon之后定义的define,logoff之后就没了,下次logon还要在执行(手工或者放到logon之后自动执行的脚本里)
Define的好处就是方便,简单。比如程序读写文件,实际的文件名随时会变,大多数情况下都会把要读写的文件放到一个固定的config文件里,然后从config里来得到文件的路径。Nsk的话,在程序里只需要使用理论名(即define值)。
Define是一个key value类型的,程序使用key,至于value是什么,执行之前指定就行了。
先说define名,就是上面的那个key了,必须是=开头,长度(包括=)2-24,第二个字符必须是英字母。
Define属性。最主要的是class属性,指定define的类型,包括sql的catalog,defaults,map(key-实际文件名),spool,tape等。经常用的就是catalog和map了。
这是一个简单的map的例子
$DISK SUBVOL 4> ADD DEFINE =MYDEF , CLASS MAP , FILE $DISK.SUBVOL.FILE1
$DISK SUBVOL 5> info define =MYDEF
Define Name =MYDEF
CLASS MAP
FILE \NODE1.$DISK.SUBVOL.FILE1

$DISK SUBVOL 7> fup info =MYDEF,detail
comment 相当于fup info \NODE1.$DISK.SUBVOL.FILE1,detail
$DISK.SUBVOL.FILE1 24 Aug 2007, 13:39
ENSCRIBE
TYPE U
FORMAT 1
CODE 101
EXT ( 4 PAGES, 12 PAGES )
MAXEXTENTS 978
BUFFERSIZE 4096
OWNER 96,5
SECURITY (RWEP): NNNU
DATA MODIF: 1 Aug 2007, 10:46
CREATION DATE: 1 Aug 2007, 10:46
LAST OPEN: 14 Aug 2007, 14:57
FILE LABEL: 154 (3.7% USED)
EOF: 788 (0.0% USED)
EXTENTS ALLOCATED: 1
$DISK SUBVOL 8> delete define =MYDEF
$DISK SUBVOL 9> fc fup
$DISK SUBVOL 9> fup info =MYDEF,detail
$DISK SUBVOL 9..
INFO =MYDEF,detail
— ^ –
ERROR - COULD NOT FIND DEFINE.
*ABEND*
ABENDED: 3,216
$DISK SUBVOL 10>

TAG:

pTAL,TAL,EpTAL,TNS,TNS/R,TNS/E

Posted by liubin on Friday July 20 @ 19:56
Taged with: tagged and

HP的这些东西太faint了,没人教,只能自己看,都是英文文档,根本看不过来。
这些概念也模模糊糊似懂非懂的。

pTAL 基于TAL HP Transaction Application Language。可以用pTAL 或 EpTAL 来编译pTAL源程序。

EpTAL 编译出来的代码都是TNS/E 的。
pTAL 编译出来的代码都是TNS/R 的。
TAL 编译出来的代码都是TNS的。

TNS architecture. NonStop 系列体系结构。HP计算机(NS系列)基于CISC技术,TNS体系结构实现了TNS指令集。

TNS/E architecture. NonStop Series/Itanium architecture.这是HP基于Itanium技术的计算机系统。
TNS/E体系实现了Itanium的EPIC(explicitly parallel instruction set computing)指令集,而且向上兼容TNS和TNS/R系统级别的体系结构。

TNS/E native object code. 由支持Intel Itanium 指令编译器编译成的对象,TNS/E native object code只能在TNS/E系统上运行,不能在TNS和TNS/R上运行。

TNS/R architecture. NonStop Series/RISC 结构,如R所示,这是基于RISC指令集的HP计算机系统。向上兼容TNS系统。

TNS/R native object code. 由支持MIPS RISC 指令集的编译器编译成的代码,同样,他也只能运行在TNS/R系统上,而不能运行在TNS或者TNS/E系统上。

release version update (RVU).一组对NonStop OS系统软件的修正,用RVU ID来标识,以这为单位发售和提供支持。RVU包括对象文件,支持文件,文档等。

TAG:

TAL的Hello World程序

Posted by liubin on Thursday July 19 @ 22:47
Taged with: tagged , and

The Transaction Application Language (TAL) 是hp NSK上一种编程语言,如果分类,应该算过程式。
,而且也需要编译为可执行文件。

Tal不区分大小写,但是在C语言里调用Tal过程时过程名(函数名)一定要全用大写。

注释有两种,一个是两个横线–,直到行末有效,另一个是感叹号!,直到行末有效,或者到下一个感叹号,比如
CALL PROC1(p1,!p2!,p3) –p2 is not provided
这个调用和 PROC1(p1,,p3)是等价的,但是如果在第二个参数出写个那样的注释,非常好理解。

下面来写个Hello World
其实无论是c,java,ruby,都很简单,但是Tal可就复杂了。

首先,需要定义一个主过程,着类似c的main函数。
PROC myproc MAIN;
这个myproc是名字,PROC标识他是一个过程,MAIN表示是程序开始执行的入口点。
然后就可以打印了。Printf,没找到个函数。当然,人家凭什么给你。

最后找了一下,发现是这样的。
首先,执行编译好的程序是从TACL启动的,注意是TACL,不是Tal,完全不同的东西。
如果要打印,则需要往TACL进程里写东西,TACL才能打印到标准输出。也可以把我们要执行的程序看作TACL的子程序。

TACL用RUN启动一个程序的时候,会有一个500多个字节(word?)的message送给被启动的进程,包括id,卷标,输入输出,参数等,我们就可以从这个message里取得输出的。
(more…)


Sql/mp的Numeric和Decimal

Posted by liubin on Thursday June 28 @ 19:20
Taged with: tagged and

Sql/mp是hp的NSK系统上的数据库,应该是老版本的了,新的叫SQL/MX。
SQL/mp里为什么要弄这么多的数值型的数据类型:NUMERIC,SMALLINT,INTEGER,LARGEINT,FLOAT,REAL,DOUBLE PRECISION,DECIMAL等。
而且这些类型好像还都能用在DDL语句里,而有些又是互相重合的,真的有点混。

今天主要看了一下NUMERIC和DECIMAL这两个类型。
这两个光看字面很难区分,numeric就是数字的意思,decimal是十进制的意思,不像int和float那样有没有小数点那么区别明显。
其实这两个类型的区别应该是在内部存贮上:
Numeric就是binary的,也就是内部形式。比如1,会存为0×0001
Decimal是基于ascii的,比如1会存为0×0031
(more…)

TAG:

NSK中进程管理的两个命令

Posted by liubin on Thursday June 21 @ 19:16
Taged with: tagged

status是显示进程信息,类似ps,status *,user表示显示所有当前用户的进程
status *,term表示由当前term启动的进程。
stop则是停止一进程,类似kill

还有一个命令就是run,用来启动一个程序,而且能启动时候会给进程付与一个名字,比如下面的$y4s5。

$VOL2 LIU 58> status *,user
Process Pri PFR %WT Userid Program file Hometerm
$Y4RZ 0,241 150 R 000 96,5 $SYSTEM.SYS04.TACL $ZTN00.#PT7BE
U0
$Y4S5 0,547 149 015 96,5 $SYSTEM.SYS04.EMSDIST $ZTN00.#PT7BE
TS
$VOL2 LIU 59> stop $y4s5
$VOL2 LIU 60> status *,term
Process Pri PFR %WT Userid Program file Hometerm
$Y4RZ 0,241 150 R 000 96,5 $SYSTEM.SYS04.TACL $ZTN00.#PT7BE

TAG:

用FUP建立结构化文件

Posted by liubin on Monday June 11 @ 20:41
Taged with: tagged , and

File Utility Program 的缩写
简称FUP,非常强大的文件管理工具。
可以参考File Utility Program (FUP) Reference Manual
或本blog的其它文章:tag->

关于什么是结构化文件,可以参考本地其它文件,tag
先看看表的结构:

(前面的小横线是FUP的提示符)
-info table1,detail

...
TYPE K
...
REC 28
...
KEY ( COLUMN 0, OFFSET 0, LENGTH 4, ASC )
...

table1是一个表,在NSK中基本上就是一个文件,REC 28表示每个记录的最大长度,KEY是第一个列,offset为0,长度是4,为int型。

(more…)


HP NSK系统简介

Posted by liubin on Monday June 11 @ 20:40
Taged with: tagged

NSK 是NonStopKernel的略称。狭义上理解的话就是HP的NonStop Server上运行的操作系统。但是NSK所依存的硬件除了NonStop Server以外没有别的了,所以广义上来说NSK也可以包含硬件部分。一般都使用广义上的意义。
为了实现所谓的NonStop,NSK几乎把所有的组件都做了2重化,即使发生了故障,立刻可以从主设备迁移到副设备上去,从而实现不停机。
一个NSK一般由若干个NODE构成,而一个Node的CPU一般为2-16个。Node之间是通过高速的ServerNet技术互联的。每个node节点都有一个node id和node名,在一个系统中是不允许重复的。
Node内的各个CPU都是在同一个OS下运行的,不同的Node则可以运行不同版本的OS(我猜101%windows2000是不行的)。各个CPU可以运行不同的进程,而不像SMP那样所有的CPU一同运行同一个进程。
进程主要用进程名来标识(当然NSK中也有pid的概念)。进程名在同一个Node里不能重复(进程对除外)。不同的节点之间的进程名则可以重复。所以一般进程的标识也都附带节点标识:
节点名.进程名

进程对(Process Pair)。为了确保高可用性,你可以启动一个程序的两个进程,这两个进程就是一组进程对:Primary进程和Backup进程。业务处理主要由主进程来完成,副进程则监视主进程,如果万一主进程死掉了,业务处理则移到副进程来进行。
要编写进程对程序,需要使用NSK特殊的技术NonStopCoding。而且,进程对中的兄弟俩不能在同一个CPU上运行。
再简单说说文件系统。
不像UNIX那样存在唯一一个根目录,有点像windows,以volume为单位管理,volume就类似windows的c,d,e盘等。然而,NSK目录结构最多为两层(volume,subvolume)。
比如$data01是一个volume,下面有一个sub volume liubin,则liubin的下面只能建立文件,不能建立文件夹(NSK中好像也没有文件夹,目录这种说法。)。所以一个文件的全路径可能是这样的:
\nodeid.$volume.subvol.file
由节点名,卷名,子卷名,文件名这四部分组成。

在FORMAT1的情况下,文件最大只能到2gb,不过在FORMAT2的情况下,可以建立更大的文件了。有点类似oracle的数据文件结构,NSK的文件也是以extent为单位进行分配的,一个文件的第一个extent为primary extent,剩下的都是secondary extent。每个extent用page(2048byte)来声明。

TAG:

TACL环境的定制

Posted by liubin on Friday June 8 @ 19:08
Taged with: tagged and

Linux下,用户login之后可以设置一些环境变量等,TACL也可以。
比如logon之后,会有如下信息:

(Invoking $SYSTEM.SYSTEM.TACLLOCL)
(Invoking $DATA11.RYUHIN.TACLCSTM)

其中TACLCSTM文件,是一个TACL宏文件,默认的时候(刚创建)是这样的
?TACL MACRO
== TACL created this file for your protection.

而system下的TACLLOCL应该是共有的吧(猜测)。

定制内容
首先建立一个脚本mymacro,内容如下:

  1. ?SECTION TYPE MACRO
  2. [#IF  [#EMPTY %*%]
  3.   |THEN|
  4.      #OUTPUT  "** ERROR ** ex) COPY FILE1"
  5.   |ELSE|
  6.      #OUTPUT  FUP COPY %*%
  7.               FUP COPY %*%
  8. ]
  9.  
  10. ?SECTION VI MACRO
  11. [#IF [#EMPTY %*%]
  12.   |THEN|
  13.        EDIT
  14.   |ELSE|
  15.        EDIT %*%
  16. ]
  17.  
  18. ?SECTION LS  ALIAS
  19. FILES
  20.  
  21. ?SECTION LL ALIAS
  22. FILEINFO
  23.  
  24. ?SECTION H ALIAS
  25. HISTORY
  26.  
  27. ?SECTION RM MACRO
  28. [#IF [#EMPTY %*%]
  29. |THEN|
  30.     #OUTPUT no file to be deleted
  31. |ELSE|
  32.     PURGE /CONFIRM/ %*%
  33. ]

?SECTION RM MACRO开头的部分是宏,可以写代码,处理参数等。
?SECTION LL ALIAS是别名,可能功能比较简单。
但If then else的写法比较诡异。

然后修改TACLCSTM文件,把这个mymacro文件load进去:

  1. ?TACL MACRO
  2. == TACL created this file for your protection.
  3.  
  4. load/keep 1/mymacro

新开一个term 来logon

  1. (Invoking $DATA11.RYUHIN.TACLCSTM)
  2.  
  3. Loaded from $DATA11.RYUHIN.MYMACRO:
  4.  
  5. TYPE VI LS LL H RM

从显示的上面最后两行可以看出,定义的宏之类的被load进来了,可以使用了。

  1. $DATA11 RYUHIN 3> ls
  2.  
  3. $DATA11.RYUHIN
  4.  
  5. CONFIG    DEFAULT   EST       FILE6U    FUPCSTM   INFILE   
  6. TACLCSTM  TEST

TACLCSTM在每个用户的home下,就是who命令结果中的Saved volume属性。

TAG:

第一次使用Himalaya

Posted by liubin on Tuesday June 5 @ 19:41
Taged with: tagged , and

有机会要用HP的NonStop Server himalaya了,也许只有两个月,有点短。
这个系统(硬件,OS)应该是原来日本的一个公司tandem做的(几个从HP跳出来的人创立的公司),后来这个公司被康柏收购了,再后来康柏又被惠普收购了。
NSK:NonStop Kernel的意思吧。

今天主要是在远程来访问主机,不过透过机房的玻璃见到了主机,但是没进去。
客户端(windows)先装上了outside view32这个软件,应该页是个终端模拟的软件,可见其公司主页http://www.crystalpoint.com/
稍微设置了一下,就可以连接目标主机了。
Open session ,打开到一台主机的连接(这里是telnet协议)
连上之后,显示如下信息:

  1. WELCOME TO sk1-1 [PORT $ZTC00 #23 WINDOW $ZTN00.#PT7BDZU]
  2. TELSERV - T9553G06 - (24FEB2006) - (IPMAEF)
  3.  
  4.  
  5. Available Services:
  6.  
  7. PPMENU   PP521    PPDCM    OSS      TACL     EXIT
  8. Enter Choice>
  9. ?>

选择TACL(Tandem Advanced Command Language)

  1. Enter Choice> tacl
  2. TACL 1>

Logon

  1. TACL 1> logon GROUP1.USER1
  2. Password:
  3. Last Logon05 JUN 2007, 11:27
  4. Last Unsuccessful Attempt: * NONE *
  5. TACL (T9205D46 - 24MAY2006), Operating System G06, Release G06.28.00
  6. (C)1985 Tandem (C)2005 Hewlett-Packard Development Company, L.P.
  7. CPU 1, process has no backup
  8. June 5, 2007 13:12:00
  9. (Invoking $SYSTEM.SYSTEM.TACLLOCL)
  10. (Invoking $DATA11.USER1.TACLCSTM)
  11. Current volume is $DATA11.USER1
  12. $DATA11 USER1 1>
  13.  
  14.  
  15. $DATA11 USER1 1> help
  16. This is the Tandem Advanced Command Language, TACLAlthough TACL has many
  17. features not found in COMINT, you will find that all COMINT commands
  18. will also work with TACL.
  19.  
  20. The following are examples of commands you can try:
  21.  
  22. COMPUTE          Do simple arithmetic
  23. EDIT             Run the Tandem editor program
  24. FILES            List the files in this subvolume
  25. HISTORY          Find out previous commands you have typed
  26. LOGOFF           End this terminal session
  27. PASSWORD         Change your logon password
  28. PURGE            Delete a file
  29. RUN              Begin execution of a program
  30. STATUS *,TERM    Find out what is running on this terminal
  31. STATUS *,USER    Find out what is running that you have started
  32. TIME             Get the current time
  33. WHO              Display user information about this terminal session
  34.  
  35. There are many more possible commands which are listed in the TACL Programming
  36. Guide and TACL Reference Manual.
  37.  
  38. $DATA11 USER1 2> who
  39. Home terminal: $ZTN00.#PT7BDZU
  40. TACL process: \SK1.$Y3BJ
  41. Primary CPU: 1 (NSR-W)
  42. Default Segment File: $DATA11.#0003347
  43.   Pages allocated: 8  Pages Maximum: 1024
  44.   Bytes Used: 11352 (0%)  Bytes Maximum: 2097152
  45. Current volume: $DATA11.USER1
  46. Saved volume:   $DATA11.USER1
  47. Userid: 96,5  Username: GROUP1.USER1  Security: "NNNU"
  48. Logon name: GROUP1.USER1
  49. $DATA11 USER1 3> files
  50.  
  51. $DATA11.USER1
  52.  
  53. TACLCSTM
  54. $DATA11 USER1 4>
  55.  
  56.  
  57. $DATA11 USER1 7> fileinfo
  58.  
  59. $DATA11.USER1
  60.  
  61.               CODE              EOF   LAST MODIFIED  OWNER  RWEP   PExt   SExt
  62. EST            101             4106 05JUN2007 16:11  96,5   NNNU      6      6

fileinfo命令结果中Code列的101是文本文件的意思

今天学到的命令:logon,logoff,files,fileinfo,volume,edit(里面命令不少,只用了几个最简单的)
files类似ls,fileinfo类似ls -l
volume 后面跟volume.sub_volume,类似于cd。
volume就类似文件夹似的。
edit比较复杂,是个编辑器,里面的命令有很多,只记了几个。



Locations of visitors to this page


Recent Comments