今天学习到了oracle的临时文件。原来在linux上使用的临时文件是稀疏的文件。即创建一个2G的文件。并不会立即占用2G的空间。而是随需要而分配。最多分配2G。在tom的深入数据库体系结构中其提到一个2G的临时文件占用了128K的数据,但是经过我的实验。验证:在Linux Redhat 5+ oracle 10g 64bit的平台上。一个2G的临时文件刚创建时占用的空间为84K
临时文件大小 初始创建占用空间大小
1G 76K
500M 76K
100M 80K
所以在linux上使用临时文件会有一个风险。即原计划给临时文件分配2G的空间。但是由于并没有立即分配。所以可能被其他占用而导致临时空间不足。所以要保证临时表空间不被占用。需要在初始分配时。即强制指定实际分配空间大小
在linux上使用语句:
cp --sparse=never ./temp_huge ./temp_huge2
这样既可以保证temp_huge2实际就占用了2G的空间
临时文件占用空间大小验证
首先使用df命令查看磁盘大小
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/cciss/c0d0p3 50786140 7093728 41071012 15% /u1
创建文件
temporary tablespace temp_huge3
2 tempfile '/u1/app/oracle/oradata/sales/temp_huge5' size 100M;
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/cciss/c0d0p3 50786140 7093808 41070932 15% /u1
查看文件显示为100M
[oracle@FIHSER71 sales]$ ls -al
-rw-r----- 1 oracle oinstall 104865792 May 6 15:24 temp_huge5
如果用cp --sparse=never ./temp_huge5 ./temp_huge6 创建文件temp_huge6,则使用df以及ls命令查看会发现文件大小为100M,且硬盘空间显示也被占用了100M