MSSQL网页编程之怎样挪动表来到达减小数据文件巨细的目...
为多种编程语言提供了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。
$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
$cd/oracle/oradata/ORCL10/datafile/
$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将不使用索引。 where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。 两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
页:
[1]