include 就是一般动词「包括、包含」的意思,需要搭配主语、宾语。例句:The meal includes dessert and beverage.including 是用来带出包含的事物,在主要句子后面先加上逗号之后,由 including 引导包含的事物。例句:Some people are trapped in the burning building, including two men and five women.included 也是在主要句子后加上逗号,再作补充说明,不过它放置的位置跟 including 相反,会先讲出所包含的事物,再加上 included 于后方位置。例句:Some people are trapped in the burning building, two men and five women included.
2018/12/18
[English] include, including, included的用法区别
一直对include, including, included的用法存在疑惑,今天找到一篇很棒的文章,简练如下,算是做个笔记吧。
2018/12/12
Linux挂载硬盘的小插曲
本人Linux小白一枚,前两天给一台已有3块硬盘的电脑加硬盘,螺丝拧紧后把SATA线一头连硬盘,另一头随便找了个空SATA位插入,便开机。
系统启动后显示如下画面。
网上Google了很多资料,也没解决,后来想是不是硬盘顺序的关系,遂逐个调换SATA线顺序,终于搞定。(其实拔掉新硬盘,用fdisk -l查看硬盘顺序,就是/dev/sdx这个顺序,再去调换硬盘会快一点。)
所以,方法你Get到了没?😁
系统启动后显示如下画面。
网上Google了很多资料,也没解决,后来想是不是硬盘顺序的关系,遂逐个调换SATA线顺序,终于搞定。(其实拔掉新硬盘,用fdisk -l查看硬盘顺序,就是/dev/sdx这个顺序,再去调换硬盘会快一点。)
所以,方法你Get到了没?😁
2018/12/06
在不重装的情况下清空Windchill系统中的CAD资料(Wiping the Windchill data without reinstalling)
公司去年上了PTC公司的PLM/PDM系统:Windchill,但因为研发人员对产品的规范有分歧,多次开会后,最后决定清空所有已上传的资料,包括产品库和存储库里的所有资料。
这说起来容易,做起来难啊,可苦了这帮IT兄弟了,谁叫咱是“挨踢人猿”呢……
Windchill系统里通过Creo上传的资料,一旦被其他产品引用,或进行了升级,想要删除是非常困难的,各种关联、约束都来了,大系统的好处就在这里。没办法,技术出身的,前台没法删,只能从数据库后台想办法了。
从Google查了很多资料,但提供这种思路的几乎没有,而且基本上是英文的,都来自PTC社区,最后终于有点线索了。只要清楚了Oracle的表结构,删除资料自然不是难事。废话少说,直接上干货:
后台处理完后,开启httpd服务并登录Windchill,在右上角的“搜索”框旁点击小三角,选择“高级搜索“,关键字录入“*.*”,“类型”和“上下文”都选择“所有”,然后搜索,即可找到所有待删除的文件,全选再从“操作”里找到“删除”就能搞定了。
如果你在删除过程中遇到问题,欢迎留言与我讨论。
这说起来容易,做起来难啊,可苦了这帮IT兄弟了,谁叫咱是“挨踢人猿”呢……
Windchill系统里通过Creo上传的资料,一旦被其他产品引用,或进行了升级,想要删除是非常困难的,各种关联、约束都来了,大系统的好处就在这里。没办法,技术出身的,前台没法删,只能从数据库后台想办法了。
从Google查了很多资料,但提供这种思路的几乎没有,而且基本上是英文的,都来自PTC社区,最后终于有点线索了。只要清楚了Oracle的表结构,删除资料自然不是难事。废话少说,直接上干货:
清空所有以EPM开头的表,这些表存储了CAD文档及其关联关系;上述表都是在PDMLINK11这个Users下的。 清空表之前最好做个备份,当然也要停止Apache的httpd服务,避免用户还在操作系统。
清空WTPART表,这里存储了所有PART的信息;
清空BASELINEMEMBER表, 这里存储了所有BaseLine的信息。
后台处理完后,开启httpd服务并登录Windchill,在右上角的“搜索”框旁点击小三角,选择“高级搜索“,关键字录入“*.*”,“类型”和“上下文”都选择“所有”,然后搜索,即可找到所有待删除的文件,全选再从“操作”里找到“删除”就能搞定了。
如果你在删除过程中遇到问题,欢迎留言与我讨论。
2018/11/16
ORA-00257问题解决
今天登录Tiptop ERP测试环境时,出现错误“ ORA-00257: archiver error. Connect internal only, until freed”,通过以下方法手动释放归档空间后已OK,做个记录。
定期删除归档脚本:https://blog.csdn.net/liqfyiyi/article/details/7017238 或 http://www.zhoudl.com/linux/1006.htm
> rman target /
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; ---删除7天前的所有归档日志
关闭归档功能的方法:https://blog.csdn.net/JohnnySun2015/article/details/74196786RMAN> CROSSCHECK ARCHIVELOG ALL;RMAN> DELETE EXPIRED ARCHIVELOG ALL;原文:https://blog.csdn.net/wenshuangzhu/article/details/44059809
定期删除归档脚本:https://blog.csdn.net/liqfyiyi/article/details/7017238 或 http://www.zhoudl.com/linux/1006.htm
2018/10/30
Oracle事务中的DDL语句
最近一直都在跟Tiptop ERP战斗,User发现了一个严重的问题,采购订单自动发送邮件给厂商时,只有15个项次,但我们自己查询时居然是19项,用impdp把当天的数据翻出来看,也没发现问题。
只能去追查程序了,原来是因为sapmt540.4gl中有个函数t540_pmn25(),它的作用是检查请购单项次并将请购单项次的备注(pmo_file)写入采购单的备注(pmo_file),读写pmo_file采用了操作临时表x来完成。其处理方法本身没问题,但该函数又被函数t540_b()调用,而对于临时表x的DDL操作(此处是DROP TABLE)会使TRANSACTION失效,不再锁定pmm_file,从而导致User A还在编辑采购订单的单身,User B就已把该采购订单审核甚至发出了。
解决办法:读写pmo_file的部分,改为FOREACH请购单项次的pmo_file资料,重新对pmo01/pmo02/pmo03赋值后,再INSERT到采购单项次的pmo_file。
终极原因:Oracle的DDL不是事务性的,运行DDL语句将隐式地提交该会话的任何打开的事务。
只能去追查程序了,原来是因为sapmt540.4gl中有个函数t540_pmn25(),它的作用是检查请购单项次并将请购单项次的备注(pmo_file)写入采购单的备注(pmo_file),读写pmo_file采用了操作临时表x来完成。其处理方法本身没问题,但该函数又被函数t540_b()调用,而对于临时表x的DDL操作(此处是DROP TABLE)会使TRANSACTION失效,不再锁定pmm_file,从而导致User A还在编辑采购订单的单身,User B就已把该采购订单审核甚至发出了。
解决办法:读写pmo_file的部分,改为FOREACH请购单项次的pmo_file资料,重新对pmo01/pmo02/pmo03赋值后,再INSERT到采购单项次的pmo_file。
终极原因:Oracle的DDL不是事务性的,运行DDL语句将隐式地提交该会话的任何打开的事务。
2018/09/30
用impdp恢复expdp备份的某个表到另一Schema
有人把资料维护错了,后来偷偷改了,又不承认😠,逼得我去把备份的资料恢复出来,给她难堪……
因为是expdp备份的,对应的恢复就用impdp啦。
简单介绍下环境:Tiptop ERP的Oracle数据库,在Linux下运行,要从正式Schema(al1)的备份恢复到测试的Schema(ostest),只需恢复ima_file这个表。
直接上指令了:
因为是expdp备份的,对应的恢复就用impdp啦。
简单介绍下环境:Tiptop ERP的Oracle数据库,在Linux下运行,要从正式Schema(al1)的备份恢复到测试的Schema(ostest),只需恢复ima_file这个表。
直接上指令了:
impdp directory=EXPDP_DIR dumpfile=full_20180929.dmp logfile=imp_ostest_ima_20180930.log schemas=ostest include=table:\"in \'ima_file\'\"没成功,错误提示:
ORA-31655: no data or metadata objects selected for job原来是因为没有指明来源的Schema,调整指令为:
impdp directory="EXPDP_DIR" dumpfile=full_20180929.dmp logfile=imp_ostest_ima_20180930.log remap_schema=al1:ostest tables=al1.ima_file table_exists_action=replace这样就OK了,如果没有加table_exists_action=replace,而目标Schema中已存在这个表,则会出现错误:
ORA-39151: Table "OSTEST"."IMA_FILE" exists. All dependent metadata and data will be skipped due to table_exists_action of skip参考资料:OracleOnLinux
2018/09/14
定时查找并修改Linux中文件的权限
公司有好几位同事在进行Tiptop ERP的二次开发工作,为了权责清晰,每人使用各自的Linux帐号,但是有些同事不喜欢用VIM在Linux下编辑程序的源文件,需要用sz和rz在Linux和Windows之间传输文件。这样就出现一个问题,通过rz上传到Linux的文件默认权限是644,其他同事就没法修改了,网上找了很多Zmodem的资料,也没相关的解决办法,没解决这个问题之前,就先让系统定时把这些文件的权限改下吧,一行命令加入Crontab即可。
参考资料:yttitan
find */4gl/ -perm 644 -type f -exec chmod 775 {} \;上面的"*/4gl/"的意思是在当前目录的下一级目录下的4gl子目录,你可以改成适合自己的。
参考资料:yttitan
2018/09/12
Tiptop版本控制小脚本
为了方便在Tiptop ERP二次开发时做简单的版本控制,写了个脚本,用来将当前的文件改名为以当天日期为后缀文件,再将这个文件复制产生新版本的文件。
写脚本的功力实在是浅,各位请指教,勿喷。😊(权当做个笔记吧)
写脚本的功力实在是浅,各位请指教,勿喷。😊(权当做个笔记吧)
#!/bin/sh
newName=$1`date +%Y%m%d`
if [ ! $1 ]; then
echo " *** Failed, the arg is null. ***"
else
if [ ! -f $1 ]; then
echo " *** Failed, the file does not exist. ***"
else
if [ ! -f $newName ]; then
/bin/mv $1 $newName
/bin/cp $newName $1
/bin/ls -al $1*
else
if [ ! -f $newName-1 ]; then
/bin/mv $1 $newName-1
/bin/cp $newName-1 $1
/bin/ls -al $1*
else
echo " *** Failed, new file already exist. ***"
/bin/ls $1*
fi
fi
fi
fi
2018/09/04
Fixed a problem with EPSON dot matrix printer
Our factory have a EPSON dot matrix printer (Model Number is 630K), the user told me the printer printing "12345x @PJL ENTER LANGUAGE=ACL" about every five seconds.
It seems like installed wrong drivers, but when I tried to delete the printer from control panel, it was failed. And when I turned off the PC, the printer still printing by itself.
Finally, I fixed it by holding down the feed button then powering on the printer.
It seems like installed wrong drivers, but when I tried to delete the printer from control panel, it was failed. And when I turned off the PC, the printer still printing by itself.
Finally, I fixed it by holding down the feed button then powering on the printer.
企业局域网内搭建NTP服务器
企业内部各种系统的服务器之间要连接业务,必须保证时间的一致性,如果每台都从外部时间服务器同步时间,是不太现实的,其中一种情况就是某些服务器不允许连接Internet。
所以可以考虑在内部搭建一台NTP服务器,由它从外部同步时间,其他服务器在从这台内部服务器同步时间即可。
如果你的局域网内有Windows域控制器,就比较简单了。
首先,在PDC主机上执行命令:
然后依次执行下列命令,重启时间服务:
最后去你的其他应用服务器设定从这台域控同步时间,Windows服务器直接在控制面板找“日期和时间”里的“Internet时间”,将时间服务器设为你的域控IP或DNS Name;如果是Linux的系统,首先确定已安装ntpdate,再在crontab里增加一笔定时同步就好了。
参考资料:学领未来
所以可以考虑在内部搭建一台NTP服务器,由它从外部同步时间,其他服务器在从这台内部服务器同步时间即可。
如果你的局域网内有Windows域控制器,就比较简单了。
首先,在PDC主机上执行命令:
w32tm /config /manualpeerlist:ntp.neu.edu.cn /syncfromflags:manual /reliable:yes /update将PDC主机的时间源设置为某NTP服务器,此处为东北大学的时间服务器ntp.neu.edu.cn,你也可以更改为自己喜欢的。
然后依次执行下列命令,重启时间服务:
W32tm /config /update保险起见,可执行命令
Net stop w32time && Net start w32time
W32tm /resync
w32tm /query /status查看PDC服务器的时间源是你选择的那个。
最后去你的其他应用服务器设定从这台域控同步时间,Windows服务器直接在控制面板找“日期和时间”里的“Internet时间”,将时间服务器设为你的域控IP或DNS Name;如果是Linux的系统,首先确定已安装ntpdate,再在crontab里增加一笔定时同步就好了。
参考资料:学领未来
2018/08/27
在Chrome的Secure Shell中清除known_hosts
最近频繁在一个Raspberry Pi上插入不同的TF卡,运行不同的Raspbian,然后从办公用电脑的Chrome用Secure Shell连接Raspbian,导致其保存的known_hosts混乱,无法连接,错误如下:
回车后,虽然Console反馈undefined, 但其实已经成功了,关闭Console,再重新连接你的host即可。
处理方法是,在错误界面上同时按 CTRL +Shift +J,以进入JavaScript console,在窗口左下角点击“console“,录入以下命令并回车:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that a host key has just been changed.The fingerprint for the ECDSA key sent by the remote host isSHA256:po6Fye+CR7Xw7DUrF7jsk8EKYF21utA4733iaGa2yjs.Please contact your system administrator.Add correct host key in /.ssh/known_hosts to get rid of this message.Offending ECDSA key in /.ssh/known_hosts:17ECDSA host key for 192.168.3.166 has changed and you have requested strict checking.Host key verification failed.NaCl 插件已退出,状态代码为:255。重新连接(R)、选择其他连接(C)或退出(E)
term_.command.removeKnownHostByIndex(17);注意上面这个“17”是我的错误提示中的Index,请替换成你自己的。
回车后,虽然Console反馈undefined, 但其实已经成功了,关闭Console,再重新连接你的host即可。
2018/06/27
让Debian9自动启动到命令行界面
用Debian当服务器,没必要启动图形界面(GUI),避免浪费系统资源,所以想默认启动到命令行界面(CLI)。
此方法仅在Debian9.4上做了测试,想必Debian9的都OK。
步骤:
此方法仅在Debian9.4上做了测试,想必Debian9的都OK。
步骤:
- 以sudo或直接以root身份登录命令行;
- 执行systemctl get-default,得到当前的默认登录模式,若为graphical.target,则为图形界面;
- 执行systemctl list-units --type=target列出当前支持的启动模式;
- 若第3步中有multi-user.target,则表示支持启动到命令行界面,执行systemctl set-default multi-user.target,将其设定为默认启动到命令行界面;
- 可以再执行systemctl get-default,确认下,没问题的话,就执行reboot重启电脑吧。
应该已经OK了。
后续想默认启动到GUI界面,那就反向执行上述步骤。
参考资料:IT'zGeek
2018/06/26
TIPTOP不能登录的处理办法
状况:用户登录不了Tiptop,web端打开就报错DVM connection timed out,从terminal也开启不了程序,包括编译画面或4gl程序也失败。
处理办法:用root执行以下命令
参考资料:wangxia279624
处理办法:用root执行以下命令
cd /u1/flm
./envflm #设定环境变量
flmprg -s #关闭flm (flmprg实际位于$FLMDIR/bin)
flmprg -r #重启flm还不行,就把OS重启下吧。
参考资料:wangxia279624
2018/06/25
Tiptop ERP 开启和关闭MFG系统
年中/年终盘点时,管理人员希望把ERP系统关闭,虽然成本关账作业asmp620能设定关账日,设置后,关账日之前的库存则不可异动,但如果更绝对一点,任何时间点的账务都不允许异动,那就得关闭MFG系统了。作业代号为asms999,与它对应的是asms000(MFG 系统重新开启作业)。
asms999的作用是:与生产制造有关的库存管理、料件维护与BOM产品结构、生产管理系统、采购管理系统都仅只提供查询、列印,其它维护都不可作业。销售出货、财务会计等其它模块依然可正常使用。
参考文章:李艺辉的专栏
asms999的作用是:与生产制造有关的库存管理、料件维护与BOM产品结构、生产管理系统、采购管理系统都仅只提供查询、列印,其它维护都不可作业。销售出货、财务会计等其它模块依然可正常使用。
参考文章:李艺辉的专栏
2018/05/27
Tiptop服务器硬盘空间满
前段时间通过给Tiptop的AP服务器启用外部SMTP发邮件,配合Shell脚本,侦测到AP服务器的磁盘空间使用率达到80%时,会自动发邮件出来。
本次出现空间不足的是根目录,(注:u1:4gl程序及AP配置文件等存放位置;u2:若AP与DB在同一台Server,则用于存放Oracle相关文件;u3:备份文件所在磁盘),利用df和du命令配合,最终查出是apache2的日志文件access_log文件持续增长造成的,有两个办法可以解决该问题:
一、禁止apache2产生log文件,方法如下,但这不符合信息安全的要求,不推荐。
也是在apache2的配置文件httpd.conf中,修改access_log的配置行,用apache2自带的ratatelogs工具,让日志每天产生一个新文件。
自动清除超过期限(此处为90天)的日志文件,将下面的命令加入crontab:
本次出现空间不足的是根目录,(注:u1:4gl程序及AP配置文件等存放位置;u2:若AP与DB在同一台Server,则用于存放Oracle相关文件;u3:备份文件所在磁盘),利用df和du命令配合,最终查出是apache2的日志文件access_log文件持续增长造成的,有两个办法可以解决该问题:
一、禁止apache2产生log文件,方法如下,但这不符合信息安全的要求,不推荐。
找到apache2的配置文件httpd.conf,将access_log的配置行注释掉即可。二、让access_log定期产生独立的文件,在将超过期限的独立的日志文件清除。
也是在apache2的配置文件httpd.conf中,修改access_log的配置行,用apache2自带的ratatelogs工具,让日志每天产生一个新文件。
CustomLog "|bin/rotatelogs -l /var/log/logfile_%Y%m%d 86400" common注意上述路径需为绝对路径。
自动清除超过期限(此处为90天)的日志文件,将下面的命令加入crontab:
find /var/log/logfile_* -mtime +90 -exec rm -f {} \;参考资料: Apache官方文档
2018/05/17
Tiptop:用SQL脚本和Shell脚本自动发Excel报表给用户
给Tiptop服务器启用外部SMTP发邮件后,一些简单的报表必须要通过邮件发给User时,就不必麻烦去写CR报表了,可以用SQL脚本和Shell脚本配合完成,而且效果也不错。
简单的步骤如下:
一、写SQL脚本。SQL语句先加上如下内容,保证输出资料的可读性。
然后在SQL脚本文件中加入你的SQL语句,以及最后一行为
二、写Shell脚本。直接贴我的吧。
最后,如果文件大小不等于19bytes,那就直接把SQL输出的文件作为附件发出了。
我挺喜欢这种方式的,你呢?
参考资料:云和恩墨
简单的步骤如下:
一、写SQL脚本。SQL语句先加上如下内容,保证输出资料的可读性。
set linesize 200
set term off verify off feedback off pagesize 999
set markup html on entmap ON spool on preformat off
SPOOL filename.xls;以上前三行是为了规范Excel的格式,最后一行是指定输出文件的位置和文件名。请自行调整。
然后在SQL脚本文件中加入你的SQL语句,以及最后一行为
SPOOL OFF ;最后将其保存,例如文件后为myquery.sql。
二、写Shell脚本。直接贴我的吧。
!/bin/sh
export LANG=en_US.utf8
export ORACLE_BASE=/u2/oracle;
export ORACLE_HOME=/u2/oracle/product/11.2.0/dbhome_1;
export ORACLE_SID=topprod;
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8;
export PATH=$PATH:/usr/bin:sbin:/usr/sbin:/usr/contrib/bin:$ORACLE_HOME/bin
cd /yourpath
sqlplus username/password @./myquery.sql〈〈EOF
quit
EOF
filename=filename.xls
filesize=`ls -l $filename | awk '{ print $5 }'`
normail_size=$((19))
if [ $filesize -ne $normail_size ]
then
echo "" | mailx -a $filename -s "Email Subject" username@mydomain.com
fi其中第二到七行为环境变量声明,以避免权限问题和字符集混乱等。第九行中EOF前的尖括号请替换为半角,此处是调用SQL脚本以得到查询结果。第12行的文件名需与SQL脚本中声明的一致。后面几行是用ls和awk得到文件大小,如果是19个字节,就跳过了,因为"no rows selected"加上其前后的换行符等,就刚好19bytes,这个方法其实不算高明,但够用了。😀
最后,如果文件大小不等于19bytes,那就直接把SQL输出的文件作为附件发出了。
我挺喜欢这种方式的,你呢?
参考资料:云和恩墨
CR报表错误:certid驗證失敗 無法開啟報表
今天在Toptest应User需求调整CR报表对应程序后,做测试,程序调用IE浏览器显示报表时,出现错误提示:
去Net Manager或直接修改tnsnames.ora文件即可搞定。
certid驗證失敗 無法開啟報表原来是因为最近把Oracle数据库迁移到了另一台Server,只在AP端改了数据库连接设定,CR服务器的却忘记了。
去Net Manager或直接修改tnsnames.ora文件即可搞定。
2018/05/09
Oracle 默认用户密码的由来
接触过Oracle数据库的朋友可能多少会好奇,为什么Oracle的初始用户和密码是scott和tiger,其由来为何?
Oracle大牛Tony Jambu曾权威解释说:
参考信息: Burleson Consulting
Oracle大牛Tony Jambu曾权威解释说:
Scott是Oracle的前身Software Development Laboratories的第4位职员,他是Oracle V1到V3的联合设计师和联合架构师,其全名为Scott Bruce。而tiger是他的宠物猫的名字。
参考信息: Burleson Consulting
2018/04/17
Tiptop ERP AP主机通过外部SMTP发邮件
Redhat Linux本身内置了sendmail和postfix等邮件服务器工具,但配置相当麻烦,而且还会增加服务器性能的开销,所以如果只是想通过脚本监控OS和Database的运行状况,不如直接使用已有的SMTP服务器来发邮件。
首先,把本机的sendmail或postfix服务永久关闭。
完成后,还需要对mailx命令进行升级(至12.4 7/29/08,查询命令mailx -V),因为RHEL5本身的mailx版本较低(为8.1.1-44.2.2,查询命令rpm -qa|grep mailx),发送邮件会失败。
因为没有购买RHEL的服务,所以手动去http://www.filewatcher.com/m/mailx-12.4.tar.bz2.271482.0.0.html下载安装包,然后安装
好了,接着开始配置连接外部SMTP服务器的信息,用vim或其他文本编辑工具打开/etc/nail.rc,添加以下内容:
参考资料:Linux公社 狗窝
首先,把本机的sendmail或postfix服务永久关闭。
#service sendmail stop
#chkconfig sendmail off
#service postfix stop
#chkconfig postfix off以上命令需以root身份执行。
完成后,还需要对mailx命令进行升级(至12.4 7/29/08,查询命令mailx -V),因为RHEL5本身的mailx版本较低(为8.1.1-44.2.2,查询命令rpm -qa|grep mailx),发送邮件会失败。
因为没有购买RHEL的服务,所以手动去http://www.filewatcher.com/m/mailx-12.4.tar.bz2.271482.0.0.html下载安装包,然后安装
#tar jxvf mailx-12.4.tar.bz2
#cd mailx-12.4
#make
#make install UCBINSTALL=/usr/bin/install安装完成后,查看mailx的版本(命令whereis mailx),仍是旧的,是因其软链接需手动建立。
#cd /bin
#rm -rf mailx
#ln -s /usr/local/bin/mailx mailx再查询mailx的版本,发现已经是12.4 7/29/08了。
好了,接着开始配置连接外部SMTP服务器的信息,用vim或其他文本编辑工具打开/etc/nail.rc,添加以下内容:
set from=tiptop@maxwa.xyz
set smtp=smtp.maxwa.xyz
set smtp-auth-user=tiptop
set smtp-auth-password=yourpassword
set smtp-auth=login保存退出后,就可以测试一下了。
echo "hello world" | mailx -v -s "Test only" max@maxwa.xyz
参考资料:Linux公社 狗窝
2018/04/16
[转]Tiptop成本计算函数结构表
一 p500_ask() –询问画面
二 p500_del()—删除成本相关资料cch_file,ccg_file,,ccu_file,
cct_file,ccc_file,cce_file
三 p500()----成本计算主函数
3.1. p500_get_date()---获取成本计算日期
3.2. p500_last0()---取上期结存转本月期初
3.2.1 p500_ckp_ccc()---若ccc为空,则指定其为0
3.3. p500_ccc_0()---清空ccc_file,给一个零
3.4. p500_last()---取上期结存转本月期初
3.5. p500_wip()---处理 WIP 在制成
3.6. p500_wip2()----处理重复性生产WIP(计算产品在制成本(料,工,费)投入,)
3.7. p500_tlf()---由 tlf_file 计算各类入出库数量, 采购成本
p500_upd_cxa09(l_apb12,l_apb09,1)
p500_ccc22_cost()
p500_ccc44_cost()
3.8. p500_ccb_cost()---计算入库调整金额
3.9. p500_ccg_cost()---计算wip入库调整金额
3.a. p500_ccg3_cost()---计算wip入库调整金额(重复性生产)
3.b. p500_ccc_tot(p_sw)--- 计算所有出库成本及结存
p500_ccc_ccc26()
p500_ccc_ccc23()
3.b.1
p500_tlf21_upd()----回写tlf21的成本--update
p500_get_tlf21(p_tlf01,p_tlf10,p_chr,p_flag)
3.c. p500_ccc_ins()----insert ccc档
3.d. p500_can_upd()---加上销货收入调整金额
3.e. p500_rework()----计算重工工单
3.e.1 p500_rework1() ---先算 WIP 及 完成品入库
3.e.1.1
p500_wip_rework() --处理 WIP 重工成本
(重工sfb99='Y')
wip_1() # 计算每张工单的 WIP-主件 部份 成本 (ccg)
wip_2()
# 计算每张工单的 WIP-元件 投入 成本 (cch)
wip_3()
# 计算每张工单的 WIP-元件 转出 成本 (cch)
wip_4()
# 计算每张工单的 WIP-主件 SUM
成本 (ccg)
3.e.2 p500_rework2() ---再算所有出库成本及结存
3.e.2.1 p500_ccg2_cost() --加上WIP重工入库金额
3.e.2.2
p500_ccc_tot('2') --计算所有出库成本及结存
3.e.2.3 p500_ccc_upd() --Update ccc_file
3.e.3
p500_wipx0() ---记录WIP-拆件式工单
在制成本 (工单性质=11) --因为要取重工后单价
3.e.3.1 p500_wipx()---处理 WIP 在制成本 (工单性质=11拆件工单)
3.f . p500_reshare()--对于 联产品入库分摊 部份, 进行第二次处理
3.f.1 p500_ccg4_cost() -- 计算联产品入库分摊
3.f.2 p500_ccc_tot('3') --计算所有出库成本及结存
3.f.3
p500_ccc_upd() -- Update
ccc_file
3.g . p500_reshare2()---对于 拆件式入库分摊 部份, 进行处理
3.g.1 p500_ccg5_cost() --计算拆件式入库分摊
3.g.2 p500_ccc_tot('3') -- 计算所有出库成本及结存
3.g.3
p500_ckp_ccc() --CHECK ccc_file做NOT
NULL栏位的判断
3.g.4
p500_ccc_upd() -- Update
ccc_file
3.h . p500_cct2ccg()--将cct_file,ccu_file写入ccg_file,cch_file
四 p500_out()----显示成本计算错误讯息(ccy_file)
4.1 p500_rep()---显示成本计算错误讯息(ccy_file)
作者:罗向锋
2018/04/10
初探Oracle的审计功能
早上有Tiptop的User反馈,凭证抛转还原时,提示表被锁,于是打开p_zta准备解锁,但输了几次Oracle的system和sys密码,都提示不正确。还以为是上月发生信息安全事件后,新改的管理员密码被我记错了,再跟Keepass核对,发现密码没问题。
于是用相同的密码从sqlplus尝试,提示:“ORA-28000: the account is locked”,居然是system帐户被锁定了。查资料发现:
上图中,audit trial的值为DB,说明审计功能已开启,audit_file_dest的value是审计文件存储的位置。遂以OS的oracle用户身份查看审计文件,可令人失望的是,这里只记录了sys用户登录的审计结果,但我的问题是system用户因连续10次输入密码错误被锁定了。值得提一下的是,在这个审计文件中,STATUS的值为0表示正常登录,1017为登录失败。
又查了资料,原来普通的帐户登录,没有相应的os审计文件,但是被添加到了表SYS.AUD$,这下终于揪出原因了(是某个没有数据库管理员权限的同事在反复试system的密码)。我用的相关SQL语句如下:
于是用相同的密码从sqlplus尝试,提示:“ORA-28000: the account is locked”,居然是system帐户被锁定了。查资料发现:
可能是由于错误的密码输入次数超出了profile中failed_login_attempts 次数的限制而被锁定。通过如下SQL语句可以查看用户状态和被锁定时间:
SELECT username,account_status,lock_date FROM dba_users;那就先解锁再说吧,语句如下:
alter user system account unlock;处理完User的问题继续来追查system帐号被锁的原因。首先以sys的身份看Oracle是否已开启审计功能,过程及结果如下:
上图中,audit trial的值为DB,说明审计功能已开启,audit_file_dest的value是审计文件存储的位置。遂以OS的oracle用户身份查看审计文件,可令人失望的是,这里只记录了sys用户登录的审计结果,但我的问题是system用户因连续10次输入密码错误被锁定了。值得提一下的是,在这个审计文件中,STATUS的值为0表示正常登录,1017为登录失败。
又查了资料,原来普通的帐户登录,没有相应的os审计文件,但是被添加到了表SYS.AUD$,这下终于揪出原因了(是某个没有数据库管理员权限的同事在反复试system的密码)。我用的相关SQL语句如下:
SELECT userid, userhost, terminal, clientid,ntimestamp#,comment$text参考资料: 乐沙弥的世界
FROM aud$
WHERE returncode=1017 AND userid='SYSTEM'
ORDER BY 5;
2018/03/09
记Tiptop ERP服务器被植入恶意程序
昨天早上,有User反映Tiptop ERP程序运行缓慢,接连又有反馈说无法登录。具体提示为:
与此同时,我自己也在摸索找到恶意程序。先用kill把进程杀掉,再用find -name去找xxm这个文件的位置(后来才知道在top界面按c就能看到),然后把它删除,没一会儿CPU负载又升起来了,xxm又来了,立即去看ctontab,果然是每30分钟从某个位置复制产生该文件,并运行。如此总算可以完全清除了。快4小时的时候,SE也告之说完全处理OK了,时间拿捏的真好。
而ERP不能登录,是因为负责分发License的程序flm运行不起来,在此期间TOPTEST也不能登录,是因为使用同一个License服务程序。其实上面的恶意进程清除后,重启服务器或运行flmprg –r就好了。后悔花了4小时的工时费。
后来,又参考了网上诸多资料,加上个人的一点经验,终于把幕后黑手的行踪找出来了,大年初一那天,幕后黑手通过VPN登入公司ERP主机,用的是root帐号,同时还用mstsc登入了CR服务器,这里留下了他的电脑名称,只可惜负责网络的同事没能找到VPN登录的日志,一条重要线索丢失。
结论:熟人作案,而且手段并不高明,留下很多痕迹。
教训:
GDC端:DVM connection timed out.
Web端:Application DUA not found第一反映是去Terminal执行top命令,看系统的健康状况。数据把我吓一跳,用户空间占用CPU已达75%多,而其中有一个以root身份运行的名为xxm进程,CPU时间占用百分比为1199.3。这个进程也没见过啊,第一时间联系客服人员,被告知要请系统工程师(SE)确认,几乎马上被告知,被植入了恶意程序,如果要处理,需要另付4小时的工时费。没办法,那就赶紧吧,系统不能停摆啊……
与此同时,我自己也在摸索找到恶意程序。先用kill把进程杀掉,再用find -name去找xxm这个文件的位置(后来才知道在top界面按c就能看到),然后把它删除,没一会儿CPU负载又升起来了,xxm又来了,立即去看ctontab,果然是每30分钟从某个位置复制产生该文件,并运行。如此总算可以完全清除了。快4小时的时候,SE也告之说完全处理OK了,时间拿捏的真好。
而ERP不能登录,是因为负责分发License的程序flm运行不起来,在此期间TOPTEST也不能登录,是因为使用同一个License服务程序。其实上面的恶意进程清除后,重启服务器或运行flmprg –r就好了。后悔花了4小时的工时费。
后来,又参考了网上诸多资料,加上个人的一点经验,终于把幕后黑手的行踪找出来了,大年初一那天,幕后黑手通过VPN登入公司ERP主机,用的是root帐号,同时还用mstsc登入了CR服务器,这里留下了他的电脑名称,只可惜负责网络的同事没能找到VPN登录的日志,一条重要线索丢失。
结论:熟人作案,而且手段并不高明,留下很多痕迹。
教训:
- VPN不能常开,而且要保留足够长时间的日志;
- OS和Oracle的密码都不能直接告诉服务厂商,远程协助要有人值守。
订阅:
博文 (Atom)