【原创】UNIX上文件记录锁的测试
在UNIX上一般的文件操作不含有记录锁,如果多个进程同时修改某个文件,往往是最后保存的进程替换掉先前保存的线程。但是这类I/O操作根本不适应数据库管理系统的多进程同时写操作,数据库操作要求多个进程能够利用记录锁的机制对文件的某一部分进行锁定。系统调用fcntl 就提供了这种方法,以下是实验结果:[@more@]源代码:#include <stdio.h>#include <fcntl.h>#include <sys/wait.h>#include <errno.h>int main(){ struct flock lock; int fd,pid; lock.l_type=F_WRLCK; lock.l_start=0; lock.l_
【原创】sigaction() 解决了在某些平台上需要再度安装信号的问题
一旦对给定的信号采取sigaction() 设置了捕捉动作,那么在再次调用sigaction() 显式改变它之前处理方式一直有效。这种处理方式和signal() 在某些平台上的不可靠机制不同,符合了posix.1 标准。测验如下:[@more@]改用sigaction 后发现即使是在AIX上也解决了signal函数可能存在需要再次安装信号的不可靠问题源代码:#include <stdio.h>#include <signal.h>#include <stdlib.h>int main(){ void my_alarm(int); struct sigaction act,oact; act.sa_handler=my_alarm; sigemptyset(&act.sa_mask); si
【原创】setjmp 和 longjmp 用于信号处理的研究
对于那些在执行完信号处理函数之后自动重启系统调用的应用平台例如FreeBSD 6.2 等来说可以用 setjmp 和 longjmp 这一对函数来实现程序的中止。例如:[@more@]#include <stdio.h>#include <signal.h>#include <unistd.h>#include <setjmp.h>static void sig_alrm(int);static jmp_buf env_alrm;int main(){ int n=-10; char line[1024]; if(signal(SIGALRM,sig_alrm)==SIG_ERR) { printf("nError in signal!n"); fflush(stdout); return 1; } if(setjmp(
【原创】编写守护进程程序中对信号进行安装在不同平台上的差异
现代的AIX或者Linux系统上的守护进程中如果在主函数中定义了信号安装之后,是否仍存在以往那种一旦信号执行程序被触及那么信号必须马上再次被安装否则进程对于该信号的处理方式将被进程设置为默认处理的问题呢?[@more@]也就是说:main(){ ... signal(SIG****, handle ); ...}handle (){ signal(SIG****, handle ); ----------- 这一行是否还有必要再写?? ....}我们先在FreeBSD上做实验:#include <stdio.h>#include <signal.h>#include <string.h>#include <pwd.h>#include <s
【原创】标准I/O库函数的缓冲机制引发的问题
标准I/O库函数在应用层提供了缓冲机制,这点不同于系统调用函数。一般对于交互界面是行缓冲,对于文件是全缓冲。这两种缓冲机制的差别可以通过一个小例子进行观察。[@more@]源代码:#include <stdio.h>#include <unistd.h>int main(){ int i=10,pid; printf("nBefor fork.n"); fflush(stdout); if((pid=fork())<0) { printf("nError fork!"); return 1; } else if(pid==0) i++; else sleep(2); printf("ni=%dn",i); return 0;
【原创】设置进程环境变量函数 putenv() 和 setenv() 的区别
putenv() 函数并不copy环境变量数值到进程环境表,只是存放环境变量数值的指针,而setenv()函数则完全copy环境变量数值到进程环境表。实验如下:[@more@]第一:在main函数中调用putenv(),设置进程环境变量源代码:#include <stdio.h>#include <stdlib.h>extern char **environ;void setfun(void);int main(){ int i=0; char tt[]="ORACLE_SID=test"; while(environ[i]!=NULL) { printf("n%s",environ[i]); i++; } printf("nn"); if(putenv(tt)!=0) {
【原创】Oracle 新建的临时文件大小分析
SQL> alter tablespace temp add tempfile '/oradata/test/temp03.dbf' size 100M autoextend off;Tablespace altered.[@more@]SQL> exitDisconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options[oracle@testsvr test]$ ls -ltotal 1898376-rw-r--r-- 1 oracle oinstall 89 Oct 19 14:56 afiedt.bufdrwxr-xr-x 2 oracle oinstall 4096 Aug 28 16:05 bak-rw-r----- 1 oracle oinstall 10076160 Oct
【原创】O_SYNC 同步标志导致的I/O速度的巨大差异
myscp 程序 中open系统调用指定了 O_SYNC 标志位 [@more@]open(argv[2],O_WRONLY|O_CREAT|O_TRUNC|O_SYNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) 用myscp 拷贝600M左右的程序所花的时间:[root@fsever FreeBSD]# du -m ./*25 ./6.2-RELEASE-i386-bootonly.iso574 ./6.2-RELEASE-i386-disc1.iso640 ./6.2-RELEASE-i386-disc2.iso189 ./6.2-RELEASE-i386-docs.iso[root@fsever FreeBSD]# time myscp ./6.2-RELEASE-i386-disc1.iso ./test.isoreal 13m21.320suser 0m0.184ssys 0m5.936s[root@fsever FreeBSD]# mycp 程序中open 系统调用没有指定O
【原创】DB2 (包含基于裸设备的tablespace)全库恢复过程
以Linux 上 V9 版本DB2 实验为基础,制定生产系统数据库备份策略以及恢复步骤前提:第一:修改生产库 NEWLOGPATH 参数指向单独保存在线日志的文件系统,设为 /log_online1第二:修改生产库 MIRRORLOGPATH 参数,镜像在线日志文件,设为 /log_online2第三:修改生产库 LOGARCHMETH1 参数,指向专门保存归档日志的文件系统(不再修改老的 LOGRETAIN 参数),设为 /log_arch第四:生产库每天做 online 模式的全备,保存在 /bak 下第五:以上备份保留10天,超过10天自动删除,每天将这些备份backup到磁带进行保存,每周循环故障:假设裸设备出
【好文转载】What Is Prefetching?
When an agent acting on behalf of an application needs to access table or index pages, it will first look for the pages in the database buffer pool area. If the page cannot be found in the buffer pool area, it will be read from disk into the buffer pool. I/O is very expensive, and in this case, the agent cannot do anything but wait for the read request to finish before it can access the page. These page reads are typically done one page at a time, and if the application also needs to access subs
【好文转载】Disk Layout
The design and physical layout of the table spaces within a database will have a very big impact on the overall performance of the database and its applications. The type, design, and physical location of the table spaces will ultimately determine the efficiency of the I/O performed against that table space. [@more@]Data Placement ConsiderationsIt is important to understand the following before beginning the physical design of a database.Workload considerationsThe type of workload that will be e
【好文转载】Raw Logical Volumes VS. File Systems
Within the database community, there has been a long running debate surrounding the use of raw logical volumes (raw devices) versus file systems. Advocates of raw logical volumes stress the performance gains that can be realized through their use, whereas file system supporters emphasize the ease of use and manageability features of file systems. As with the other aspects of system design, a decision must be made as to which is more important: performance or manageability.[@more@]To understand t
【经典著作】第四章 论货币的起源及其效用
分工一经完全确立,一个人自己劳动的生产物,便只能满足自己欲望的极小部分。他的大部分欲望,须用自己消费不了的剩余劳动生产物,交换自己所需要的别人劳动生产物的剩余部分来满足。于是,一切人都要依赖交换而生活,或者说,在一定程度上,一切人都成为商人,而社会本身,严格地说,也成为商业社会。[@more@] 但在刚开始分工的时候,这种交换力的作用,往往极不灵敏。假设甲持有某种商品,自己消费不了,而乙所持有的这种物品,却不够自己消费。这时,甲当然乐于出卖,乙当然乐于购买甲手中剩余物品的一部分,但若乙手中,并未持
【经典著作】第三章 论分工受市场范围的限制
分工起因于交换能力,分工的程度,因此总要受交换能力大小的限制,换言之,要受市场广狭的限制。市场要是过小,那就不能鼓励人们终生专务一业。因为在这种状态下,他们不能用自己消费不了的自己劳动生产物的剩余部分,随意换得自己需要的别人劳动生产物的剩余部分。[@more@] 有些业务,那怕是最普通的业务,也只能在大都市经营。例如搬运工人,就只能在大都市生活。小村落固不待言;即普通墟市,亦嫌过小,不能给他以不断的工作。散布在荒凉的苏格兰高地一带的人迹稀少的小乡村的农夫,不论是谁,也不能不为自己的家属兼充屠户、烙
【经典著作】第二章 论分工的原由
引出上述许多利益的分工,原不是人类智慧的结果,尽管人类智慧预见到分工会产生普遍富裕并想利用它来实现普遍富裕。它是不以这广大效用为目标的一种人类倾向所缓慢而逐渐造成的结果,这种倾向就是互通有无,物物交换,互相交易。[@more@] 述种倾向,是不是一种不能进一步分析的本然的性能,或者更确切地说是不是理性和言语能力的必然结果,这不属于我们现在研究的范围。这种倾向,为人类所共有,亦为人类所特有,在其他各种动物中是找不到的。其他各种动物,似乎都不知道这种或其他任何一种协约。两只猎犬同逐一兔,有时也象是一种
【世界历史】荷兰:17世纪的世界商业霸主
17世纪初期,人口不足200万的荷兰拥有全欧商船吨位的4/5,是英国的4~5倍,法国的7倍。东印度公司采用股份制向全社会募集资金,在全部的650万荷兰盾的股金中,有的股东只有几十个荷兰盾,显然是一般平民的股金。1609年建立阿姆斯特丹银行,它广泛地收集社会闲散资金。股份制和金融业的发展把广大居民的利益和海外贸易直接结合起来,荷兰全国从上到下各阶层都卷入海上贸易的大潮中。荷兰那样小小的国家成了“海上马车夫”,这是荷兰称霸海上的一个十分重要因素。 [@more@]荷兰独立以后,资本主义得到极迅速的发展,当时荷兰工场手工业的发展
【原创】10g参数文件中的instance_name参数设置问题
instance_name 参数用在向listener注册时候service联系到哪个instance,完全可以随意更改:[@more@]Last login: Wed May 2 17:26:32 2007 from 10.1.5.243[[oracle@tserver ~]$ lsnrctlLSNRCTL for Linux: Version 10.2.0.1.0 - Production on 04-MAY-2007 18:07:19Copyright (c) 1991, 2005, Oracle. All rights reserved.Welcome to LSNRCTL, type "help" for information.LSNRCTL> statusConnecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))STATUS of the LISTENER------------------------Alias LISTENERVersion
【好文转载】/etc/fstab释疑
1、fstab文件的作用 文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过"mount /directoryname"命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、mount、umount的等命令都利用该程序。 [@more@]2. fstab文件格式 下面是/etc/fatab文件的一个示例行: fs_spec fs_file fs_type fs_options fs_dump fs_pass /dev/hda1 / ext2 defaults 1 1 fs_spec - 该字段定义
【原创】 DBCA_RAW_CONFIG 参数和裸设备
DBCA_RAW_CONFIG 参数用来在建库的时候指定映射关系如果建库的时候是文件系统,只是后来新建的表空间采用裸设备根本不必设置此参数。例如:[@more@][root@tserver ~]# fdisk -lDisk /dev/sda: 80.0 GB, 80032038912 bytes255 heads, 63 sectors/track, 9730 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System/dev/sda1 * 1 13 104391 83 Linux/dev/sda2 14 144 1052257+ 82 Linux swap/dev/sda3 145 275 1052257+ 83 Linux/dev/sda4 276 9730 75947287+ 5 Extended/dev/sda5 276 9730 75
【好文转载】9i和10g中的 Resumable Space 新特性
从9i开始,Oracle提供了一种避免因为space Error而导致事务异常的操作,那就是resumable.通常,DBA在日常工作中,往往忽略了对空间资源上的需求,比如一个大的事务所需要的temp,undo,data space等等。直到出现了经典的ORA-01652才恍然大悟。下面回顾一下这个特性。[@more@]一、回顾9i中的功能(复习一下好了)1)权限设置 首先一个用户要设置resumable session,必须具有resumable的权限。 SQL> select * from system_privilege_map where name='RESUMABLE'; PRIVILEGE NAME PROPERTY