|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。数据
Author:Kamus
Mail:kamus@itpub.net
Date:2004-4
经由过程movetablespace来完成resizedatafile。
HWM的观点就不在此论述了。
测试情况为Oracle10gforLinux,别的版本的一样。
我们先创立两个表空间,分离为t_tbs和t_tbs1,分离有一个数据文件,巨细都是5M
再创立一个test_user用户,给这个用户上述两个表空间的无穷限额,而且设置默许表空间是t_tbs。
[zhangleyi@aszhangleyi]$sqlplus/assysdba
SQL*Plus:Release10.1.0.2.0-ProductiononTueApr1321:01:252004
Copyright(c)1982,2004,Oracle.Allrightsreserved.
Connectedto:
OracleDatabase10gEnterpriseEditionRelease10.1.0.2.0-Production
WiththePartitioning,OLAPandDataMiningoptions
SYSatorcl10>alterusertest_userdefaulttablespacet_tbs;
Useraltered.
SYSatorcl10>alterusertest_userquotaunlimitedont_tbs;
Useraltered.
SYSatorcl10>alterusertest_userquotaunlimitedont_tbs1;
Useraltered
用test_user登录,创立表
TEST_USERatorcl10>createtablet_objasselect*fromdba_objectswhererownum<10000;
Tablecreated.
TEST_USERatorcl10>insertintot_objselect*fromt_obj;
9999rowscreated.
TEST_USERatorcl10>/
19998rowscreated.
TEST_USERatorcl10>/
insertintot_objselect*fromt_obj
*
ERRORatline1:
ORA-01653:unabletoextendtableTEST_USER.T_OBJby128intablespaceT_TBS
TEST_USERatorcl10>commit;
Commitcomplete.
TEST_USERatorcl10>selectsum(blocks)"TotalBlocks",sum(bytes)"TotalSize"fromdba_extentswhereowner=TEST_USERandsegment_name=T_OBJ;
TotalBlocksTotalSize
----------------------
5124194304
好,下面我们创立了一个表,而且拔出了良多数据,经由过程dba_extents视图我们能够看到统共用的block数和统共的巨细。
上面我们用delete删除全体数据,而且拔出新的9999条数据
TEST_USERatorcl10>deletefromt_obj;
39996rowsdeleted.
TEST_USERatorcl10>insertintot_objselect*fromdba_objectswhererownum<10000;
9999rowscreated.
TEST_USERatorcl10>commit;
Commitcomplete.
TEST_USERatorcl10>selectsum(blocks)"TotalBlocks",sum(bytes)"TotalSize"fromdba_extents
2whereowner=TEST_USERandsegment_name=T_OBJ;
TotalBlocksTotalSize
----------------------
5124194304
再次检察dba_extents视图,发明占用的空间并没有削减。
我们实验resize这个数据文件,file#为6的是t_tbs表空间上面的数据文件
SYSatorcl10>alterdatabasedatafile6resize4M;
alterdatabasedatafile6resize4M
*
ERRORatline1:
ORA-03297:filecontainsuseddatabeyondrequestedRESIZEvalue
SYSatorcl10>alterdatabasedatafile6resize4500000;
Databasealtered.
我们发明想resize到4M不成以,可是resize到4500000就能够了,由于下面检察出来的TotalSize是4194304,这个值年夜于4M而小于4500000。
然后我们move这张表到t_tbs1表空间,这个表空间上面的数据文件file#是8
EST_USERatorcl10>altertablet_objmovetablespacet_tbs1;
Tablealtered.
TEST_USERatorcl10>selectsum(blocks)"TotalBlocks",sum(bytes)"TotalSize"fromdba_extents
2whereowner=TEST_USERandsegment_name=T_OBJ;
TotalBlocksTotalSize
----------------------
1281048576
我们反省dba_extents视图,发明TotalSize已变更了,此时已能够申明move表是会从头举行block的收拾的,同时也重置了HWM。
上面我们resize这个数据文件。
SYSatorcl10>alterdatabasedatafile8resize3M;
Databasealtered.
SYSatorcl10>host
[zhangleyi@asORCL10]$cd/oracle/oradata/ORCL10/datafile/
[zhangleyi@asdatafile]$ls-l
总用量1419076
-rw-r-----1zhangleyidba209797124月1321:17cattbs01.dbf
-rw-r-----1zhangleyidba1572945924月1321:17o1_mf_example_02p0gpoj_.dbf
-rw-r-----1zhangleyidba4194385924月1321:20o1_mf_sysaux_02p09kny_.dbf
-rw-r-----1zhangleyidba5557534724月1321:17o1_mf_system_02p09kno_.dbf
-rw-r-----1zhangleyidba209797124月1321:02o1_mf_temp_02p0fzsd_.tmp
-rw-r-----1zhangleyidba629227524月1321:20o1_mf_undotbs1_02p09kog_.dbf
-rw-r-----1zhangleyidba2097233924月1321:17o1_mf_users_02p09kqv_.dbf
-rw-r-----1zhangleyidba31539204月1321:21TEST01.DBF
-rw-r-----1zhangleyidba45137924月1321:20test.dbf
能够看到我们的目标已到达了。
在实在使用中,我们能够将一个表空间中的一切object,全体move到一个新的表空间中,然后drop失落本来的表空间,再从磁盘上删除本来表空间中的数据文件。
至于怎样得知HWM,我们能够经由过程analyze以后的数据字典失掉,那末假如不举行analyze的话,我们也能够运转上面这个剧本。
这个剧本能够用于反省一个object占据的统共block数和处于HWM之上的block数,这固然也就晓得了HWM是在甚么地位。
DECLARE
v_total_blocksNUMBER;
v_total_bytesNUMBER;
v_unused_blocksNUMBER;
v_unused_bytesNUMBER;
v_last_used_extent_file_idNUMBER;
v_last_used_extent_block_idNUMBER;
v_last_used_blockNUMBER;
BEGIN
dbms_space.unused_space(SCOTT,BIGEMP,TABLE,v_total_blocks,v_total_bytes,v_unused_blocks,v_unused_bytes,v_last_used_extent_file_id,v_last_used_extent_block_id,v_last_used_block);
dbms_output.put_line(TotalBlocks:||TO_CHAR(v_total_blocks));
dbms_output.put_line(BlocksaboveHWM:||TO_CHAR(v_unused_blocks));
END;
/
TotalBlocks:256
BlocksaboveHWM:0
PL/SQLproceduresuccessfullycompleted
Executedin0.01seconds
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。 |
|