oracle第四天

来源:互联网 发布:奋斗拼搏的诗句 知乎 编辑:程序博客网 时间:2024/06/05 16:51
 

                        oracle序列

可以产生连续或者不连续自增的序号,当然可以拐回来,但是它不会产生相同的序号。使用不得当会宕机。也是一种数据库对象。SCN像是oracle内部的一个时钟。永远不停地增加,也会回绕。

序列生成是相当难的,是一个很有价值的课题。

create sequence

[increment by n]

[start with n ]

[maxvalue n |nomaxvalue]

[ minvalue n |nominvalue]

[cycle(no cycle) ]

[cahce n(no cache)]   会自动在当前sequence生成更多的数字,在内存中按照你的increment生成OK了,生成cache个,比如当前是1 cache是2那么,这是时候已经预备了3,4

sequence is manufactured in system global area(SGA) the share pool or dictionary pool

and you have to add an lock ,if the app is just read It the system add a share lock, on the contrary add an x lock(exclusive lock).

 

create sequence sql1 increment by 2 start with 1 maxvalue 20 nocycle;

NEXTVAL          让序列自增,

CRUUVAL    去等当前值,并发的时候会有排他锁,总是读。

可以修改序列

alter sequence seq1 cycle cache 4;

这样就循环了。

序列不保证没有空隙,如1,2,3,4,6。但是很少发生,如果需要精确控制,不可以使用。

alter sequence seq1 cycle maxvalue 20000 cache 20;

让数据库异常宕机命令:shutdown abort.它不对数据库做保存,清理等操作。

因为cache的原因就不会有空隙了,但是这个时候性能会下降,一般程序只要后面比前面大就行了

 

user_sequences:这个视图。

 

                       index索引

当表没哟顺序的时候的时候,搜素的时候全部搜索,但是index会排序。这个时候索引采用B+树的形式,会对行排序,在磁盘的排列是有序的。表的数据时完全无序的,和你插入的顺序无关。索引只保存两个值,比如价格列,这样索引中就有了 价格列值的大小顺序排序,后面跟上、行地址还可以有组合索引,这样就包含了多个行。

ROWID    包含文件号,块号,列号。

索引的创建。

create index 索引名 on 表名 on (column1,column2,…column3);

当有索引的时候,你对表的操作会更新索引 ,比如添加了一个价格的物品,这样价格的索引会自动更新。

索引时没有办法更新的,是系统自动维护的。是一个删除,然后插入的过程。没有update。

set autot trace

set autot off,后面的sql会显示命令执行计划和执行效率等方面的东西。

包括execution plan.从Operation中缩进最多的开始执行,基本上是ID最大的执行。

1、  解析(确定执行计划,软解析,硬解析)

2、  执行

3、  抓取

采样,统计分析。以及成本。都是估计出来的。

如果索引被使用的话呢,可以再Operation中看到Index方面的信息。有可能不使用索引。执行计划的原因

函数索引

是的列值或者 降序的索引,

降值索引  用一个减号可以解决问题 。在列名前加处理。先把你的列处理,然后再创建索引。

 

TABLE ACCESS FULL全表扫描。尽量要避免全表扫描。

当你对列进行了处理,而这个时候再进行查询 比如upper(column)后,而你的索引创建的时候并没有upper,所以此时的oracle并不会走索引的道路。

1、  create index ind_t on t (name);

2、  select * from t where upper(name)=’A’;这个时候oracle是不会用索引的。

3、  create index ind_t on t(upper(name));

4、  select * from t where upper(name)=’A’;这个时候会用索引的。但也不确定,要看执行计划,大部分情况下回走索引的。

                        同义词

tabs 代表 user_tables           select table_name from tabs;

可以自己创建同义词:create synonym tx from tabs;这是私有同义词,就是别名,别的用户如果使用的话,需要加域。跨用户访问需要:用户名.表名。必须有权限的。

共有同义词:所有用户都可以使用的。

create public synonym table4 for gx.table4;

这样就为gx用户下的table4创建了公共同义词。公共同义词都要加用户名前缀的。

 

加入公共同义词和用户的表重名了!!!!!该怎么处理呢??、oracle 会优先访问你的私有的表。而不是同义词。

 

删除;drop synonym 名字;

  synonym    -  简明英汉词典

D.J.[ˈsinənim]
n. 同义词

表空间  数据文件  块 字段 

                                表空间与数据文件

表空间多个数据文件的组合。

表空间的类型   -  -- -  本地管理

create tablesapce userdata datefile’location’ size( size|k|m)

extent management local

{uniform size 128k|autoallcate}

 

注意你的sql里面不要有全角的空格。oracle识别不了。

相关视图:DBA_DATA_FILES

临时表空间

比如排序操作时 会占用很大内存,这个时候放到表空间中

临时表比如 临时数据表所使用的空间是临时表空间  临时表和自己创建的临时表不一样!!!!

create  temporary tablespace temp tempfile ‘location’ size 45M extent management local uniform size 4M;

create temporary tablesapce tmep_name tempfile….

alter database default temporary tablespace temp_name…..

只读表空间

保存历史数据,如数据仓库alter tablespace tb_name read only;

当表空间只读的时候呢,操作被 禁止。

drop table 还是可以用的,因为它是将数据字典中关于此表的信息被删除了。

表空间的读写状态可以再dba_tablespaces中的status列可以看到。

调整表空间大小

alter database datafile ‘location’autoextend  resize 60M;

alter tablesapce tb_1 add

alter tablespace userdata add datafile’location’ size 50M reuse;

alter database datafile 16 autoextend

 

移动数据文件

表空间删除。drop tablesapce skjff;

当表空间有内容是删除的话是会错误的,必须删除选项。

drop tablespace tablespacename [including contents [and datafiles][escade constraints]]

for example :

 

 

 

 

                              表管理

字符集

查看字符集:select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

 

select ‘中国’ from dual;查看是否支持中文。

 

 

数据类型:RAW不管数据在什么字符集,数据都不会丢失。跟字符集的转换没有关系。oracle不会做任何处理。

LONG LONG RAW 大对象:LOB

CLOB对字符集敏感,

BLOB

访问量都不大。

LONG型不建议使用。

 

临时表:

CREATE global temporary table 表名 (列信息) on commit delete rows

当提交时,自动清除所有临时表数据

DCREATE GLOBAL TEMPORARY TABLE 表明(列信息)on commit preserve rows

当提交时,保留临时表数据,当断开连接时,才清除数据。

 

表的重组:alter table 表名 move ;把表加锁,然后复制这个表的数据到跟这个表一模一样的表上把字表删除。

删除列,删除列是十分消耗资源的。可以把某列设置为不使用。

alter table set unused column 列名 cascade constraints;这样从字典中删除数据,设置未用完成的很快。起到删除的作用。

alter table

drop unused columns checkpoint 行数;

 

原创粉丝点击