Oracle表空间 表分区 会话

内容包括
  • 表空间相关操作
  • 几个简单的时间截取示例
  • 固定表分区与自动表分区
  • 表分区索引的创建示例
  • Oracle会话的基本操作
-- 查看表空间大小
SELECT FILE_NAME       as 数据文件,
       TABLESPACE_NAME as 表空间名称,
       AUTOEXTENSIBLE  as 自动扩展,
       STATUS          as 状态,
       MAXBYTES        as 可扩展最大值,
       USER_BYTES      as 已使用大小,
       INCREMENT_BY    as 自动扩展增量
  FROM dba_data_files
 where TABLESPACE_NAME like '%ETONG%';

-- 扩展空间,将数据文件扩大至5000MB
alter database datafile 'D:\DataBase\Test.DBF' resize 5000m;

-- 自动增长,表空间不足时增加200MB,最大扩展5000MB
alter database datafile 'D:\DataBase\Test.DBF' autoextend on next 200m maxsize 5000m;

-- 扩展无限大空间
alter database DATAFILE 'D:\DataBase\Test.DBF' autoextend on maxsize unlimited;

-- 时间条件范例
select t.*, sysdate
  from dxp_persistent_pre t
 where t.IN_TIME > to_date('2018', 'yyyy');

-- 程序传进来的时间格式  转成timestamp
SELECT TO_TIMESTAMP('2019-03-08 15:26:35.178', 'YYYY-MM-DD HH24:MI:SS.FF') aa
  FROM dual;

-- 截取时间
SELECT substr('2019-03-08 15:26:35.178', 0, 10) aaa FROM dual;

-- ###############  分区 ####################
-- 显示数据库所有分区表的信息:
select * from DBA_PART_TABLES where owner = 'ETONG';

-- 显示当前用户可访问的所有分区表信息:
select * from ALL_PART_TABLES where owner = 'ETONG';

-- 显示分区列 显示数据库所有分区表的分区列信息:
select * from DBA_PART_KEY_COLUMNS where owner = 'ETONG';

-- 显示当前用户可访问的所有分区表的分区列信息:
select * from ALL_PART_KEY_COLUMNS where owner = 'ETONG';

-- 显示表分区信息 显示数据库所有分区表的详细分区信息:
select table_owner, table_name, partition_name, high_value
  from DBA_TAB_PARTITIONS
 where table_owner = 'ETONG'
and table_name = 'DXP_PERSISTENT_PRE';

-- 创建固定分区
-- DXP_PERSISTENT_PRE_TEST: 分区的表 建表时需要事先创建默认分区
-- A_MAX: 默认分区(有范围的分区之外的唯一分区)
-- at: 该分区的上限值  `2019-06-24 00:00:00`
-- PAR_20190624: 分区名
alter table DXP_PERSISTENT_PRE SPLIT PARTITION PAR_MAX at(TIMESTAMP' 2019-06-21 00:00:00') INTO(PARTITION PAR_20190621, PARTITION PAR_MAX);

-- 一般分区索引
drop index ptr_mspt_index;
create index ptr_mspt_index on DXP_PERSISTENT_PRE (BS_FEATURE ASC) local;
  
-- 分区主键索引
-- ALTER TABLE 表 ADD CONSTRAINT 主键名 PRIMARY KEY (主键,分区键) USING INDEX LOCAL
alter table DXP_PERSISTENT_PRE
    drop constraint PK_DXP_PERSISTENT_PRE cascade;
ALTER TABLE DXP_PERSISTENT_PRE
    ADD CONSTRAINT PK_DXP_PERSISTENT_PRE PRIMARY KEY (UUID, IN_TIME) USING INDEX LOCAL;

-- 查询一个分区
select count(*) from DXP_PERSISTENT_PRE partition(PAR_20190622);

-- 删除表分区. 
-- 未建立本地索引或分区索引.索引将不可用
alter table DXP_PERSISTENT_PRE drop partition SYS_P2547;

-- 清空表分区
-- delete删除清楚数据. 未清除占用空间
-- tuncate删除的话如果索引不是本地索引或不是分区索引,那么索引将失效,需要重新rebuild
ALTER TABLE DXP_PERSISTENT_PRE  TRUNCATE PARTITION SYS_P3200 DROP STORAGE;

-- 查看表索引状态
-- 状态不可用就不能插入数据
-- N/A        :说明这个是分区索引需要查user_ind_partitions或者user_ind_subpartitions来确定每个分区是否可用;
-- VAILD      :说明这个索引可用;
-- UNUSABLE   :说明这个索引不可用;
-- USABLE     :说明这个索引的分区是可用的。
select owner, table_name, index_name, status
from dba_indexes
where owner = 'tablespace_name'
  and table_name = 'DXP_PERSISTENT_PRE';

-- 创建表分区自动分区
create table DXP_PERSISTENT_PRE
(
    UUID         VARCHAR2(60) not null,
    IN_TIME      TIMESTAMP    not null,
    constraint PK_DXP_PERSISTENT_PRE primary key (UUID, IN_TIME) USING INDEX LOCAL;

)
    partition by range (IN_TIME)
    INTERVAL(numtodsinterval(1, 'DAY'))
(
    partition part20190621 values less than (TIMESTAMP '2019-06-21 00:00:00')
--         tablespace tbs_zba_czc --表空间
        pctfree 10             --预留的空间大小,10%
        initrans 1             --的是一个 block 上初始预分配给并行交易控制的空间
        maxtrans 255           --如果initrans 不够了,自动扩展,最大这个值
);


-- 查询会话占用
select l.session_id, s.sid, s.serial#, o.owner, o.object_name, s.osuser,s.logon_time
  from v$locked_object l
  left join dba_objects o
    on l.object_id = o.object_id
  left join v$session s
    on l.session_id = s.sid;
    
-- 杀掉会话
alter system kill session 'sid,serial#';

-- 重建索引
alter index PK_DXP_PERSISTENT_PRE rebuild;

你可能感兴趣的:(Database,Oracle,表空间,会话,表分区,索引)