oracle 同义词,表空间,表分区

同义词:synonym
私有同义词:
一般普通用户自己建立的同义词,用于创建这需要create synonym权限
grant create synonym to scott;
create synonym abc for emp;

公有同义词: 一般是由DBA创建,所有的用户都可以使用,创建者需要create public synonym权限
实现:一个用户,可以访问其他用户的表。公有同义词实现。
不同的数据库实例,表也可以使用同义词实现查询。
grant create public synonym to scott; --授权创建公有同义词
create public synonym xyz for emp;
drop public synonym xyz;

–查看当前用户所有的权限
select * from session_privs;

–删除表,实现删除撤销。
create synonym xyz for emp1;
drop table emp1;
select * froom xyz; --已删除的表,同义词转换不再有效。但同义词还是存在的
flashback table emp1 to before drop; --回退删除之前的表
select * from xyz; --可以查询到对应表数据

–用户登录sql
conn 用户名/密码@数据库实例 as 用户身份;
conn sys/123456@orcl as sysdba;

dblink: oracle的dblink用于对不同的数据库实例或者远程进行链接。创建连接到指定实例数据库的快捷方式
语法:
create public database link linkname
connect to username identified by passwd using
(DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ip )(PORT=端口 ))) (CONNECT_DATA=(SERVICE_NAME=要连接的数据库实例名 )) );

使用:
select * from sys_user@linkname; //查询linkname指定数据库实例的sys_user表数据。

表空间与临时表空间
临时空间,顾名思义,是在执行执行包含排序的算法过程中使用的临时空间,会释放。存储sql临时运算的结果。
表空间:数据库的逻辑区域,在数据库中一直存在,不会自动丢失。

创建表空间
–创建临时表空间
create temporary tablespace zcdb_temp
tempfile ‘D:\oracle\datafile\zcdb_temp.dbf’
size 1024m
autoextend on;
next 50m maxsize 20480m
extent management local; --区间管理方式,便于提高分区效率
–创建数据表空间
create tablespace zcdb
tempfile ‘D:\oracle\datafile\zcdb.dbf’
size 1024m
autoextend on
next 50m maxsize 20480m
extent management local; --区间管理方式,便于提高分区效率

创建用户并指定表空间
create user zcdb indetified by zcdb
default tablespace zcdb
temporary tablespace zcdb_temp;

给用户授权
grant dba to zcdb;

创表
create table a( name varchar2(20));

表类型:
堆表
分区表 表>2G

OLTP和OLAP
在互联网时代,海量数据的存储与访问成为系统设计与使用的瓶颈问题,对海量数据处理,按照使用场景,
主要分为两种类型:
联机事务处理(OLTP)
联机分析处理(OLAP)
联机事务处理: 也称为面向交易的处理系统,其基本特征是原始数据可以立即传送到计算中心进行处理,并在很短时间内
给出处理结果。
联机分析处理:是指通过多维的方式对数据进行分析、查询和报表,可以同数据挖掘工具、统计分析工具配合使用,增强
决策分析能力。

分库分表,减小数据库压力(分片):1访问频繁+2数据量大>10G(单表数据)

无论水平和垂直拆分,都有很多共通的缺点:
分布式事务问题解决方案:
1 例如业务逻辑复杂时,使用SOA做通用服务,在Service层上做多个切面,配置多个事务。
2 例如数据量大且分析逻辑复杂时,使用缓冲库(中间库),缓存表等数据库设计做出来
3 例如要求实时性非常高且数据信息、业务逻辑简单单一,使用第三方数据通信组件,例如消息队列做事务的回调服务,
或者使用zookeeper建立分布式锁进行数据同步,或者使用直连的Netty进行通信,类似WebService、RestFual等直接请求。

跨节点Join的问题,跨节点合并、排序、分页等处理数据的问题
1 通用方案是把数据组织好以后放到缓存中去,定时或者实时进行同步
2 如果要求实时性不是特别高,那么也可以使用中间库的手段去解决

