schema: is collecton of database objects that owned by particular user
1、表
堆表:heap table
簇表:cluster; 簇:一堆, 默认索引簇
create cluster dept(deptid number) size 7000;
create index dept_idx on cluster dept;
select * from dba_clusters;
select * from dba_segments where segment_name='DEPT';
create table emp(id number,name varchar2(20),deptid number) cluster dept(deptid);
select * from dba_segments where segment_name='EMP';
insert into emp values(1,'name1',1);
insert into emp values(2,'name2',2);
select dbms_rowid.rowid_block_number(rowid),dbms_rowid.rowid_row_number(rowid),id from emp;
begin
for i in 1..10000 loop
insert into emp values(i,'name1',1);
end loop;
for i in 10001..20000 loop
insert into emp values(i,'name1',2);
end loop;
for i in 20001..30000 loop
insert into emp values(i,'name1',2);
end loop;
end;
commit;
create table emp1(id number,name varchar2(20),deptid number);
declare
d number;
begin
for i in 1..30000 loop
d:=mod(i,3)+1;
insert into emp1 values(i,'name1',d);
end loop;
end;
commit;
select * from emp1 where deptid=1;
select * from emp where deptid=1;
哈希簇
create cluster dept1(deptid number(10,0)) size 7000 hash is deptid hashkeys 100;
索引组织表:index organized table
drop table emp1;
drop cluster dept including tables;
create table emp(id number,name varchar2(20),deptid number);
create index emp_idx on emp(id);
begin
for i in 1..100000 loop
insert into emp values(i,'name1',1);
end loop;
end;
commit;
create table emp1(id number primary key,name varchar2(20),deptid number) organization index;
[注]要主键
begin
for i in 1..100000 loop
insert into emp1 values(i,'name1',1);
end loop;
end;
commit;
临时表:temporary table
drop table emp;
drop table emp1;
create table emp(id number,name varchar2(20),deptid number);
create global temporary table emp1(id number,name varchar2(20),deptid number) ;
on commit delete rows|preserve rows;
select * from dba_tables where table_name like 'EMP%'
生成redo量
记录redo量 1
select a.sid,b.name,a.value
from v$sesstat a join v$statname b
on a.statistic#=b.statistic#
and a.sid=(select sid from v$mystat where rownum<2)
and b.name like 'redo size%'
begin
for i in 1..100000 loop
insert into emp1 values(i,'name1',1);
end loop;
end;
commit;
记录redo量 2
select a.sid,b.name,a.value
from v$sesstat a join v$statname b
on a.statistic#=b.statistic#
and a.sid=(select sid from v$mystat where rownum<2)
and b.name like 'redo size%'
begin
for i in 1..100000 loop
insert into emp values(i,'name1',1);
end loop;
end;
commit;
记录redo量 3
select a.sid,b.name,a.value
from v$sesstat a join v$statname b
on a.statistic#=b.statistic#
and a.sid=(select sid from v$mystat where rownum<2)
and b.name like 'redo size%'
【】观察两种表生成redo量的大小
2、索引
B*tree: balance
bitmap: olap 数据仓库
create [unique][bitmap]index on 表(列)
drop table emp;
drop table emp1;
create table emp(id number,name varchar2(20),deptid number);
create index emp_idx1 on emp(id);
insert into emp values(1,'a',1);
insert into emp values(1,'b',2);
delete from emp;
drop index emp_idx1;
create unique index emp_idx1 on emp(id);
insert into emp values(1,'a',1);
create table emp1(id number primary key,name varchar2(20) unique,deptid number);
select * from dba_indexes where table_name='EMP1'
create bitmap index emp_idx2 on emp(deptid);
drop index emp_idx1;
drop index emp_idx2;
create unique index emp_idx1 on emp(id,name);
insert into emp(id) values(1);
select * from emp;
select * from dba_indexes
select * from dba_objects
3、视图
create [force] view 视图名 as 子查询
with read only|with check option;
create force view v1 as select * from emp2;
select * from dba_views where view_name='V1'
create table emp2(id number);
select * from v1;
create view v2 as select * from emp2 with read only;
select * from v2;
insert into v2 values(100);
create view v3 as select * from emp2 where id>2000 with check option;
insert into v3 values(3000);
insert into v3 values(1000);
update v3 set id=10000 where id=100; X
update v3 set id=2000 where id=3000;
delete from v3 where id<4000;
insert into emp2 values(100);
select * from emp2
4、物化视图
http://cuuzhang.blog.163.com/blog/static/608115292010913102253107/
grant create materialized view to u1;
sqlplus u1/u1
drop table t1;
purge recyclebin;
create table t1(id number,name varchar2(20));
手动刷新
create materialized view v1 refresh with rowid as select * from t1;
select * from user_mviews
select * from user_segments
insert into t1 values(3,'c');
commit;
begin
dbms_mview.refresh(list => 'V1');
end;
select * from t1;
select * from v1;
drop materialized view v1;
提交刷新
create materialized view v2 refresh on commit with rowid as select * from t1;
insert into t1 values(2,'b');
commit;
select * from t1;
select * from v2;
drop materialized view v2;
定时刷新
drop materialized view v3;
create materialized view v3 refresh with rowid start with sysdate next sysdate + (1/14400) as select * from t1;
insert into t1 values(8,'e');
commit;
select * from t1;
select * from v3;
select sysdate,sysdate+1/14400 from dual
drop materialized view v3;
增加物化视图日志
drop materialized view v4;
create materialized view v4 refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from t1;
create materialized view log on t1 with rowid;
select * from dba_mview_logs
select * from MLOG$_T1;
insert into t1 values(7,'g');
commit;
select * from v4;
Refresh方法-FAST子句
增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志
Refresh方法- COMPLETE子句
完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成完全刷新即使增量刷新可用。
Refresh Method – FORCE 子句
当指定FORCE子句,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项
5、序列
drop sequence seq1;
create sequence seq1 start with 10 maxvalue 40 cycle cache 10;
select * from user_sequences;
select * from dba_sequences where sequence_name='SEQ1';
select seq1.nextval,seq1.currval from dual;
表主键:
代理主键:使用没有任何业务含义的列作为主键
自然主键:使用有业务含义的列作为主键
5、同义词
create [public] synonym 名 for 对象;
create synonym t1s for t1;
select * from t1s;
select * from user_synonyms
select * from dba_synonyms where synonym_name='T1S'
drop public synonym t1s
create public synonym t1s for t2;
select * from t1s;
6、数据库链接