查看: 20748|回复: 17

oracle db中数据和元数据的概念

[复制链接]
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
跳转到指定楼层
1#
发表于 2012-7-29 19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 warehouse 于 2014-8-10 11:58 编辑

02年研究dw相关的产品和业务时第一次听说了元数据的概念,很多资料上是这样描述元数据的概念的:元数据是定义或者描述数据的数据。言外之意是先有元数据再有数据。在构建数据仓库前期建模的过程其实就是定义元数据的过程。如果说oltp的产生是源于业务驱动的,那么olap的产生完全是由数据驱动最终为业务服务的,他们其实最后是一个圆周,根本就没有终点,所以搞信息化,db和dw是没有尽头的,我觉得是一个闭环闲言少叙,下面看看oracle中数据和元数据的概念,oracle中其实把数据和元数据分的非常清楚,只是没有明确的用这2个概念界定出来,在11.2版本中参数deferred_segment_creation的出现更是把元数据和数据分的非常清楚了。
--===============================
C:\>sqlplus test/test
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 7月 29 19:08:15 2012
Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning option
SQL> show parameter def
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation            boolean     TRUE
SQL> create table t(id int ,name varchar2(10)) tablespace users;
表已创建。
SQL> select object_id,data_object_id from dba_objects where owner='TEST' and object_name='T';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
     21030          21030
SQL> select count(*) from dba_segments where owner='TEST' and segment_name='T';
  COUNT(*)
----------
         0
--create table之后发现数据段并不存在,这就是deferred_segment_creation的作用,段被延迟创建了,正常都是在插入数据时创建的,这里发现move之后段也随即被创建了,其实表里这时候还是没有数据的,之所以move一下,主要是我观查到dba_objects中段的id在创建表的时侯已经分配好了,而并没有在创建段的时侯再分配,所以在段不存在的时侯move一下我是想验证move之后data_object_id是否会发生变化,结果是move之后data_object_id确实和段存在的情况下move的结果一样,发生了变化。
SQL> alter table t move;
表已更改。
SQL> select object_id,data_object_id from dba_objects where owner='TEST' and object_name='T';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
     21030          21031
SQL> select count(*) from dba_segments where owner='TEST' and segment_name='T';
  COUNT(*)
----------
         1
SQL>
--=================================
这里大家注意create table...定义的就是元数据,元数据是存放着system表空间里的,数据是保存在我们create table时指定的表空间users里,下面简单举个例子来帮助我们理解数据和元数据:
--=================================
SQL> insert into t values(1,'a');
已创建 1 行。
SQL> insert into t values(2,'b');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from t;
        ID NAME
---------- ----------
         1 a
         2 b
SQL> alter tablespace users offline;
表空间已更改。
SQL> select * from t;
select * from t
              *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 4
ORA-01110: 数据文件 4: 'E:\ORACLE\ORADATA\TEST\USERS01.DBF'

SQL> drop table t;
表已删除。
SQL>
--================================
这里清楚的看到tablespace users被offline之后,不能查询t表里面的数据,但是缺可以drop table t,原因就是drop table的时侯oracle只是删除了t的元数据,而并不会去修改表里的数据。
--================================
有关锁的情况也是一样的,用户在修改一条数据的时侯会在表上同时加上tx和tm锁,其中tm锁锁定的就是元数据,tx锁定的是数据,要想锁定数据首先要锁定元数据。防止在修改数据的时侯其它session把元数据修改了。可见在oracle里把数据和元数据的概念也是体现的淋漓尽致。E.F.CODE在提出RDBMS理论的时侯不知道是否已对这2个概念了然于胸,在他提出olap概念的时侯不知道他老人家是否对oracle熟悉,但是我们真的很敬佩这位2次获得图灵奖的关系型数据库的鼻祖是根据什么理论能够提出这么精髓的概念。我们也不知道oracle的设计者又是参照什么理论能在olap概念之前就把元数据和数据运用的如此之精妙。
真是让人震撼。
--=================================
set unused column其实也是这个道理,首先把元数据删除了(其实是重命名),然后空闲的时侯再删除数据。
--=================================
external table的话更是做到了极致,把metadata放在db里,data直接在os上,有关external table doc上有清晰的描述:
An external table is a read-only table that is defined within the database but exists
outside of the database. In more technical terms, the external table’s metadata is
stored inside the database, and the data it contains is outside of the database.
xiaoyao1107 该用户已被删除
2#
发表于 2012-7-29 22:04 | 只看该作者
本帖最后由 xiaoyao1107 于 2012-7-29 22:06 编辑

能否把数据和元数据在数据库原理的的概念也列一列,谢谢

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24ITPUB社区OCM联盟徽章
日期:2013-11-21 14:19:26
3#
发表于 2012-8-17 09:36 | 只看该作者
结合谢老师讲的rowid的知识, 有点理解.下次我安一个11G ,测试一下,加深理解

使用道具 举报

回复
论坛徽章:
9
奥运会纪念徽章:羽毛球
日期:2012-10-08 11:33:492013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:47:53马上加薪
日期:2014-02-18 16:47:53马上加薪
日期:2015-01-13 21:26:15优秀写手
日期:2015-02-12 06:00:15慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
4#
发表于 2012-8-17 09:47 | 只看该作者
学习了。但是只是概念性的了解了有这么一回事。

使用道具 举报

回复
论坛徽章:
20
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44itpub13周年纪念徽章
日期:2014-09-28 10:55:54马上有钱
日期:2014-12-14 22:33:02美羊羊
日期:2015-02-28 17:32:28沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:58:18慢羊羊
日期:2015-05-01 17:38:23美羊羊
日期:2015-06-29 21:06:54秀才
日期:2015-08-28 09:17:412014年世界杯参赛球队: 瑞士
日期:2014-06-13 11:23:53
5#
发表于 2012-8-17 11:44 | 只看该作者
学习了!

使用道具 举报

回复
论坛徽章:
9
奥运会纪念徽章:羽毛球
日期:2012-10-08 11:33:492013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:47:53马上加薪
日期:2014-02-18 16:47:53马上加薪
日期:2015-01-13 21:26:15优秀写手
日期:2015-02-12 06:00:15慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
6#
发表于 2012-8-17 13:29 | 只看该作者
如果删除了元数据,原表数据还存在的话,能否重建表或者其他去指向那些数据呢?另外,那些数据是否会被清除?怎样清除啊???

使用道具 举报

回复
论坛徽章:
0
7#
发表于 2012-8-17 15:15 | 只看该作者
学习了.

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2012-8-17 16:46 | 只看该作者
楼主的例子很好啊,我理解的元数据包括数据库对象(表、视图、触发器、存储过程等)的定义及它们之间的层次结构关系。

像表的空间占用(rowtotal,reserved,data,index_size,unused),primary/foreign key,clustered/non-clustered index 这些都可以作为元数据的参考,数据提取、转换规则、更新策略这些都是技术元数据。

当修改表结构时,如果表中已经插入数据,这时的修改就会影响所有的数据,如果是增加一个字段,必须设置可以为空或者设置缺省值以兼容已有的数据。
不知道是不是可以这样理解,当我们做DML时我们操作的是数据,做DDL时操作的是元数据。

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
9#
 楼主| 发表于 2012-11-16 12:40 | 只看该作者
做了一点更新

使用道具 举报

回复
论坛徽章:
0
10#
发表于 2012-11-16 12:57 | 只看该作者
学习了

使用道具 举报

回复

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

本版积分规则 发表回复

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