页码:16-1TIPTOP进阶技术讲座TIPTOP底层脚本页码:16-2目录1.shell脚本.....................................................31.1r.c2.......................................................31.2r.cs.......................................................41.3r.l2.......................................................41.4r.r2与exe2................................................51.5r.f2.......................................................61.6r.s2.......................................................61.7loadx......................................................61.8analyze2...................................................71.9finderr....................................................71.10createtop..................................................82.SQL脚本.......................................................82.1q_tbsFREE..................................................92.2q_usersize.................................................92.3q_bigtable................................................102.4q_locktable...............................................103.定制脚本.....................................................113.1nmon......................................................113.2findtop...................................................153.3cal_user..................................................15页码:16-31.shell脚本这类脚本中与Genero有关的一般放在$DS4GL/bin目录下,与数据库有关的一般放在ora/bin目录下。1.1r.c2功能:将4gl程序编译为42m。存放路径:$DS4GL/bin执行方法:进入相应模块的4gl目录下,执行“r.c2程序名”命令。内容分析:将需要编译4gl程序拷贝到相应42m目录下;切换lisence,在该脚本中是通过下列的程序段来实现的;注意:若使用了lisenceserver,则lisence不仅与FGLDIR有关,还与FGLPROFILE有关,因此在r.c2的脚本中不仅要切换FGLDIR,还要切换FGLPROFILE。编译4gl程序。通过查看r.c2脚本(如下所示)得知:r.c2底层是利用fglcomp工具来进行编译的。„„if[$?-ne0];thenif[${m1}=c];thenfglcomp-I$TOP/config/include-I$CUST/config/include../42m/${mod}_${1}.4glelsefglcomp-I$TOP/config/include../42m/${mod}_${1}.4glfifi„„FGLDIR=`echo$FGLDIR|cut-d.-f1`.dev;exportFGLDIR例:编译程序aimi100.4gl,须进入到$AIM/4gl,执行命令“r.c2aimi100”默认lisence是注册在FGLDIR目录下。页码:16-41.2r.cs功能:在任何目录下编译单支4gl程序,42m产生在当下目录。存放路径:$DS4GL/bin执行方法:在任何目录下,执行“r.cs程序名”命令内容分析:1.3r.l2功能:读取程序链接数据并将42m程序链接至42r或42x。存放路径:$DS4GL执行方法:进入相应模块的4gl目录下,执行“r.l2程序名”命令。内容分析:r.l2底层是通过调用的fgllink工具来进行链接的。例:将aimi100.42m与aimi101.42m链接为aimi100.42r,执行命令“r.l2aimi100”if[$fgldir=''];thenfgldir=`echo$FGLDIR|cut-d'.'-f1`.dev#切换lisenceelsefgldir=$fgldirfiexportFGLDIR=$fgldirfglcomp$1#编译例:将编译程序aimi100.4gl,执行命令“r.csaimi100”知识点:利用命令vi`whichr.c2`,可以在任何路径下查看r.c2的脚本,其他的脚本也可以通过这种方式来查看(注意`不是单引号而是1键左边的那个键所敲字符)。在编译程序时用developlisence,在运行程序时用runtimelisence。Genero中与代码相关的文件有:4gl:程序源码,为纯文本文件。42m:程序编译之后生成的文件,为二进制文件。42r与42x:这两个文件都是链接生成的,其不同点是42r文件可以独立运行,而42x文件不能,因为42r文件中有MAIN函数,而42x中没有MAIN函数。假设a.42r是由a.42m(由a.4gl编译生成)与b.42m(由b.4gl编译生成)链接生成,此时若只对a.4gl程序中函数的逻辑做修改而没有新增函数,则在重新编译a.4gl之后不需要再次链接;若对a.4gl程序新增了函数,则需要在重新编译a.4gl程序之后再次链接。页码:16-51.4r.r2与exe2功能:执行编译完成的42r程序。存放路径:$DS4GL/bin执行方法r.r2:在相应模块的4gl目录下,执行命令“r.r2程序名”exe2:在任何目录下,执行命令“exe2程序名”内容分析r.r2exe2因此,用户有时会遇到r.r2执行成功,而exe2执行失败的情况(或者相反)。知识点:通过查看r.d2+脚本可知,r.d2+的底层是执行$FGLRUN–d。udm7是脚本,不是4gl程序。通过查看其脚本可知:执行udm7实质上是执行AZZ模组下的udm_tree.4gl程序。rebuild的功能:批量编译或链接TIPTOP程序,可对整个系统或部分模块进行整体编译或链接。当用户在windows平台上用UE写好程序上传到linux平台上时,有些时候会出现乱码,这是因为windows平台下的换行符其ASCII码是$D$A,而Linux平台上的换行符其ASCII码是$A,这时,可通过执行killcr脚本来过滤掉多余的ASCII码$D,进而消除乱码。用法:killcr文件名exe2-----FGLRUN$AZZ/42r/p_go.42r------将aimi100作为参数传入r.r2----FGLRUN$PWD/../42r/aim_aimi100例:运行aimi100,在任何目录下执行命令“exe2aimi100”例:运行aimi100,进入$AIM/4gl目录,执行命令“r.r2aimi100”r.l2与r.gx的区别:r.l2链接程序之前需要将相应的链接程序维护到p_link中,然后执行r.l2;而r.gx不需要维护p_link,可以直接执行;r.gx特定用于SUB、LIB、QRY三个模块,而r.l2可用于任何模块。页码:16-61.5r.f2功能:将per画面档编译为42f文件。存放路径:$DS4GL执行方法:在相应模块的per目录下,执行命令“r.f2per画面档”内容分析:通过查看r.f2脚本得知,r.f2底层调用的是fglform工具。r.f2脚本的关键语句r.f2.per脚本的关键语句:1.6r.s2功能:同步数据库schema到TIPTOP的.sch文件中,当我们对数据库进行增减表、栏位等涉及到schema变动的操作时,都要执行此命令更新TIPTOP的.sch文件,以保证程序能够应用到最新的schema。(.sch文件在$TOP/schema目录下)。存放路径:ora/bin执行方法:执行“r.s2数据库(用户名)内容分析:通过查看r.s2脚本得知:r.s2底层调用的是fgldbsch工具,该脚本的关键语句如下所示:1.7loadx功能:向数据库中导入数据存放路径:ora/bin执行方法:load数据库名文件名所要导入的数据集例:loadxds2zx_file.txt“insertintozx_file(zx01)”知识点:fglcomp、fgllink、fglrun、fgldbsch等工具脚本放在$FGLDIR/bin目录下。fgldbsch-db$1-ie-st例:当用户修改了ds库中的表时,可通过执行“r.s2ds”命令来更新相应ds.sch文件fglform-M${1}Tif[[$?-eq0]];thenr.f2.4fd$1elser.f2.per$1fi例:编译aimi100.per画面档,进入$AIM/per目录,执行命令“r.f2aimi100”页码:16-7内容分析:loadx底层是用Genero语言的LOADFROM指令来实现的。1.8analyze2功能:对数据库做重计。存放路径:ora/bin执行方法:重计指定工厂:analyze2数据库名重计指定表:analyze2数据库名表名重计某一批表:analyze2数据库名表名查看帮助信息:analyze21.9finderr功能:查找错误码的描述存放路径:ora/bin执行方法:finderr错误码。知识点:finderr中的错误码来自于informix的错误码(比如TIPTOP系统中的status以及SQL.SACODE),因此,在informix平台上该命令会比较常用。知识点:为什么需要对数据库做重记?Oracle在接收到SQL语句时,首先会根据统计信息生成执行计划,然后才会按照该执行计划来执行该SQL语句,因此统计信息是否准确决定了Oracle执行的效能。若要提高Oracle的执行效能,我们就需要对数据库做重记来保证统计信息的准确。例:重计ds库中以im开头的表,执行命令“analyze2dsim%_file”例:重计ds库中的ima_file,执行命令“analyze2dsima_file”例:重计数据库ds,执行命令“analyze2ds”知识点:load与loadx的不同点:load可将整个数据库或者整个表导出,而loadx可以通过SQL语句选定一个数据集,然后将该数据集导出。三组上传下载数据文件的命令load与unloadloadx与unloadxloaddb与unloaddb页码:16-81.10createtop功能:在安装TIPTOP系统时,执行createtop命令可以实现如下的功能createtablespacecreateuser修改Oracle参数赋予role导入demo参数重计修改相关目录的权限存放路径:ora/bin执行方法:在安装时直接