三、关于连续空间 可以用下面的语句来查看Oracle数据库中的自由空间:
' W+ @* b& e8 `# ^( J) L3 F 1.SQL > select * from dba_free_space
1 e1 S# J; x: F1 y1 k9 g* u6 ~9 W 2.where tablespace_name='SFSJTS'# q1 G" ]! c- W' @" B' w a
3.2 order by block_id;
) p6 ~2 w+ J! @$ j6 U2 i 4.TABLESPACE FILE_ID BLOCK_ID BYTESBLOCKS
~5 t& I* N: {4 _) c/ r 5._NAME
# p7 A% G- W3 _7 W" y! f a, {+ N. J 6.SFSJTS 6 133455 1064960 1300 [) T& S+ s% \
7.SFSJTS 6 133719 1032192 1263 K0 O0 h2 b* {: }
8.SFSJTS 6 133845 1064960 1305 d* W( j/ @* b8 I
9.SFSJTS 6 135275 1064960 130, z. ^5 I/ C; n; S
10.SFSJTS 6 135721 606208 74
% H; Z7 W- g2 @* z( j 11.SFSJTS 6 139877 901120 110 I! c D4 G! F6 ^
12.SFSJTS 6 143497 737280 90外语学习网! D$ w. O5 p. L$ g7 O
13.SFSJTS 6 220248 737280 90. [- l* M' T n* [. u! g# E: i# ]
14.SFSJTS 6 246228 491520 609 S6 O9 C$ e7 V( [9 r0 `) k
15.SFSJTS 6 261804 1064960 130
/ D7 [( V7 F+ I% ?$ N% ~" ?, G 16.10 rows selected.
& \3 C: U' V# Q! y8 Z6 x4 S/ w3 C$ `, `+ n 我们可以通过命令的结果来估计相邻自由空间的真正数量。对每一行,用起始快的id(BLOCK_ID)加上自由块(BLOCKS)的数量,如果其和与下一行的块id(BLOCK_ID)相等,则此两行是连续的。如上例第二行和第三行,133719+126=133845,而1338456+130!=135275,所以从block_id为133719开始,有126+130=256个block的连续空间。+ N# t% w/ G8 L! y
在Oracle数据库的后台,系统监视器(SMON)周期性地合并自由空间相邻的块,以得到更大的连续块。而DBA可以用SQL命令来完成这个工作:
2 w5 ` h: Z7 Q; k. l Y; v 1.alter tablespace tablespace_name coalesce;
# X! H3 ?0 f. h" ?: Q Oracle空间管理对数据库的工作性能有重要影响,其管理方法值得我们认真摸索研究。 |