仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 864|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之怎样挪动表来到达减小数据文件巨细的目...

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:30:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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将不使用索引。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-19 15:48:26 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
分手快乐 该用户已被删除
板凳
发表于 2015-1-27 07:36:53 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
兰色精灵 该用户已被删除
地板
发表于 2015-2-5 04:15:10 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
5#
发表于 2015-2-11 04:27:09 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
深爱那片海 该用户已被删除
6#
发表于 2015-3-1 21:38:37 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
金色的骷髅 该用户已被删除
7#
发表于 2015-3-11 00:23:44 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
若相依 该用户已被删除
8#
发表于 2015-3-17 17:06:06 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-24 13:19:19 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 12:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表