楼主: fjhello2002

难道新加坡的ORACLE工程师就很牛?!

[复制链接]
论坛徽章:
56
马上加薪
日期:2014-12-22 13:11:12复活蛋
日期:2011-08-31 14:55:20ITPUB9周年纪念徽章
日期:2010-10-08 09:32:252010世博会纪念徽章
日期:2010-09-07 08:52:012010年世界杯参赛球队:瑞士
日期:2010-06-24 09:16:222010年世界杯参赛球队:德国
日期:2010-04-27 09:40:272010年世界杯参赛球队:韩国
日期:2010-04-23 23:34:412010新春纪念徽章
日期:2010-03-01 11:06:222010新春纪念徽章
日期:2010-01-04 08:33:08参与WIN7挑战赛纪念
日期:2009-11-06 10:44:24
21#
发表于 2006-6-22 10:49 | 只看该作者
最初由 fjhello2002 发布
[B]我原和xiangxianni一样,觉得用alter table xxx move  tablespace 需要很多的空闲表空间,所以没有这么做。必竟是在线系统,稳定第一,不敢随便测试的。因此采用EXP IMP来做。

后来测试了一下,用alter table xxx move  tablespace可以 (tablespace后跟的是原先的表空间)。当然,我没有试过几百个G的表去MOVE,只是在自己机器上测试了几百兆的情况。
测试条件如下:
表空间大小为 260M, 剩余空间为10M,表大小为250m, 1600W条记录。 临时表空间30M,然后直接把表MOVE了一下,可以成功。 [/B]


你250m全部是表真正占有的吗?如果是就不太可能。
btw:我的方法很正确啊

使用道具 举报

回复
论坛徽章:
0
22#
发表于 2006-6-22 10:50 | 只看该作者
由于现在没有环境,等待结果

使用道具 举报

回复
论坛徽章:
0
23#
 楼主| 发表于 2006-6-22 11:01 | 只看该作者
表空间不可以扩展的。
做之前和做之后,我查过数据文件的大小,确认没有增加。

使用道具 举报

回复
论坛徽章:
0
24#
 楼主| 发表于 2006-6-22 11:02 | 只看该作者
最初由 waityou81 发布
[B]

你250m全部是表真正占有的吗?如果是就不太可能。
btw:我的方法很正确啊 [/B]



==============
我看表是8M扩展一次,因此,250M就算不是全部占用,也不会小于250-8M

使用道具 举报

回复
论坛徽章:
0
25#
 楼主| 发表于 2006-6-22 11:13 | 只看该作者
理论上,我觉得MOVE TABLE需要创建临时表。
如果临时表空间不够大,或者本身表空间不够大,应该是无法完成的

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
26#
发表于 2006-6-22 11:29 | 只看该作者
1. 从理论上来说,move时如果剩余表空间不足以放下 move 后的object大小,应该是不可以move.
因为,为了回滚需要(不是手动回滚)万一move没正常结束,不会影响原来的object.
原来的segment 所占的space肯定不会被拿来先给新的segment用。
2。fjhello2002 的实验成功的可能性就是,move过后的segment size不到10M。

3。看看我的实验
[php]

1. Create an new tablespace for test.
create tablespace test_move datafile '/oradata/ractest/test_move01.dbf'
size 256M autoextend on next 16M maxsize 4096M;

2. Create new table and insert data to make it's size to about 200M;
'
create table test_move_table nologging tablespace TEST_MOVE as select * from dba_objects;
insert /*+append */ into test_move_table select * from test_move_table;
commit;
insert /*+append */ into test_move_table select * from test_move_table;
commit;
insert /*+append */ into test_move_table select * from test_move_table;
commit;
insert /*+append */ into test_move_table select * from test_move_table;
commit;
insert /*+append */ into test_move_table select * from test_move_table;
commit;
SQL> select bytes/1024/1024 from dba_free_space
  2  where tablespace_name = 'TEST_MOVE';
BYTES/1024/1024
---------------
           64
SQL> select count(*) from TEST_MOVE_TABLE;

  COUNT(*)
----------
   1797056
  1* select bytes/1024/1024,tablespace_name from dba_segments where segment_name
= 'TEST_MOVE_TABLE'
SQL> /

BYTES/1024/1024 TABLESPACE_NAME
--------------- ------------------------------
            192 TEST_MOVE

3. Delete record table for about 1/3 record.
delete from TEST_MOVE_TABLE where rownum < 797056;
(The segment size after move should about 120M)

4. Disable autoextend on tablespace TEST_MOVE .

alter database datafile  '/oradata/ractest/test_move01.dbf' autoextend off;

5. Try to move the table.
SQL> alter table TEST_MOVE_TABLE move tablespace TEST_MOVE;
alter table TEST_MOVE_TABLE move tablespace TEST_MOVE
            *
ERROR at line 1:
ORA-01652: unable to extend temp segment by 128 in tablespace TEST_MOVE
(Failed )

6. Enable autoextend on tablespace TEST_MOVE to see how much space "Move" need
SQL>alter database datafile  '/oradata/ractest/test_move01.dbf' autoextend on;

7. Move again.
SQL> alter table TEST_MOVE_TABLE move tablespace TEST_MOVE;

8. Check the segment Size after Move

select bytes/1024/1024 from dba_segments
where segment_name = 'TEST_MOVE_TABLE'
BYTES/1024/1024
---------------
            112

9.Check the file Size after Move
  1  select bytes/1024/1024 from dba_data_files
  2* where tablespace_name = 'TEST_MOVE'
  BYTES/1024/1024
---------------
            305
            
305 ~= 192 + 112
The "Move" action need at least space of the segment size after move.

...


[/php]
应该足够清楚了。

至于新加坡DBA的看法,最好问问看了……

使用道具 举报

回复
论坛徽章:
34
授权会员
日期:2005-10-30 17:05:33灰彻蛋
日期:2011-06-28 11:39:13ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36蛋疼蛋
日期:2013-03-09 00:20:13咸鸭蛋
日期:2013-07-22 13:13:00
27#
发表于 2006-6-22 11:45 | 只看该作者
为何还要再move一次

使用道具 举报

回复
论坛徽章:
5
授权会员
日期:2005-10-30 17:05:33生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:532015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
28#
发表于 2006-6-22 12:00 | 只看该作者
最初由 rollingpig 发布
[B]
2。fjhello2002 的实验成功的可能性就是,move过后的segment size不到10M。

[/B]


如果fjhello2002的表只有10M大小的话:

10M/1600w=0.66
一条记录只占0.66字节。不可能。

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
29#
发表于 2006-6-22 12:16 | 只看该作者
最初由 jyj 发布
[B]为何还要再move一次 [/B]

第一次因为表空间不足,失败了
第二次把表空间auotextend 打开,看看最终需要多少space.

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
30#
发表于 2006-6-22 12:17 | 只看该作者
hehe
那就不清楚了。
试验一下吧……
最初由 overtime 发布
[B]

如果fjhello2002的表只有10M大小的话:

10M/1600w=0.66
一条记录只占0.66字节。不可能。 [/B]

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表