Skip to content

Latest commit

 

History

History
140 lines (123 loc) · 4.75 KB

test3.md

File metadata and controls

140 lines (123 loc) · 4.75 KB

实验3:创建分区表

实验目的:

掌握分区表的创建方法,掌握各种分区方式的使用场景。

实验内容:

  • 本实验使用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

  • ssh [email protected]

  • test3.sql

  • SQL-DEVELOPER修改用户的操作界面:

  • sqldeveloper授权对象的操作界面:

实验注意事项,完成时间: 2019-10-23日前上交

  • 请按时完成实验,过时扣分。
  • 查询语句及分析文档必须提交到:你的Oracle项目中的test3目录中。
  • 上交后,通过这个地址应该可以打开你的源码:https://github.com/你的用户名/oracle/tree/master/test3
  • 实验分析及结果文档说明书用Markdown格式编写。

评分标准

  • 实验独立完成,有详细的分析文档,文档中写明自己的用户名。(总分20分)
  • 表创建正确(总分10分)
  • 分区策略设计正确(总分20分)
  • SQL语句正确(总分20分)
  • 执行计划分析正确(总分30分)