掌握分区表的创建方法,掌握各种分区方式的使用场景。
- 本实验使用3个表空间:USERS,USERS02,USERS03。在表空间中创建两张表:订单表(orders)与订单详表(order_details)。
- 使用你自己的账号创建本实验的表,表创建在上述3个分区,自定义分区策略。
- 你需要使用system用户给你自己的账号分配上述分区的使用权限。你需要使用system用户给你的用户分配可以查询执行计划的权限。
- 表创建成功后,插入数据,数据能并平均分布到各个分区。每个表的数据都应该大于1万行,对表进行联合查询。
- 写出插入数据的语句和查询数据的语句,并分析语句的执行计划。
- 进行分区与不分区的对比实验。
【示例8-11】在主表orders和从表order_details之间建立引用分区 在study用户中创建两个表:orders(订单表)和order_details(订单详表),两个表通过列order_id建立主外键关联。orders表按范围分区进行存储,order_details使用引用分区进行存储。 创建orders表的部分语句是:
SQL> CREATE TABLE orders
(
order_id NUMBER(10, 0) NOT NULL
, customer_name VARCHAR2(40 BYTE) NOT NULL
, customer_tel VARCHAR2(40 BYTE) NOT NULL
, order_date DATE NOT NULL
, employee_id NUMBER(6, 0) NOT NULL
, discount NUMBER(8, 2) DEFAULT 0
, trade_receivable NUMBER(8, 2) DEFAULT 0
)
TABLESPACE USERS
PCTFREE 10 INITRANS 1
STORAGE ( BUFFER_POOL DEFAULT )
NOCOMPRESS NOPARALLEL
PARTITION BY RANGE (order_date)
(
PARTITION PARTITION_BEFORE_2016 VALUES LESS THAN (
TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 1
STORAGE
(
INITIAL 8388608
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
NOCOMPRESS NO INMEMORY
, PARTITION PARTITION_BEFORE_2017 VALUES LESS THAN (
TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
'NLS_CALENDAR=GREGORIAN'))
NOLOGGING
TABLESPACE USERS02
...
);
创建order_details表的部分语句如下:
SQL> CREATE TABLE order_details
(
id NUMBER(10, 0) NOT NULL
, order_id NUMBER(10, 0) NOT NULL
, product_id VARCHAR2(40 BYTE) NOT NULL
, product_num NUMBER(8, 2) NOT NULL
, product_price NUMBER(8, 2) NOT NULL
, CONSTRAINT order_details_fk1 FOREIGN KEY (order_id)
REFERENCES orders ( order_id )
ENABLE
)
TABLESPACE USERS
PCTFREE 10 INITRANS 1
STORAGE ( BUFFER_POOL DEFAULT )
NOCOMPRESS NOPARALLEL
PARTITION BY REFERENCE (order_details_fk1)
(
PARTITION PARTITION_BEFORE_2016
NOLOGGING
TABLESPACE USERS --必须指定表空间,否则会将分区存储在用户的默认表空间中
...
)
NOCOMPRESS NO INMEMORY,
PARTITION PARTITION_BEFORE_2017
NOLOGGING
TABLESPACE USERS02
...
)
NOCOMPRESS NO INMEMORY
);
以下样例查看表空间的数据库文件,以及每个文件的磁盘占用情况。
$ sqlplus system/123@pdborcl
SQL>SELECT tablespace_name,FILE_NAME,BYTES/1024/1024 MB,MAXBYTES/1024/1024 MAX_MB,autoextensible FROM dba_data_files WHERE tablespace_name='USERS';
SQL>SELECT a.tablespace_name "表空间名",Total/1024/1024 "大小MB",
free/1024/1024 "剩余MB",( total - free )/1024/1024 "使用MB",
Round(( total - free )/ total,4)* 100 "使用率%"
from (SELECT tablespace_name,Sum(bytes)free
FROM dba_free_space group BY tablespace_name)a,
(SELECT tablespace_name,Sum(bytes)total FROM dba_data_files
group BY tablespace_name)b
where a.tablespace_name = b.tablespace_name;
- autoextensible是显示表空间中的数据文件是否自动增加。
- MAX_MB是指数据文件的最大容量。
-
Oracle地址:202.115.82.8 用户名:system,hr,你的用户名 , 密码123, 数据库名称:pdborcl,端口号:1521
-
test3.sql
- 请按时完成实验,过时扣分。
- 查询语句及分析文档
必须提交
到:你的Oracle项目中的test3目录中。 - 上交后,通过这个地址应该可以打开你的源码:https://github.com/你的用户名/oracle/tree/master/test3
- 实验分析及结果文档说明书用Markdown格式编写。
- 实验独立完成,有详细的分析文档,文档中写明自己的用户名。(总分20分)
- 表创建正确(总分10分)
- 分区策略设计正确(总分20分)
- SQL语句正确(总分20分)
- 执行计划分析正确(总分30分)