为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Oracle数据库学习

2017-09-26 25页 doc 54KB 24阅读

用户头像

is_614050

暂无简介

举报
Oracle数据库学习Oracle数据库学习 Oracle server由例程和数据库两部分组成,例程是一组内存结构和后台进程的集合,内存结构包括数据高速缓存、重做日志缓冲区和共享池3部分,这些内存结构总称为SGA;后台进程包括SMON,PMON,DBWR,CKPT,LGWR.ARCH等。数据库是一组,,文件的集合,由数据文件、控制文件和重做日志组成。 共享池:用于存放最近执行的,,,语句和数据字典信息(库高速缓存和数据字典高速缓存组成)。库高速缓存—用于存放最近执行的,,,语句,包括,,,语句文本、解析代码值及其执行计划,它还包含了许多上下文区...
Oracle数据库学习
Oracle数据库学习 Oracle server由例程和数据库两部分组成,例程是一组内存结构和后台进程的集合,内存结构包括数据高速缓存、重做日志缓冲区和共享池3部分,这些内存结构总称为SGA;后台进程包括SMON,PMON,DBWR,CKPT,LGWR.ARCH等。数据库是一组,,文件的集合,由数据文件、控制文件和重做日志组成。 共享池:用于存放最近执行的,,,语句和数据字典信息(库高速缓存和数据字典高速缓存组成)。库高速缓存—用于存放最近执行的,,,语句,包括,,,语句文本、解析代码值及其执行,它还包含了许多上下文区Context Area,也是共享游标。完全相同的SQL语句标准------语句文本相同—大小写相同—赋值变量相同。数据字典高速缓存---存放数据字典的信息,包括表、列的定义以及权限信息。 数据高速缓存:用于存放最近访问的数据库信息。LRU,类似队列访问机制。 重做日志缓冲区:用于记载例程变化。由很多中作记录组成,并且,每条重做记录记载了被修改数据块的位置以及变化后的数据。当执行update操作时,新数据2000将被存放到emp段锁对应的缓冲区B1中,旧数据1000将被存放到undo段所对应的缓冲区U1中,在修改这两个缓冲区之前,首相将它们的变化写到重做日志缓冲区,然后再修改它们的数据。 PGA 和 SGA 的总和应小于系统总内存减去操作系统和其它应用程序所需的内存空间后剩余的内存空间。 数据库物理文件 临时表空间—临时文件: 重做日志(Redo Log):用于记录数据库变化,当进行例程恢复或介质恢复时需要使用重做日志。执行DDL和DML操作时,事务变化会被写到重做日志缓冲区,而在特定时刻LGWR会将重做日志缓冲区内容写入重做日志。 控制文件(Control File):用于记录和维护数据库的物理结构。当装载数据库时,oracle会根据控制文件所记载的信息打开所有数据文件和重做日志,其记录的信息----,数据文件的位置及大小、重做日志文件的位置及大小、数据库名称及创建时间、日志序列号。 文本参数文件-----init.ora,服务器参数文件spfile.ora ------------------------------------------------------ 用户进程和服务器进程:当在客户端运行应用程序时,会启动相应的应用进程,该进程成为用户进程。当连接到oracle server时,oracle在服务器端会为用户派生一个新的进程,该进程为服务器进程。 连接和会话:连接是用户进程到服务器进程的网络通信通道,连接和用户进程是一一对应的;会话是特定用户的连接,连接和会话是一对多的关系,但同一时刻,同一连接对应一个会话。 当使用PFILE是,如果要修改初始化参数,只要手工编辑参数文件就可以,规则如下 1、 在修改或增加参数,若没有,则在文件尾部增加一行 2、 每行只能设置一个参数 3、 字符型参数的值可以用引号引住,数值型不用 4、 如果一个初始化参数有多个值,则用逗号隔开 5、 屏蔽参数用# SPFILE为二进制形式存放,修改其参数值只能用alter system SPFILE和PFILE之间的转换管理 ---CREATE PFILE [=’PFILE_NAME’] FROM SPFILE[=’SPFILE_NAME’] 在mount状态下移动数据文件 用于移动任何表空间数据文件。 1、 关闭并装载数据库 将数据库为mount状态 2、 移动数据文件到目标位置 HOST MOVE D:\DEMO\SYSTEM01.DBF E:\DEM\SYSTEM01.DBF 3、 执行ALTER DATABASE命令 物理移动完数据文件之后,还要使用 ALTER DATABASE RENAME FILE ‘D:\DEMO\SYSTEM01.DBF’ TO ‘E:\DEM\SYSTEM01.DBF’ 4、 打开数据库 ALTER DATABASE OPEN; :用户所拥有的数据库对象的集合。在oracle数据库中,对象是以用户来组织的,用户与方案是一一对应的关系,并且二者名称相同 管理权限 权限,是指执行特定类型,,,命令的权利。 系统权限:它用于控制用户可以执行的一个或一组数据库操作。 对象权限:是指范文其他方案对象的权利,它用于控制用户对其他方案对象的访问。 GRANT| REVOKE system_priv[,system_priv…] TO { user|role|public [,user|role|public]]… [WITH ADMIN OPTION] 系统权限不仅可以被授予用户和角色,也可以被授予用户组public,当将系统权限授予public后,所有用户具有该系统权限。另外,在授予系统权限时,可以带有WITH ADMIN OPTION选项,带有该选项,被授予权限的将用户,角色还可以将相应系统权限授予其他角色,用户。系统权限UNLIMITED TABLESPACE不能授予角色。 在必要的时候,调整这个参数的大小,可以提高数据缓存的命中率,从而大幅度的提高数据库的性能。第二个参数是DB_BLOCK_SIZE。这个参数主要是用来指定数据库在建立时所默认的块大小。如果块设置的比较小,则有可能会发生行链化现象,从而降低数据库的性能;也有可能增加数据库的碎片,浪费表空间的存储空间以及降低数据库的查询性能等等。所以根据需要有时候也要调整这个块大小来改善数据库的性能。第三个参数是SHARED_POOL_SIZE参数。这个参数主要是为那些数据字典缓存和共享SQL语句指定了在SGA里所分配的内存。简单的来说,合理配置这个参数,能够同等的共享SQL语句。调整这个参数,也是一种优化数据库性能的常用手段。第四个参数为SGA_MAX_SIZE参数,这个参数指定了SGA可以动态增长的最大内存。在SQLServer数据库中也有类似的参数。一般来说,在同台数据库服务器中若部署有多个应用服务的话,则往往需要合理配置这个参数来避免多个应用服务之间争用内存。如果这个参数设置的不合适的话,则有时候会导致另外一种应用服务由于没有足够的内存而停止服务。第五个参数为LOG_CHECKPOINT_INTERVAL。这个参数主要用来设置检查点的频率。在每个检查点中,数据库系统执行数据写出,将所有脏块(已经修改还没有保存到硬盘中的数据)写入到数据库中对应的数据文件中。默认情况下, 如果在数据库缓存中有1/4的数据缓冲区是脏缓冲区,则数据库系统会自动执行检查点。另外一个强制的原则就是在进行日志切换时,也会执行检查点。在一些特定的情况下,如建立数据仓库,需要调整这个参数以满足特定场合的需要。 ======================== 六分钟学会创建Oracle表空间的步骤 1、先查询空闲空间 1. select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space; 2、增加Oracle表空间 先查询数据文件名称、大小和路径的信息,语句如下: 1. select tablespace_name,file_id,bytes,file_name from dba_da ta_files; 3、修改文件大小语句如下 1. alter database datafile 2. '需要增加的数据文件路径,即上面查询出来的路径 3. 'resize 800M; 4、创建Oracle表空间 1. create tablespace test 2. datafile '/home/app/oracle/oradata/oracle8i/test01.dbf' si ze 8M 3. autoextend on 4. next 5M 5. maxsize 10M; 6. 7. create tablespace sales 8. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' s ize 800M 9. autoextend on 10. next 50M 11. maxsize unlimited 12. maxsize unlimited 是大小不受限制 13. 14. create tablespace sales 15. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' s ize 800M 16. autoextend on 17. next 50M 18. maxsize 1000M 19. extent management local uniform; 20. unform表示区的大小相同,默认为1M 21. 22. create tablespace sales 23. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' s ize 800M 24. autoextend on 25. next 50M 26. maxsize 1000M 27. extent management local uniform size 500K; 28. unform size 500K表示区的大小相同,为500K 29. 30. create tablespace sales 31. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' s ize 800M 32. autoextend on 33. next 50M 34. maxsize 1000M 35. extent management local autoallocate; 36. autoallocate表示区的大小由随表的大小自动动态改变,大表使用大区小表使 用小区 37. 38. create tablespace sales 39. datafile '/home/app/oracle/oradata/oracle8i/sales01.dbf' s ize 800M 40. autoextend on 41. next 50M 42. maxsize 1000M 43. temporary; 44. temporary创建字典管理临时表空间 45. 46. create temporary tablespace sales 47. tempfile '/home/app/oracle/oradata/oracle8i/sales01.dbf' s ize 800M 48. autoextend on 49. next 50M 50. maxsize 1000M 51. 创建本地管理临时表空间,如果是临时表空间,所有语句中的datafile都换为 tempfile 52. 53. 8i系统默认创建字典管理临时表空间,要创建本地管理临时表空间要加 temporary tablespace关键字 54. 创建本地管理临时表空间时,不得使用atuoallocate参数,系统默认创建 uniform管理方式 55. 56. 为表空间增加数据文件: 57. alter tablespace sales add 58. datafile '/home/app/oracle/oradata/oracle8i/sales02.dbf' s ize 800M 59. autoextend on next 50M 60. maxsize 1000M; 创建本地管理临时Oracle表空间,如果是临时表空间,所有语句中的datafile都换为tempfile8i系统默认创建字典管理临时表空间,要创建本地管理临时表空间要加temporary tablespace关键字创建本地管理临时表空间时,不得使用atuoallocate参数,系统默认创建uniform管理方式 为表空间增加数据文件: 1. alter tablespace sales add 2. datafile '/home/app/oracle/oradata/oracle8i/sales02.dbf' s ize 800M 3. autoextend on next 50M 4. maxsize 1000M; 5、更改自动扩展属性: 1. alter database datafile 2. '/home/app/oracle/oradata/oracle8i/sales01.dbf', 3. '/home/app/oracle/oradata/oracle8i/sales02.dbf' 4. '/home/app/oracle/oradata/oracle8i/sales01.dbf 5. autoextend off; ********************************************************************** 1TB=1024GB(吉字节) 1GB=1024MB(兆字节) 1MB=1024KB(千字节) 1KB=1024byte(字节) 1byte=8bit(位) ================= /* sys和system用户的区别 【system】用户只能用normal身份登陆em。 【sys】用户具有“SYSDBA”或者“SYSOPER”权限,登陆em也只能用这 两个身份,不能用normal。 “SYSOPER”权限,即数据库操作员权限,权限包括: 开数据库服务器 关闭数据库服务器 打 备份数据库 恢复数据库 日志归档 会话限制 “SYSDBA”权限,即数据库管理员权限,权限包括: 打开数据库服务器 关闭数据库服务器 备份数据库 恢复数据库 日志归档 会话限制 管理功能 创建数据库 normal 、sysdba、 sysoper有什么区别 normal 是普通用户 另外两个,你考察他们所具有的权限就知道了 sysdba拥有最高的系统权限 sysoper主要用来启动、关闭数据库,sysoper 登陆后用户是 public sysdba登陆后是 sys SQL> conn / as sysdba 已连接。 SQL> grant sysoper to test; 授权成功。 SQL> conn test/test as sysoper; 已连接。 SQL> show user USER 为"PUBLIC" SQL> conn test/test as sysdba 已连接。 SQL> show user USER 为"SYS" SQL> dba和sysdba的区别 dba、sysdba这两个系统角色有什么区别呢 在说明这一点之前我需要说一下oracle服务的创建过程 ?创建实例 ?启动实例 ?创建数据库(system表空间是必须的) 启动过程 ?实例启动 ?装载数据库 ?打开数据库 sysdba,是管理oracle实例的,它的存在不依赖于整个数据库完全启动, 只要实例启动了,他就已经存在,以sysdba身份登陆,装载数据库、打 开数据库 只有数据库打开了,或者说整个数据库完全启动后,dba角色才有了存在 的基础~ */ 1) 2) PL/SQL块的结构 PROCEDURE give_raise IS DECLARE Cutoff_date DATE BEGIN Cutoff_date := SYSDATE-90 UPDATE emp SET sal = sal * 1.1 WHERE hiredate < cutoff_date; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; 块头:除了匿名块,所有的PL/SQL块都由一个块头开始 { {PROCEDURE | FUNCTION} name IS | } 声明部分:声明在块中使用的变量,定义使用在块中的游标、类型、本地过程和函数。变量的使用范围是当前块以及当前块包括的部分。 3) Oracle的日期函数 TO_DATE(„STR?) TO_CHAR(„DATE?) ADD_MONTHS(date time, n) LAST_DAY(D):返回日期d中月份中的最后一天的日期。 MONTHS_BETWEEN(D1,D2):返回两个日期指间的月数。如果 两个日期代表月的同一天,或者代表他们各自月的最后一天, 则返回一个整数,否则,MONTHS_BETWEEN将返回一个分数 值,且月天数按31天计算。 NEXT_DAY(D, STRING);计算特定天下一次出现的日期 NVL(exp1, exp2):判断exp1是否为空,若为true,返回exp2. 4) 两阶段提交: 1、 系统A的程序为当前的分布式事务发布一个commit。这更 新了系统B和系统C中的表。系统A将作为提交过程的协 调者,协调系统B和系统C上的DBMS软件的活动。 2、 系统A向系统B和系统C发送get ready消息,并在自己的 事务日志中记录下这条消息。 3、 当系统B或系统C上的DBMS收到get ready消息,必须做 好提交或者撤销当前事务的准备。如果DBMS进入到“准 备提交”状态,就会向系统A回答yes,并记录在其本地事 务日志中,如果不能进入,就回答no 4、 系统A等待对get ready消息的回答。如果所有回答都是yes, 系统A向系统B和系统C发送commit消息,并在其事务日 志中记录这个决定。如果回答当中任何一个是no,或者如果 不是所有的回答都在某个规定时间内收到,系统A会给两 个系统发送撤销消息,并在其事务日志中记录这个决定。 5、 当系统B或系统C上的DBMS收到commit或者rollback消 息时,就必须按照要求进行处理。当DBMS在第三步想get ready消息回答yes时,它就放弃自主决定事务命令的功能。 DBMS提交或者撤销被请求的部分事务,在事务日志中写下 commit或rollback消息,并向系统A返回ok消息。 6、 当系统A收到所有ok消息,它知道事务已经被提交或撤销, 并向程序返回适当的sqlcode值, 5) 应用程序服务器,为执行应用逻辑提供了一个平台,网站的internet端组件和it端组件之间的中介者 6) 数据仓库的组成---装载性能和运行时间性能之间的平衡 数据仓库装载工具:一组程序,用来从公司事务处理系统(关系数据库、小型机、小型计算机的文件和遗留数据库)中抽取数据,处理数据并把数据装载进数据仓库。这个处理过程一般涉及到事务数据的清理、过滤、重新格式化及把数据批量装进数据仓库。 数据仓库:经过最优化处理的关系数据库,用于存储大量数据、 高速装载批量数据和支持负责商业查询。 数据分析工具:用于执行统计和时间序列分析,进行“如果„„ 将会怎么样”的分析。并以表格的形式提交结果。 7) 存储过程procedure 8) 约束的描述 9) 共享锁:当事务想要从数据库中读取数据的时候,DBMS使用 这种锁,另一种并发事务也可能在同一数据上获得共享锁,从 而允许事务读取数据 独占锁:当事务想要更新数据库中的数据时,DBMS使用这种 锁。当事务在某一数据上使用独占锁时候,其他事务不能在该 数据上获得任何类型的锁。 10) 事务模型: Sybase事务模型 BEGIN TRANSACTION COMMIT TRANSACTION SAVE TRANSACTION:在事务的中间建立一个保存点,该保存 点名在语句中指定。 ROLLBACK TRANSACTION 11) Transaction:一条或多条SQL语句序列,它们组合在一起形成 一个逻辑工作单元。形成事务的SQL语句通常紧密相关并执行 相互依赖的一组操作。事务中的每条语句通常执行任务的一部 分,它们全部组合起来才能完成任务。 12) 大容量装载:sql语句块 | exists 13) 多行insert语句:insert into table (col1, col2„„) Select expression 14) 查询表达式:允许的操作链接(join)、并(union)、差(difference), 取两表中,返回第一个表减去第二个表记录之后所剩记录、交 (intersect) 列出其订单超过$30000或现货量超过#30000的所有产品(union) 列出其订单超过$30000且现货量超过#30000的所有产品(intersect) 列出其订单超过$30000但销售价格小于$1000的所有产品 (difference expect) 15) 记录值比较:对两个结构化记录的比较,从首个字段值开始比 较。 16) 记录值子查询:记录值子查询不返回一个数据项,而是一行数 据项,可以在SQL2表达式中使用这行数据项并与其他记录相 比较。 ;列出最高单价产品的所有订单的订单号和取得日期 SELECT order_num, order_date FROM ORDERS WERE (MFR, PRODUCT) = (SELECT MFR_ID, PRODUCT_ID FROM PRODUCTS WHERE Price = (SELECT MAX(PRICE) FROM PRODUCTS)) 17) NULLIF (value, newValue) 18) COLAESCE表达式:和case功能类似,但更简洁,处理null 值 coalesce (value1, value2, 0000) 19) CASE表达式:当DBMS遇到一个CASE表达式时,它计算第一 个搜索条件,如果为true,那么CASE表达式的值是第一个结果 表达式的值。如果第一个搜索条件的结果不是true,DBMS继 续第二个搜索条件,依次递归。 20) CAST表达式:可显示的要求DBMS使用CAST表达式在数据类 型中进行转换,CAST语法: CAST 值表达式 AS 数据类型 Select name, cast rep_office as varchar, hier_data as varchar From table1. 21) ,,,查询处理原则为了生成select语句的查询结果: 1、 如果语句是select语句的一个union,把第二步到第七步应用到每条语句中, 以生成它们的各个查询结果。 2、 形成在from子句中命名的表的积。如果from子句命名了一个表,积就是那个 表。 3、 如果有一条where子句,应用它的搜索条件到积表的每一条记录,保留搜索条 件为true的那些记录(去掉结果为false或null的那些结果)。如果having子句 包含一个子查询,对于要测试的每一条记录,执行这个子查询。 4、 如果有一条group by子句,安排积表中剩余的记录进到记录组中,以便在每一 组中的记录在所有分组的字段中有同样的值。 5、 如果有一条having子句,应用它的搜索条件到每一组中,保留其搜索条件为true 的那些组,如果having子句包含一个子查询,对于正被测试的每个记录组,都 执行这个子查询。 6、 对于剩下的每一记录(或记录组),计算在选择列表中每一项的值。对于简单的 字段引用,使用在当前记录中的字段的值。对于字段函数,如果指定了group by, 使用当前记录组作为它的参数,否则,使用整个记录集。 7、 如果指定了select distince,消除所生成的查询结果的任何重复的记录。 8、 如果这个语句是select语句的一个union,把每个语句的查询结果合并到一个 查询结果表中。消除重复的记录,除非指定了union all. 9、 如果有一个order by子句,按指定的那样排序查询结果。 22) 连接(using):select * from tableA inner join tableB using(city, age) **using子句指定了用逗号分隔的匹配字段名列表,其中,匹配字段名在两个表中必须是相同的。虽然完全等同于ON子句,但是更紧凑,因而更容易理解。当然,如果匹配字段在tableA和tableB表中有不同的名称,那么必须使用具有相等测试的on子句或where子句。如果连接不涉及匹配字段的相等,那么,也必须使用on子句。 如:选择女孩/男孩对时,其中要求女孩比男孩大,则必须使用on子句来指定这个连接:select * from GIRL inner join BOYS On (GIRLS.city = BOYS.city And GIRLS.age > BOYS.age) 23) 连接,是对两个表的数据进行更通用的组合(笛卡尔积或积)的 一种特殊情况。 24) 可以使用自连接来创建把一个表关联到其自身的多表查询;可 以在from子句中使用表的别名来简化限定字段名,并允许自连 接中的明确的字段引用。 25) count(*) 与count(col),区别是,前者为当前表所有记录条数; 后者为当前列所有非空记录条数。 26) between and,包含左右边界。 27) group by子句可以指定多个列,只需要将多个列的列名用逗号 隔开即可。指定多个分组规则以后,数据库系统将按照定义的 分组顺序来对数据进行逐层分组,首先按照第一个分组列进行 分组,然后,在每个小组内按照第二个分组列再次分组„„逐 层分组,从而实现“组中组”。查询结果集是以最末一级分组 来进行输出的。 28) 聚合函数不能在where子句中使用,只能在having子句代替。 29) ROW_NUMBER VOER (排序规则):计算每一行数据在结果集中 的行号(从1开始计数) exp: Select * from ( Select row_number over(order by FSalary desc) as rownum, ………… ) as a Where a.rownum >=3 and a.rownum <=5 6)oracle中定义表别名的时候不能使用as。 7)数据库分页: 假设每一页显示的数据条数为PageSize,当前页数为currentIndex,那么只要查询从PageSize*CurrentIndex开始的PageSize条数据得到的结果就是当前页中的数据;当用户点击【上一页】,CurrentIndex设置为CurrentIndex-1,然后重新检索;当用户点击【下一页】,将CurrentIndex设置为CurrentIndex+1,然后重新检索;点击【首页】时,将CurrentIndex设置为0,重新检索;当点击【末页】时,将CurrentIndex设置为“总条数/PageSize”,然后重新检索。 //*************************** int CurrentIndex = 0; PageSize = 10; Private void btnFirstButtonclick() { CurrentIndex = 0; DoSearch(); } Pirvate void btnEndButtonClick() { CurrentIndex=GetTotalCount()/PageSize; DoSearch(); } Private void btnPreviousButtonclick() { CurrentIndex = CurrentIndex - 1; DoSearch(); } Pirvate void btnNextButtonClick() { CurrentIndex = CurrentIndex + 1; DoSearch(); } Private int GetTotalCount() { ResultSet rs = ExecuteSQL(“select count(*) as totalcount from ta”); Return rs.getInt(“totalcount”); } Private void DoSearch() { String startIndex=(Current*PageSize).ToString(); String size = PageSize.ToString(); ResultSet rs = ExecuteSQL(); DisplayResult(rs); } 8)distinct是针对于整个结果集进行重复性抑制 9)在mysql中,当用‘+’链接两个字段,mysql会尝试将字段值转换为数字类型(如果转换失败则认为字段值为0),然后进行字段的加法运算。Mysql会尝试将加号两端的字段尝试转换为数字类型,如果转换失败,则认为字段值为0. 10)union运算符默认情况下合并两个查询结果的重复值,而union all则返回所有的记录而不管他们是否唯一。 ?范围分区 ?Hash分区(散列分区) ?复合分区 下面将以实例的方式分别对这三种分区方法来说明分区表的使用。为了测试方便,我 们先建三个表空间。 以下为引用的内容: create tablespace dinya_space01 datafile ’/test/demo/oracle/demodata/dinya01.dnf’ size 50M create tablespace dinya_space01 datafile ’/test/demo/oracle/demodata/dinya02.dnf’ size 50M create tablespace dinya_space01 datafile ’/test/demo/oracle/demodata/dinya03.dnf’ size 50M 1.1. 分区表的创建 1.1.1. 范围分区 范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数 据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。 需求描述:有一个物料交易表,表名:material_transactions。该表将来可能有千万级的数据记录数。要求在建该表的时候使用分区表。这时候我们可以使用序号分区三个区,每个区中预计存储三千万的数据,也可以使用日期分区,如每五年的数据存储在一个分区上。 根据交易记录的序号分区建表: 以下为引用的内容: SQL> create table dinya_test 2 ( 3 transaction_id number primary key, 4 item_id number(8) not null, 5 item_description varchar2(300), 6 transaction_date date not null 7 ) 8 partition by range (transaction_id) 9 ( 10 partition part_01 values less than(30000000) tablespace dinya_space01, 11 partition part_02 values less than(60000000) tablespace dinya_space02, 12 partition part_03 values less than(maxvalue) tablespace dinya_space03 13 ); Table created. 建表成功,根据交易的序号,交易ID在三千万以下的记录将存储在第一个表空间dinya_space01中,分区名为:par_01,在三千万到六千万之间的记录存储在第二个表空间: dinya_space02中,分区名为:par_02,而交易ID在六千万以上的记录存储在第三个 表空间dinya_space03中,分区名为par_03. 根据交易日期分区建表: 以下为引用的内容: SQL> create table dinya_test 2 ( 3 transaction_id number primary key, 4 item_id number(8) not null, 5 item_description varchar2(300), 6 transaction_date date not null 7 ) 8 partition by range (transaction_date) 9 ( 10 partition part_01 values less than(to_date(’2006-01-01’,’yyyy-mm-dd’)) tablespace dinya_space01, 11 partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’)) tablespace dinya_space02, 12 partition part_03 values less than(maxvalue) tablespace dinya_space03 13 ); Table created. 这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候, 系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中。 当然,我们还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date), 分区条件中的值也做相应的改变,请读者自行测试。 1.1.2. Hash分区(散列分区) 散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放 在指定的三个表空间中: 以下为引用的内容: SQL> create table dinya_test 2 ( 3 transaction_id number primary key, 4 item_id number(8) not null, 5 item_description varchar2(300), 6 transaction_date date 7 ) 8 partition by hash(transaction_id) 9 ( 10 partition part_01 tablespace dinya_space01, 11 partition part_02 tablespace dinya_space02, 12 partition part_03 tablespace dinya_space03 13 ); Table created. 建表成功,此时插入数据,系统将按transaction_id将记录散列地插入三个分区中, 这里也就是三个不同的表空间中。 1.1.3. 复合分区 有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,然后每个分区中的数据分三个子分区, 将数据散列地存储在三个指定的表空间中: 以下为引用的内容: SQL> create table dinya_test 2 ( 3 transaction_id number primary key, 4 item_id number(8) not null, 5 item_description varchar2(300), 6 transaction_date date 7 ) 8 partition by range(transaction_date)subpartition by hash(transaction_id) 9 subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03) 10 ( 11 partition part_01 values less than(to_date(’2006-01-01’,’yyyy-mm-dd’)), 12 partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’)), 13 partition part_03 values less than(maxvalue) 14 ); Table created. 该例中,先是根据交易日期进行范围分区,然后根据交易的ID将记录散列地存储在三 个表空间中。
/
本文档为【Oracle数据库学习】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索