2008-08-29 Fri
总体说来,compress table的原来和compress index原理大致相同,compress table是压缩某表的同一字段下的相同的行,compress index是压缩复合索引中同一字段(一般是第一、二个字段)的相同行。
compress表可以通过user_tables.COMPRESSION查看是否是压缩表:
Table created.
SQL>
SQL>
SQL> create table t_compress (a varchar2(20),b number,c number) compress;
Table created.
SQL>
SQL> create table tab_for_insert (a varchar2(20),b number,c number);
Table created.
SQL> insert into tab_for_insert select 'aa'||rownum,rownum,rownum from dba_objects;
88138 rows created.
SQL> insert into tab_for_insert select 'bb'||rownum,rownum,rownum from dba_objects;
88138 rows created.
SQL> insert into tab_for_insert select 'cc'||rownum,rownum,rownum from dba_objects;
88138 rows created.
SQL> /
88138 rows created.
SQL> commit;
Commit complete.
SQL>
SQL> update tab_for_insert set b=mod
2
SQL>
SQL> update tab_for_insert set b=mod(b,10);
352552 rows updated.
SQL> update tab_for_insert set c=mod(c,5);
352552 rows updated.
SQL> commit;
Commit complete.
SQL>
SQL>
SQL>
SQL> insert into TAB_FOR_INSERT select * from TAB_FOR_INSERT;
352552 rows created.
SQL> /
705104 rows created.
SQL> /
1410208 rows created.
SQL> /
2820416 rows created.
SQL> /
5640832 rows created.
SQL> /
11281664 rows created.
SQL> commit;
Commit complete.
SQL> select table_name,COMPRESSION from user_tables;
TABLE_NAME COMPRESS
------------------------------ --------
TAB_FOR_INSERT DISABLED
T_COMPRESS ENABLED
T_NOCOMPRESS DISABLED
SQL>
1.compress表和一般表的体积的比较以及insert时间差距:
22563328 rows created.
Elapsed: 00:00:45.50
SQL>
SQL>
SQL> insert /*+ append */ into T_COMPRESS select * from TAB_FOR_INSERT;
22563328 rows created.
Elapsed: 00:02:54.41
SQL> commit;
Commit complete.
SQL> select segment_name,bytes from user_segments where segment_name in ('T_COMPRESS','T_NOCOMPRESS') ;
SEGMENT_NAME BYTES
------------------------------ ----------
T_NOCOMPRESS 475004928
T_COMPRESS 349175808
2.比较用order和不用order的表大小:
22563328 rows created.
Elapsed: 00:04:17.49
SQL> select segment_name,bytes from user_segments where segment_name in ('T_COMPRESS');
SEGMENT_NAME BYTES
------------------------------ ----------
T_COMPRESS 258998272
Elapsed: 00:00:06.12
--而没用order by之前的大小是:
SEGMENT_NAME BYTES
------------------------------ ----------
T_COMPRESS 349175808
3.非压缩表和压缩表之间的转换:
SQL> alter table T_NOCOMPRESS compress;
Table altered.
Elapsed: 00:00:00.02
--没做move之前的大小
SQL> select segment_name,bytes from user_segments where segment_name in ('T_NOCOMPRESS');
SEGMENT_NAME BYTES
------------------------------ ----------
T_NOCOMPRESS 475004928
Elapsed: 00:00:04.04
SQL>
SQL>
SQL> alter table T_NOCOMPRESS move;
Table altered.
Elapsed: 00:02:41.51
SQL>
--move之后的大小
SQL>
SQL> select segment_name,bytes from user_segments where segment_name in ('T_NOCOMPRESS');
SEGMENT_NAME BYTES
------------------------------ ----------
T_NOCOMPRESS 349175808
Elapsed: 00:00:04.25
4.也可以像压缩复合索引一样,指定compress度:
SEGMENT_NAME BYTES
------------------------------ ----------
T_NOCOMPRESS 427819008
Elapsed: 00:00:06.53
SQL>
SQL>
SQL>
SQL> alter table T_NOCOMPRESS compress 2;
Table altered.
Elapsed: 00:00:00.03
SQL>
SQL> alter table T_NOCOMPRESS move;
Table altered.
Elapsed: 00:02:39.96
SQL> select segment_name,bytes from user_segments where segment_name in ('T_NOCOMPRESS');
SEGMENT_NAME BYTES
------------------------------ ----------
T_NOCOMPRESS 349175808
5.数据库9206中有bug,不能add/drop columns:
alter table T_COMPRESS add d number
*
ERROR at line 1:
ORA-22856: cannot add columns to object tables
Elapsed: 00:00:00.03
SQL>
--该bug见Doc ID: Note:217292.1 ,或bug 2421054
可以用以下方法绕过:
1.alter table nocompress
2.move
注意上述2个步骤,执行完第一步后,继续执行第二步才能完成;如果在执行第一步后,尝试add column,仍报错,再move之后,将同样也不能add column:
SQL> alter table T_COMPRESS nocompress;
Table altered.
Elapsed: 00:00:00.02
SQL>
SQL> alter table T_COMPRESS add z number;
alter table T_COMPRESS add z number
*
ERROR at line 1:
ORA-22856: cannot add columns to object tables
Elapsed: 00:00:00.01
SQL>
SQL>
SQL> alter table T_COMPRESS move;
Table altered.
Elapsed: 00:00:39.91
SQL>
SQL>
SQL> alter table T_COMPRESS add z number;
alter table T_COMPRESS add z number
*
ERROR at line 1:
ORA-22856: cannot add columns to object tables
--必须采用执行完以下2步后再add:
SQL> alter table T_COMPRESS nocompress;
Table altered.
Elapsed: 00:00:00.03
SQL> alter table T_COMPRESS move;
Table altered.
Elapsed: 00:00:39.52
SQL> alter table T_COMPRESS add z number;
Table altered.
Elapsed: 00:00:00.03
SQL>
今天在itpub上参与了两个比较有趣的小问题,记录一下。
1. sys_guid()问题
sys_guid()这个函数在Windows版本的Oracle数据库中和Linux版本的数据库中表现不同,在Windows中会返回随机的GUID,而Linux中则始终是相同的GUID。
2.Storeoutline问题
在Oracle 10.2.0.4版本中,Storeoutline似乎有功能上的bug,当然现在还不能确认。
明天下午将去参加 InfoQ 中文站主办的 体验基于OpenSolaris的Web/企业应用 活动,这也是杭州 OpenSolaris/OpenSource 用户组的第一次活动。
我应邀将在活动上做个关于数据库的分享,主题为 "设计可扩展的面向互联网应用的MySQL数据库" ,欢迎感兴趣的朋友光临指导。具体时间和地点 ? 就在上面的链接里 ...
自从 Sun 把 MySQL 收购了之后,好像关于数据库的市场活动并不大,相反,倒是对操作系统做了一些不遗余力的推广。当然,现在的 Solaris 倒也并非没有长处,ZFS 和 Dtrace 就是两个很有趣的东西,而这两者对 MySQL 都是很好的互补,对 Linux 其实也是很好的互补,尤其是 ZFS ,最近一段时间,越来越觉得 Linux 的 EXT 文件系统在某些场景多少还有点短板。期待明天能听到关于 ZFS 和 Dtrace 的一些内容。
--EOF--
2008-08-28 Thu
前几天去敦煌的时候,承朋友白先生相赠了一箱李广桃,吃了之后甚觉鲜美,他们说敦煌更好的水果实际上是李广杏,不过过了季节。
李广杏可称敦煌水果之王,每年七月是李广杏的收获季节。李广杏因其光泽黄亮、汁甜如蜜而享有盛名。敦煌光照充足,无霜期长,昼夜温差大,因而李广杏含糖量高,甘美爽口。用李广杏制成的敦煌杏干酸甜可口,堪称一绝。
既然这些水果以李广为名,自然和李广具有一定的联系,考证一下历史上这样的:
相传西汉年间,飞将军李广率部西征,夏日炎炎,将士焦渴难忍。突然空中袭来一阵奇香,只见两匹彩绸自流云中飘下。李将军策马追舌,拔出神箭射出,其中一匹彩绸应声落地,变成一片果实累累的杏林。众人争食,苦似黄莲。李广愤然砍平杏林,次日渭晨,却见杏林又枝繁叶连,鲜嫩欲滴的黄杏令人馋涎欲滴。李厂忍不住摘下一个咬了一口,顿时香人肺腑,将士们纷纷摘杏食之,顿觉精神倍增。原来,那两匹彩绸本是甜杏仙子和苦杏仙子,奉王母之命来救李广的,她们只顾嬉戏,惹怒李广而射落了苦杏仙子,深夜甜杏仙子拢到了苦杏仙子,施展仙法,在苦杏树桩上接上甜杏树枝,最后结出了清香甘甜的黄杏。当年曾为李广解危救困的甜杏,随着李广大军传人敦煌,所以敦煌人把它叫作李广杏。
李广与敦煌的缘分不仅于此。李广的十六世孙李暠(hao,去声)后来在敦煌创立了西凉国:
李暠(351年----417年),字玄盛,小字长生,陇西郡成纪县(今静宁西南)人。十六国时西凉创建者。400年--417年在位。他是西汉名将李广的十六世孙。李暠少年的时候十分好学,通诵经史,尤其擅长文章义礼,也精通孙吴兵法,爱好武功,很小时就练就一身好本领。他的性格沉默而敏捷,宽和大度。后凉吕光末年,任效谷(今敦煌县)令。有惠政会沙州(今敦煌)刺史盂敏卒,他被州人推举为宁朔将军、敦煌太守,封宁朔将军。北凉段业时,仍为敦煌太守,安西将军,领护西胡校尉。晋安帝隆安四年(400年),晋昌太守唐瑶联合六郡,推李暠为大都督、大将军、凉公,领秦、凉二州牧,护羌校尉。李暠乃自立为王,建元庚子,建都敦煌,置官封将,西凉政权自此开始。
故事还不仅于此,李暠417年去世后,儿子李歆治国不善,420年亡国,另外一个儿子李恂战死后,其小儿子四处流浪,后来分为两支,一支辗转到了北魏,五代孙叫李渊,后来成为唐朝的始祖。另一支到了苏联,九代孙叫李白,后来成为著名的诗人。
关于李白的家世,李白自己自己曾经在《上安州裴长史书》中提到(也是他唯一一次提到):
"白本家金陵,世为右姓,遭沮渠蒙逊之难,奔流咸秦,因官寓家......"
李白这里说的遭沮渠蒙逊之难就是指西凉亡国之役,沮渠蒙逊是十六国另外一个牛人,据说是个天文学家,比诸葛亮NB多了,据说丫进攻敦煌时,先算好敦煌附近几天后将有大雨,派兵在敦煌城外垒起堤坝准备蓄水。西凉兵以为丫是神经病,没理他们,结果几天后天降暴雨,形成山洪,被沮渠蒙逊用水坝一拦,都灌到敦煌城里,敦煌城破。
所以李白虽然号称诗仙、酒仙,但是从来没有在大唐参加过科举考试,因为他不屑,他觉得自己是皇族。
这就是历史。好玩不?
相关文章|Related Articles
评论数量(1)|Add Comments
本文网址:http://www.eygle.com/archives/2008/08/li_and_dunhuang.html
在上午安装完数据库,配置完监听之后,中午休息,记得中午休息之前把数据库备份一下。
下午的Section是安装Grid Control。在OCM考试的Linux操作系统环境中安装Grid Control应该来说是一件很简单的事情,恩,实际上是我安装Grid Control最顺畅的一次了。
每个人面前会有两台机器,一台称为奇数机(ODD),一台称为偶数机(EVEN),注意,考题上也会这样表述的,要你在ODD机器上做什么或者在EVEN 机器上做什么,偶数还是奇数是依靠机器的hostname最后一位或者两位数字来定的,通常会要求你在奇数机上创建数据库,在偶数机上安装Grid Control的OMS。
偶数机上是没有Oracle软件的,因此OMS需要的Repository这个数据库也需要创建在奇数机上,再加上之后第二天会要求创建的Standby实例,总共会有三个实例运行在奇数机上,正常情况下奇数机的内存是2G,所以请预先考虑好分配给每个实例的内存。
为什么上午就要求配置监听?因为下午的考试中OMS需要通过监听来访问创建的数据库,总之,OCM考试中基本上都是这样环环相扣的,其中某一步做慢了或者没完成就很可能影响接下来的考试。
Grid Control的安装软件会预先放置在偶数机的某个目录下,考题里面会告诉你的。但是,不要着急安装,为了一次就安装成功我们需要预先做一些工作。再次强调一下,安装OMS我们基本上只有一次的机会,因为大部分的错误都会是在等待了一个漫长的Configuration过程之后再报出来,而这时候通常已经没有剩余的时间让你去找到问题发生的原因,然后清理已经安装了残迹再重新安装OMS了。
1. Use DBCA
按照要求,通常会创建一个新数据库在奇数机上(不同于上午的Section中要求创建的SID),用于存储OMS需要的Repository信息,下午的时候应该是已经可以使用图形界面了,所以我们可以用dbca来创建这个数据库。
2. Check Pacakage
数据库创建完毕以后,也许仍然你习惯用手动的方法创建,所以请检查数据库里面有没有dbms_shared_pool这个package,如果没有,运行$ORACLE_HOME/rdbms/admin/dbmspool.sql来创建这个package,因为安装OMS时候某些自动的检查需要调用这个包,没有的话将会报错。
3. Implement SSH
快速地建立两台机器之间的ssh信任关系,如果还不会的,请务必去网上查资料并且牢记每一步操作。这里有个小陷阱,默认情况下,两台机器上的oracle 用户的home目录权限是0777,也就是完全的可读些权限,但是在这种情况下,建立oracle用户的ssh信任关系,即使你完全配正确了,也同样无法正常地不输入密码就登陆到另外一台机器上。据说很多人折在这里,怎么也配不通两机的信任关系,那时候焦躁的心情应该可想而之了。 需要做的是将oracle用户的home目录权限改为0755。
4. Transfer X Window
尽量在一台机器上操作,不要在两台机器面前一会儿敲敲这个的键盘,一会儿动动那个的鼠标。字符界面的话,用terminal ssh过去就可以了,图形界面呢?不需要费劲地去检查vnc server有没有启动,启动在哪个端口了什么的,直接用ssh -X hostname这样的方式,就可以将远程的X界面显示在本机上。
5. Follow the Error Messege
安装OMS,对于Repository库是有一些初始化参数的要求的,比如java池该多大,shared pool该多大,job queue该多大,但是不要去阅读安装文档,那个浪费时间。我们需要做的就是设置SGA_TARGET = 300M,这样内存参数就自动管理了,安装OMS不会报任何错误,另外对于job queue等其它的参数,在点击开始安装之后的某个界面,会弹出一个警告框,告诉你哪些参数不符合要求,需要改为多少多少,OK,安装这个界面里的要求,依次修改数据库的参数,然后重新启动数据库,不需要退出安装界面,在重启完数据库之后,点确定,直接继续安装就可以了。
6. Be Patient
要有耐心,OMS安装的时候,在Configuration那一步时会非常慢,千万不要等不及了就准备关掉重来,时刻监控安装的log文件(log文件的位置在安装界面上应该可以找到),只要不停地有输出,你就可以安心地等待。
7. Install Agent
OMS安装完毕,也启动成功了。还需要在奇数机上安装Grid Control的Agent,有好多种方法可以安装,但是我们需要选择最简单最快速的方法,那就是使用agentDownload.linux程序,将这个程序从偶数机的OMS安装目录中copy到奇数机的某个目录下,随便哪个目录都行。然后运行下面的命令:
./agentDownload.linux -b /u01/app/oracle/product
最后一个参数是我们希望将agent安装到的BASE目录。
用这种方法安装Agent的速度很快,而且无需任何人工参与,简直是杀人越货考取OCM的必备良器。
8. Learning GUI
OMS也启动了,Agent也启动了,通过浏览器去检查一下Grid Control的管理界面是不是好用吧,到这里,基本上就没什么问题了,下面会是一些要求你通过Grid Control来创建一些表空间或者一些用户或者一些什么别的操作,按照要求来就好。不过,对于命令行死忠派来说,还是预先去熟悉一下图形界面的操作吧,否则到时候找个按钮都要找半天。
9. Lucky
运气很重要,点儿背的同学就不要去考了 ![]()
1930年,并不附属于普林斯顿大学的高等研究院在普林斯顿成立,也是全国第一所给学者研究的住宿学院。爱因斯坦是研究院第一批教授之一。可以说,整个20世纪就是一个全世界各地学者、研究员和企业从世界各地流入普林斯顿的过程。(——引自百度百科)
从今天的眼光来看,究竟是“罗马不是一天建成的”还是“条条大路通罗马”抑或普林斯顿分享着众人的荣耀还是其荣耀吸引了众人,这是一个先有鸡还是先有蛋的问题么?而对于一个早年求学于这所学校的学生我们又能说些什么呢?对他来说,是在现在分享了既成的将来事实,还是在当时影响了将来的既成事实?
也许一个游离于两者之间的答案是一个更接近真理的看法。千里马本身就是千里马,伯乐本身亦是伯乐,一个特定的《遇见》是一个“美丽的意外”,但如果可以加总,则或可计算实证。
在此之外,一些蝴蝶效应总是无法避免的。
Oracle Database 12g ?没错,就是还没有发布的未来版。
Oracle最近宣布将来的12g中将不再支持Raw Device. Oracle Database 12g什么时候会发布呢?也许是2012年。这一消息来自Metalink Note:578455.1
不支持裸设备意味着什么呢?Oracle这样说:
This means customers can no longer keep their datafiles, OCR or Voting disks on raw devices in Oracle 12g.
也就是说在RAC中,我们将不能使用裸设备存储OCR或VD,这个实际上是一个改进,在使用了ASM之后,还要划分几个裸设备用于存储OCR及VD,怎么看都不伦不类,所以在RAC中的这个De-Support实际上算是一个增强。
而且据说,在Oracle即将推出的Oracle Database 11g中,已经支持在ASM中存储OCR及VD,那么到12g的改变可以说是水到渠成的了。
而不再支持使用裸设备存储数据文件,这的确是个需要及早通知的消息,因为的确有很多客户仍然使用Raw Device来部署RAC环境。那么这些用户需要注意,在将来升级到12g的时候,这些文件必须进行迁移。
这就是未来,Oracle主导的变化,这一变化,在我看来是一大技术进步,虽然这期间需要ASM快速完善和成熟起来。
关于这一消息的其他内容可以参考:
Ningoo的 Oracle12G将不再支持裸设备?
ITPUB的 如何看待对于风传的Oracle 12g RAC将不再支持裸设备
-The End-
相关文章|Related Articles
- Oracle 10g RAC的相关概念
- RAC基本概念:PCM、IDLM、DLM等
- 10g OCR工具ocrcheck ocrconfig ocrdump
- Oracle进程:LMS 进程与Oracle RAC
- Oracle10g OCR及Voting Disk的备份
评论数量(3)|Add Comments
本文网址:http://www.eygle.com/archives/2008/08/oracle_12g_rawdevice.html