多数据源管理问题
1 使用类似MyCat的代理平台,管理多个数据源
2 在每个应用程序模块中配置管理自己所需要的一个(或多个)数据源,直接访问各个数据库,在模块内完成数据的整合。

分区表(逻辑表不变,分多个数据文件,分别存储表中的每部分内容)
表分区是日常开发中最常用的技术,主要针对于大数据量、频繁查询数据等需求,有了表分区,我们可以对表进行区间的拆分
和组织,提高查询的效率。一般来讲,oracle表分区的一个区间数据最好不大于500W条,也就是说500W条数据左右可以划分
为一个区间,根据实际业务需求和表分区的性能而定。

表分区:在创建表时,就定义好的。(不是指表数据量大时,再抽取数据分到,多个表的手段)
range 分区,安装区域进行分区,分区一定是在create table的时候直接指定的

create table sale(
produce_id varchar2(5),
sale_count number(10,2)
)

partition by range(sale_count) --分区条件
(
partition p1 values less than(1000), --p1分区名称,sale_count小于1000放入p1分区
partition p2 values less than(2000), --p2分区名称,sale_count小于2000放入p2分区
partition p3 values less than(3000) --p3分区名称,sale_count小于3000放入p3分区
);

–查看所有用户,表的分区情况
select * from user_tab_partitions;

–查看指定表的,分区情况
select * from sale partition(p1);
select * from sale partition(p2);
select * from sale partition(p3);

–扩展分区
alter table sale add partition p4 values less than (maxvalue); //maxvalue表示无限大数值
–删除分区
alter table sale drop partition p4;

–跨分区操作设置
alter table sale enable row movement;

分区索引:
分区之后虽然可以提高查询的效率(减小查询数据范围,提升查询效率)。但也仅仅是提高了数据的范围,所以
我们在有必要的情况下,需要建立分区索引,从而进一步提高效率。
分区索引大体分俩类:
1 local: 在每个分区上建立索引
语法:
create index idx_count on sale(sale_count) local;
注意: 在分区上建立索引一定是分区字段
2 global: 一种是在全局上建立索引,这种方式分不分区都一样,一般不使用。

  前缀索引:自定义索引

–查看分区索引
select * from user_ind_partitions;

普通表数据怎么实现分区表转换?
将普通表数据导入一个新的分区表中。

hash分区:
复合分区:

间隔分区:
Interval Partitioning 是一种分区自动化的分区,可以指定时间间隔进行分区,这是oracle11g的新特性,这个功能在 实际的工作中也非常常用。

Interval Partitioning,一直是oracle数据库引以为荣的一项技术,正是分区的存在让oracle高效的处理海量数据成为可能。

Interval Partitioning 实际上是由range分区引申的,最终实现了range分区的自动化。
语法:
create table interval_sale(
sid int,
sdate timestamp
)
partition by range(sdate)
interval(numtoyminterval(1,‘MONTH’)) --numtoyminterval()时间递增函数,一个月递增一次
(
partition p1 values less than (TIMESTAMP ‘2014-02-01 00:00:00.00’) --2014-02-01之前为一个分区p1,
–之后每隔一个月自动创建一个分区
)

INSERT INTO interval_sale values(1,TO_TIMESTAMP(‘2014-01-07 00:00:00.00’,‘YYYY-MM-DD HH24:MI:SS.FF’));
INSERT INTO interval_sale values(1,TO_TIMESTAMP(‘2014-02-07 00:00:00.00’,‘YYYY-MM-DD HH24:MI:SS.FF’));
INSERT INTO interval_sale values(1,TO_TIMESTAMP(‘2014-03-07 00:00:00.00’,‘YYYY-MM-DD HH24:MI:SS.FF’));
INSERT INTO interval_sale values(1,TO_TIMESTAMP(‘2015-03-07 00:00:00.00’,‘YYYY-MM-DD HH24:MI:SS.FF’));

select * from user_tab_partitions; --查看所有用户,表的分区情况
select * from interval_sale partition(p1); --查看指定表的,指定分区的数据信息

思考:多表join,单表数据量大,实现高效查询?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值