Oracle11g温习-第十二章:tables
2013年4月27日 星期六
10:44
1、表的功能 存储、管理数据的基本单元(二维表:由行和列组成) |
||||||
2、表的类型 |
||||||
1)普通表:【heap table(堆表) :数据存储时,无序的,对它的访问采用全表扫描】。 2)分区表:【 (>2G) 对大表进行优化 (Range Partitioning,List PartitioningHash Partitioning,Composite Partitioning)】 ——按range 建立分区表
3)索引组织表(IOT)(如果表经常以主键为索引查询,可建立索引组织表,加快表的访问速度)
4)簇:cluster (多表链接查询)【 先建立簇,然后建立簇表,最后建立索引 】
cluster访问和普通表连接查询访问对比
|
||||||
3、 rowid :行号(伪列)精确的定义记录的物理位置 |
||||||
extended rowid:
object id 对象号(6), relative file id 文件号(3), block id 块号(6), row id 行号(3)
将rowid转换成十进制形式
|
||||||
4、临时表(global temporary table):用于电子商务的网上购物 |
||||||
临时表用于存放会话或事务的私有数据。建立临时表后,其结构会一直存在,但其数据只在当前事务内或当前会话内有效。 1.临时表的基础知识 临时表只在Oracle 8i 以及以上产品中支持。ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。 Oracle的临时表创建之后基本不占用表空间,临时表并非存放在用户的表空间中,而是存放在 Schema 所指定的临时表空间中。如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在ORACLE系统的临时表空间中(TEMP)。 可以对临时表创建索引,视图,触发器,可以用export和import工具导入导出表的定义,但是不能导出数据。表的定义对所有的会话可见。建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效. 尽管对临时表的DML操作速度比较快,但同样也是要产生 Redo Log ,只是同样的DML语句,比对 PERMANENT 的DML 产生的Redo Log 少。 临时表的不足之处: 1.不支持lob对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。 2.不支持主外键关系 特性和性能(与普通表和视图的比较) 1.临时表只在当前连接内有效 2.临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用 3.数据处理比较复杂的时候时表快,反之视图快点 4.在仅仅查询数据的时候建议用游标: open cursor for 'sql clause'; 临时表的应用: 对于一个电子商务类网站,不同消费者在网站上购物,就是一个独立的 SESSION,选购商品放进购物车中,最后将购物车中的商品进行结算。也就是说,必须在整个SESSION期间保存购物车中的信息。同时,还存在有些消费者,往往最终结账时放弃购买商品。如果,直接将消费者选购信息存放在最终表(PERMANENT)中,必然对最终表造成非常大的压力。因此,对于这种案例,就可以采用创建临时表(ON COMMIT PRESERVE ROWS)的方法来解决。数据只在 SESSION 期间有效,对于结算成功的有效数据,转移到最终表中后,ORACLE自动TRUNCATE 临时数据;对于放弃结算的数据,ORACLE 同样自动进行 TRUNCATE ,而无须编码控制,并且最终表只处理有效订单,减轻了频繁的DML的压力。 Temp Table 的另一个应用,就是存放数据分析的中间数据。 1)基于事务,在事务提交时,自动删除记录
2)基于会话,当用户退出session 时,自动删除记录
|
||||||
5、data block 数据块 |
||||||
pctfree:预留空间的百分比,这个数值要得当 过大,浪费块空间 过小:update 产生行迁移,insert 产生行链接,降低了记录的访问速度,影响性能。 |
||||||
6、表的 空间(extent)管理: |
||||||
当建立表的时候,建立相应的段,然后自动分配相应的extent(1个或者多个),亦可以手工提前分配extent(用于需大量插入数据的表)
——表的数据块的移动(move)
|
||||||
外部表管理: 1) sql loader 导入 2) 通过external table管理(只读) |
||||||
管理外部表 外部表是表结构被存放在数据字典,而表数据被存放在OS文件的表。通过使用外部表,不仅可以在数据库中查询OS文件的数据,还可以使用INSERT方式将OS文件数据装载到数据库中,从而实现SQL*Loader所提供的功能。建立外部表后,可以查询外部表的数据,在外部表上执行连接查询,或对外部表的数据进行排序。需要注意,外部表上不能执行DML修改,也不能在外部表上建立索引。 建立外部表 建立外部表 时使用create table 命令完成的,但建立外部表时必须指定 organization external 选项 .与建立普通表不同,使用create table 建立外部表 包括两部分内容: 一部分描述列的数据类型,另一部分描述os文件 与表列的对应关系. 下面以访问os文件emp.dat 的数据为例,说明建立和使用外部表的方法,假定emp.dat包括以下数据: ——准备工作: [oracle@solaris10 ~]$mkdir /export/home/oracle/dat [oracle@solaris10 ~]$cd /export/home/oracle/dat [oracle@solaris10 dat]$vi empxt1.dat 360,Jane,Janus,ST_CLERK,121,17-MAY-2001,3000,0,50,jjanus 361,Mark,Jasper,SA_REP,145,17-MAY-2001,8000,.1,80,mjasper 362,Brenda,Starr,AD_ASST,200,17-MAY-2001,5500,0,10,bstarr 363,Alex,Alda,AC_MGR,145,17-MAY-2001,9000,.15,80,aalda [oracle@solaris10 dat]$vi empxt2.dat 401,Jesse,Cromwell,HR_REP,203,17-MAY-2001,7000,0,40,jcromwel 402,Abby,Applegate,IT_PROG,103,17-MAY-2001,9000,.2,60,aapplega 403,Carol,Cousins,AD_VP,100,17-MAY-2001,27000,.3,90,ccousins 404,John,Richardson,AC_ACCOUNT,205,17-MAY-2001,5000,0,110,jrichard ——建立对应的目录: SYS @ PROD > conn /as sysdba Connected. SYS @ PROD > create or replace directory admin_dat_dir 该目录存放 数据文件 as '/export/home/oracle/dat'; Directory created. SYS @ PROD > create or replace directory admin_log_dir 该目录存放导入操作产生的日志 as '/export/home/oracle/log'; Directory created. SYS @ PROD > create or replace directory admin_bad_dir 该目录存放导入失败的那些数据 as '/export/home/oracle/bad'; Directory created. SYS @ PROD > ! [oracle@solaris10 ~]$mkdir /export/home/oracle/{log,bad} [oracle@solaris10 ~]$ls 1 Documents core dat local.login shell 1.sql afiedt.buf cr_anny_db.sql hell.txt local.profile x86 Desktop bad cr_dict.sql local.cshrc log ——授权scott 可以访问所建立的目录 SYS @ PROD > grant read on directory admin_dat_dir to scott; Grant succeeded. SYS @ PROD > grant write on directory admin_log_dir to scott; Grant succeeded. SYS @ PROD > grant write on directory admin_bad_dir to scott; Grant succeeded. ——建立外部表 SYS @ PROD > conn scott/tiger Connected. SYS @ PROD > CREATE TABLE admin_ext_employees (employee_id NUMBER(4), first_name VARCHAR2(20), last_name VARCHAR2(25), job_id VARCHAR2(10), manager_id NUMBER(4), hire_date DATE, salary NUMBER(8,2), commission_pct NUMBER(2,2), department_id NUMBER(4), email VARCHAR2(25) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY admin_dat_dir ACCESS PARAMETERS ( records delimited by newline badfile admin_bad_dir:'empxt%a_%p.bad' logfile admin_log_dir:'empxt%a_%p.log' fields terminated by ',' missing field values are null ( employee_id, first_name, last_name, job_id, manager_id, hire_date char date_format date mask "dd-mon-yyyy", salary, commission_pct, department_id, email ) ) LOCATION ('empxt1.dat', 'empxt2.dat') ) PARALLEL REJECT LIMIT UNLIMITED; Table created. SYS @ PROD > select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- DEPT TABLE EMP TABLE BONUS TABLE SALGRADE TABLE TEST TABLE ADMIN_EXT_EMPLOYEES TABLE 6 rows selected. ——查询外部表记录 SYS @ PROD > select * from ADMIN_EXT_EMPLOYEES; EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID MANAGER_ID HIRE_DATE SALARY COMMISSION_PCT DEPARTMENT_ID EMAIL ----------- ---------- ---------- ---------- ---------- ------------------- ---------- -------------- ------------- ---------- 360 Jane Janus ST_CLERK 121 2001-05-17 00:00:00 3000 0 50 jjanus 361 Mark Jasper SA_REP 145 2001-05-17 00:00:00 8000 .1 80 mjasper 362 Brenda Starr AD_ASST 200 2001-05-17 00:00:00 5500 0 10 bstarr 363 Alex Alda AC_MGR 145 2001-05-17 00:00:00 9000 .15 80 aalda 401 Jesse Cromwell HR_REP 203 2001-05-17 00:00:00 7000 0 40 jcromwel 402 Abby Applegate IT_PROG 103 2001-05-17 00:00:00 9000 .2 60 aapplega 403 Carol Cousins AD_VP 100 2001-05-17 00:00:00 27000 .3 90 ccousins 404 John Richardson AC_ACCOUNT 205 2001-05-17 00:00:00 5000 0 110 jrichard 10 rows selected. 只能读,不能做dml SYS @ PROD > delete from ADMIN_EXT_EMPLOYEES; delete from ADMIN_EXT_EMPLOYEES * ERROR at line 1: ORA-30657: operation not supported on external organized table ——把外部表数据插入到oracle 表里 SYS @ PROD > create table employees as select * from admin_ext_employees where 1=2;
Table created. SYS @ PROD > insert into employees select * from admin_ext_employees; 10 rows created. SYS @ PROD > select * from employees; EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID MANAGER_ID HIRE_DATE SALARY COMMISSION_PCT DEPARTMENT_ID EMAIL ----------- ---------- ---------- ---------- ---------- ------------------- ---------- -------------- ------------- ---------- 401 Jesse Cromwell HR_REP 203 2001-05-17 00:00:00 7000 0 40 jcromwel 402 Abby Applegate IT_PROG 103 2001-05-17 00:00:00 9000 .2 60 aapplega 403 Carol Cousins AD_VP 100 2001-05-17 00:00:00 27000 .3 90 ccousins 404 John Richardson AC_ACCOUNT 205 2001-05-17 00:00:00 5000 0 110 jrichard 360 Jane Janus ST_CLERK 121 2001-05-17 00:00:00 3000 0 50 jjanus 361 Mark Jasper SA_REP 145 2001-05-17 00:00:00 8000 .1 80 mjasper 362 Brenda Starr AD_ASST 200 2001-05-17 00:00:00 5500 0 10 bstarr 363 Alex Alda AC_MGR 145 2001-05-17 00:00:00 9000 .15 80 aalda |
Oracle11g温习-第十二章:tables的更多相关文章
- Oracle11g温习-第十九章:审计(audit)
2013年4月27日 星期六 10:52 1.审计的功能:监控用户在database 的 action (操作) 2.审计分类 1) session :在同一个session,相同的语句只产生一个审计 ...
- Oracle11g温习-第十六章:用户管理
2013年4月27日 星期六 10:50 1.概念 (1)schema : user.object 就是用户创建的对象 (2)用户认证方式: ...
- Oracle11g温习-第十四章:约束( constraint )
2013年4月27日 星期六 10:48 1.约束的功能 通过一些强制性商业规则,保证数据的完整性.一致性 2.约束的类别 1 ) not null 不允许为空 2 ) check ...
- 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用
进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
- <构建之法>第十一章、十二章有感
十一章:软件设计与实现 工作时要懂得平衡进度和质量.我一直有一个困扰:像我们团队这次做 男神女神配 社区交友网,我负责主页的设计及内容模块,有个队友负责网站的注册和登录模块,有个队友负责搜索模块,有个 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
随机推荐
- 【ASP.Net】 http请求中get,put,post,delete的区别与使用总结
在web api的设计上, 需要设计这个每个action对应的资源的请求方法是什么. Get方法是对服务器资源的请求获取, 一般get方法的参数都放在URL当中的. 所以通常情况下这种请求方式都是不安 ...
- Docker save & load
docker save Estimated reading time: 1 minute Description Save one or more images to a tar archive (s ...
- [学习一个] Matlab GUI 学习笔记 Ⅰ
Matlab GUI 学习笔记 Ⅰ 1. Foreword Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强 ...
- centos7 修改密码
Centos7破解密码的方法 Centos7忘记密码 在工作或者自己练习的时候我们难免会大意忘掉自己的root密码,有些同学忘掉密码竟然第一选择是重装系统,工作中可万万使不得! 本篇博客将讲解 ...
- table固定列的宽度,超出部分用…代替(针对普通table和antd)
一. 实现思路 我们都知道让溢出内容变成...,只需要以下: overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 表格里的内容 ...
- MySQL 并发测试中,线程数和数据库连接池的实验
我一直以来,对性能测试中,连接池的大小要如何配置,不是太清楚: 就我所知道的,就DB自带对连接数的限制,在sqlserver中用select @@connection 可以查到, 在代码中,可以配置D ...
- Mybatis的SqlSession理解(二)
Mybaits加载执行该xml配置 class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, Initi ...
- php中if(\$a==\$b)和if(\$a=\$b)什么区别?
<?php // if($a==$b)和if($a=$b)什么区别? $a = 1; $b = 1; if ($a == $b) { // 通过 echo '通过'.PHP_EOL; } if ...
- eclipse中启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误
原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...
- yum的配置文件介绍
yum 的配置文件分为两部分:main 和repository main 部分定义了全局配置选项,整个yum 配置文件应该只有一个main.常位于/etc/yum.conf 中. reposito ...