- 浏览: 280888 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
MikeJe:
按照您的建议解决了非常感谢
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决 -
675222413:
解决了,谢谢。
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决 -
huangcongde:
真厉害,第一条就解决了,没错就是myeclipse8.5用 ...
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决 -
rogermmjj:
挺好用的,但是this.stage.nativeWindow好 ...
Flex TitleWindow 拖动范围控制 -
影非弦:
经鉴定,有效,多谢分享!
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决
1.RDBMS (Relation database management system) 关系数据库系统;
2.常用的数据库有:oracle (市场占有率44%)、 DB2(由于数据库很大, 市场占有率12%) SQLserver(microsoft) mysql(开源) sysbase;
3.跟数据库打交道的人分两种:DBA(数据库管理员,金牌证书)、程序员();
4.sql数据库的语言类型:数据操纵语言(data MANIPULATION LANGUAGE) DML 用于改变数据库对象 语句:update,insert,delete
数据定义语言(DATA DENIFITION LANGUAGE): DDL 语句:create,alter,drop
数据控制语言(DATA CONTROL LANGUAGE) DCL 用于权限授予和收回 语句: grant
数据访问语言(data QUERY LANGUAGE); DQL 语句: select
5.sql语言分:86版 select * from tablename a, tablename b where a.字段=b.字段;
92版 select * from tablename a join tablename b on conditions;
oracle从1.0~8.0i版本的兼容性不好,9i不耗内存;10g(grid)将表当成一个一个网格来处理(表),当前主流;11g(太大)。
5.范式:对于数据库来说有六大范式,对于程序员来说只要满足前三个
---在一张表里不能出现相同的字段; 1NF
---在满足第一范式的基础上,必须要有唯一的主键或复合主键;2NF
---在满足第二范式的基础上,消除键与键之间的依赖性。 3NF
6.笛卡尔积
内联接 表自身的联接
7.表的联接 (+) 不能与 in or一起
左联接 select * from emp a ,dept b where a.detpno=b.deptno(+);
外联接 右联接 select * from emp a, dept b where a.deptno(+)=b.deptno;
全联接 select * from emp a ,dept b where a.deptno=b.deptno(+) union select * from emp a, dept b where a.deptno(+)=b.deptno;
8.SQL中的对象有:table、index、view、sequence、synonym、constraint、procedure、function、cursor、package、trigger;
对象命名 table t_
index ind_
view v_
sequence seq_
synonym syn_
constraint cons_
procedure proc_
function func_
cursor cur_
package pkg_
trigger trg_
查看sql中的对象:select * from user_object ;
9.table 表:行和列的组合就构成了表。
表的重命名rename oldname to newname;
建表:create table table_name ;
表的复制:create table table_name as select * from table_name1;
表结构的复制:create table table_name as select * from table_name1 where 1=0;
表中的数据复制insert into table_name(col1,col2,col3) select c1,c2,c3 from table_name1;
删除整张表(包括结构和数据):drop table table_name;
删除表的数据(截断表):truncate table table_name; 截断数据不用commit,没有事务,截断的数据不能恢复
查看表信息: select * from tab; select * from user_tables;
建表(字段): create table table_name (column1 datatype primary key,column2 datatype constraint constraint_name,....colname3 references tablename(field));
表结构的修改:给表增加列 alter table table_name add columnname datatype [default value];
改变列的类型 alter table table_name modify columnname datatype [default value];
删除列 alter table table_name drop column column_name;
重命名列 alter table table_name rename column old_colname to new_colname;
给表添加备注 comment on table table_name is '';
查看表的备注 select * from user_tab_comments where TABLE_NAME='EMPLOYEES';
给表列添加备注 comment on column table_name.column_name is '';
查看列的备注 select * from user_col_comments where TABLE_NAME='EMPLOYEES';
表数据的修改:删除表的数据 delete from tablename where (condition); commit; 如果不加where条件,则删除该表中的所有数据但不包括结构(字段);
插入数据:insert into table_name(column1,column2,column3...)values(value1,value2,value3...);
数据的更新:update table_name set 字段1=value,字段2 = value where(condition);
删除表:DROP TABLE temp_test;
10.临时表
create global temporary table temp_
(
field datatype,
field1 datatype
)
on commit delete rows;
或
on commit preserve rows;
create global temporary table temp_test(
username VARCHAR2(20),
password VARCHAR2(20)
)
on commit preserve rows;
11.index 索引:是用于加速数据存取速度的数据库对象,通过索引可以降低I/O次数,从而提高sql语句的访问性能。
索引根据索引列值得唯一性可分为:唯一索引和非唯一索引; 根据索引列的个数可分为:单列索引和复合索引。
唯一索引与唯一约束的区别:索引是物理概念,约束是逻辑概念。实现上没有什么区别唯一约束就是创建一个唯一索引来实现的。
一张表中可以建立多个索引,但是索引的组合必须不同;
索引的创建:create index indx_name on table_name(字段1,字段2,...);
索引的维护:索引的重建(当执行delete操作时,在索引上只会进行逻辑删除,其空间不能提供其他数据的插入操作;索引当频繁使用索引后应定期将索引重建,以提高其利用率);
alter index index_name rebuild;
索引的删除:drop index index_name;
显示索引信息:select * from user_indexes; (用于显示当前用户的所有索引)
select * from user_ind_columns; (用于显示当前用户所有索引列的信息)。
不能用or replace
CREATE UNIQUE INDEX ind_ ON tablename(field);
索引重建
判断是否需要重建索引:
SQL>analyze index index_name validate structure;
SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
( 或 Select index_name,blevel from dba_indexes where blevel>=4 );
说明 : 当查询出来的 height>=4 或者 DEL_LF_ROWS/LF_ROWS>0.2 的场合 , 该索引考虑重建 ;
重建索引的办法:
1.1、删除并从头开始建立索引。
删除并从头开始建索引:方法是最慢的,最耗时的。一般不建议。
1.2 、 使用 alter index index_name rebuild 命令重建索引。
快速重建索引的一种有效的办法,因为使用现有索引项来重建新索引,如果客户操作时有其他用户在对这个表操作,尽量使用带online参数来最大限度的减少索引重建时将会出现的任何加锁问题,alter index index_name rebuild online。但是由于新旧索引在建立时同时存在,因此,使用这种技巧则需要有额外的磁盘空间可临时使用,当索引建完后把老索引删除,如果没有成功,也不会影响原来的索引。利用这种办法可以用来将一个索引移到新的表空间。
Alter index index_name rebuild tablespace tablespace_name [online];
Alter index index_name rebuild online parallel 4 tablespace space_name; Alter index index_name noparallel;
优点:是快速重建索引的一种有效的办法,可以用来将一个索引移到新的表空间。
缺点:重建期间需要额外空间。
1.3 、 使用 alter index index_name coalesce 命令重建索引。
使用带有coalesce参数时重建期间不需要额外空间,它只是在重建索引时将处于同一个索引分支内的叶块拼合起来,这最大限度的减少了与查询过程中相关的潜在的加锁问题,但是,coalesce选项不能用来将一个索引转移到其他表空间
alter index index_name coalesce;
优点:重建期间不需要额外空间。
缺点:coalesce选项不能用来将一个索引转移到其他表空间
--select 'alter index ' || a.segment_name || ' rebuild tablespace NG_INDEX online;' from dba_segments a where a.segment_type = 'INDEX' and a.owner = 'AMS20130223';
12.view
视图以经过定制的方式显示来自一个或多个表的数据
视图可以视为“虚拟表”或“存储的查询”
创建视图所依据的表称为“基表”
视图的优点有:
提供了另外一种级别的表安全性
隐藏的数据的复杂性
简化用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据
视图: 是一个表或多个表的逻辑表示,它对应一条select语句,并且其查询结果将被作为一张表对待,所有视图也被称为虚表。
视图的创建:create view view_name as select * from table_name where(condition);
视图的修改:create or replace view view_name(视图列的别名) as select * from table_name;
视图的删除:drop view view_name;
显示视图信息:select * from user_views;
13.sequence 序列:是用于生成唯一数字的数据库对象。
建立序列:create sequence seq_deptno
start with 50
increment by 1
maxvalue 100
minvalue 10;
序列的使用:通过伪列nextval和currval来实现的 insert into mydept (deptno,dname,loc) values(seq_deptno.nextval,'DEVELOPMENT','DALLAS'); COMMIT;
序列的修改:alter sequence seq_deptno --只能改increment by num
increment by num;
序列的删除: drop sequence seq_name;
显示序列信息: select * from user_sequences;
注:oracle为该数据字典视图提供了同义词SEQ,可以使用SEQ取得序列信息。select * from seq;
不能用or replace
14.synonym 同义词:方案对象的别名;同义词包括:公共同义词和私有同义词。
创建同义词:公共同义词 create public synonym syn_name for [schema.]object schema:方案
私有同义词 create synonym syn_name for [schema.]object;
删除同义词:drop synonym syn_name;
查看同义词信息:select * from user_synonyms;
注:oracle为该数据字典视图提供了同义词syn,可以使用syn取得序列信息。select * from syn;
15.constraint: 约束:用于确保数据库数据满足特定的商业逻辑或企业规则。
约束包括NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK等5种类型。constraint_type => funpc
1). not null
create table table_name(column1 datatype [constraint cons_name] not null,column2 datatype....);
2).unique
create table table_name(column1 datatype ,column2 datatype.... ,[constraint cons_name] unique(column));
3).primary key
create table table_name(column1 datatype,column2 datatype [constraint cons_name] primary key,column3 datatype....);
4).FOREIGN KEY
create table table_name(column1 datatype,column2 datatype [constraint cons_name] references table(column),column3 datatype....);
5).check create table table_name(column1 datatype,column2 datatype....,check(condition));
增加约束的格式:
1)alter table table_name add [constraint cons_name] constraint_type (column,....);
2)alter table table_name modify columnname [constraint cons_name] not null;
1).not null alter table table_name modify columnname [constraint cons_name] not null;
2).unique alter table table_name add [constraint cons_name] unique(column);
3).primary key alter table table_name add [constraint cons_name] primary key(column);
4).foreign key alter table table_name add [constraint cons_name] foreign key(column) references tablename(column);
5).check alter table table_name add [constraint cons_name] check(condition);
alter table emp add constraint cons_unique_sal unique(sal);
alter table emp add constraint cons_fk_deptno foreign key(deptno) references dept(deptno);
alter table emp add constraint cons_pk_emp primary key(empno);
alter table table_name add constraint cons_ck check(sal > 800 AND comm IS NOT NULL);
删除约束: alter table table_name drop constraint cons_name;
查看约束: select * from user_constraints;
查看当前用户约束所对应的表列: select * from user_cons_columns;
alter table EMP
drop constraint FK_DEPTNO;
alter table EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
references DEPT (DEPTNO) ON DELETE cascade ; --级联删除
启用/停用约束
alter table table_name enable constraint cons_name;
alter table table_name disable constraint cons_name;
16.块 块(block)是pl/sql的基本程序单元;块由三个部分组成:定义部分、执行部分、例外处理部分。
declare
/*
* 定义部分(定义变量、常量、复杂数据类型、游标)
*/
begin
/*
* 执行部分(pl/sql语句)
*/
exception
when others then
...
rollback;
/*
* 例外处理部分(处理运行错误)
*/
end;
17.控制结构语句 条件语句:包括了3种语句if-then、if-then-else、if-then-elsif。
if condition then
statements;
[elsif condition then
statements;]
[else statements;]
end if;
循环语句: 包括了基本循环、while循环、for循环等3种类型。
1).基本循环 loop
statement;
....
exit [when condition];
end loop;
2).while循环 while condition loop
statament;
statament;
statament;
....
end loop;
3).for循环 for counter in [reverse] n1..n2 loop
statament;
statament;
statament;
....
end loop;
pl/sql中赋值 :=
18.cursor: 游标:定义游标、打开游标、提取数据、关闭游标。
cursor cv_name is select * from table where (condition); --定义游标
open cv_name; --打开游标
fetch cv_name into variabel1[variabel2,variable3,....];
close cv_name;
1).简化写法 for 一行元素 in 游标 loop
一行元素.属性;
一行元素.字段;
end loop;
例:
declare
cursor cv_emp_cursor is
select ename,sal,empno from emp order by empno;
begin
for v_emp in cv_emp_cursor loop
dbms_output.put_line('v_ename='|| v_emp.ename ||',v_sal=' || v_emp.sal || ',empno=' || v_emp.empno);
end loop;
end;
2).传统写法 fetch cursor_name into variabel1[,variabel2,variable3,....];
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
v_empno emp.empno%type;
cursor cv_emp_cursor is
select ename,sal,empno from emp order by empno;
begin
open cv_emp_cursor;
loop
fetch cv_emp_cursor into v_ename,v_sal,v_empno;
exit when cv_emp_cursor%notfound;
dbms_output.put_line('v_ename='|| v_ename || ',v_sal=' ||v_sal|| ',v_empno='|| v_empno);
end loop;
close cv_emp_cursor;
end;
19.procedure: 过程:用于执行特定操作的pl/sql块.
过程中的参数有三种模式:in(输入) out(输出) in out(输入输出)
过程的建立: create or replace procedure proc_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....)
is/as
---定义变量
begin
---body 注意:select into的用法。
end;
过程的调用: call proc_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
exec proc_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
删除过程:drop procedure proc_name;
查看过程源代码: select * from user_source;
查看过程 SELECT * FROM user_procedures;
过程中无参时,定义时不能有() create or replace procedure proc_name is/as begin end;
调用时,一定要有() call proc_name();
20.function: 函数: 用于返回特定数据.
函数和过程的区别是函数有返回值,过程没有返回值.
函数中的参数有三种模式:in(输入) out(输出) in out()
函数的建立: create or replace function func_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....) return datatype
is/as
---定义变量
begin
---body
end;
函数的调用: call func_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
exec func_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
函数的删除:drop function func_name;
查看函数源代码: select * from user_source;
查看函数 SELECT * FROM user_objects a WHERE a.object_type = 'FUNCTION';
21.package: 包:用于逻辑组合相关的自定义类型、常量、变量、游标、过程、函数。包由包体和包规范两部分组成。
包的创建:create [or replace] package pkg_name
is|as
——定义
procedure proc_**();
function func_**();
end;
包体的创建:
create [or replace] package body pkg_name
is|as
——定义
procedure proc_**()
begin
...
end;
function func_**()
begin
...
end;
end;
22.trigger: 触发器:存放在数据库中,并且被隐含执行的存储过程。触发器分语句触发器和行触发器。
语句触发器的语法: create [or replace] trigger trg_name
{before|after|instead of} insert [or update or delete] of 字段
on table_name
[declare]
pl/sql block;
行触发器的语法: create or replace trigger trg_name
{before|after|instead of} insert [or update or delete] of 字段
on table_name
[REFERENCING NEW AS New OLD AS Old]
for each row [when condition] when new. old.
[declare]
pl/sql block;
注意:
触发器中不能有commit;
insert时,old的值为空值。
禁止/激活触发器 alter trigger trg_name enable;
alter trigger trg_name disable;
删除:
drop trigger trg_name;
显示触发器信息 select * from user_triggers;
--触发器通过insert update delete是不能触发自己的
--如果要写用如下方法:
CREATE OR REPLACE TRIGGER trg_emp
BEFORE INSERT ON emp
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
BEGIN
:NEW.sal := 1000;
END;
--------------------------------------------
if inserting then
elsif updating then
elsif deleting then
end if;
类名Change
23.java source : create or replace and compile java source named Change
as
java代码
删除:
drop java source Change;
调用:
CREATE OR REPLACE FUNCTION xchg(v NUMBER) RETURN VARCHAR2
AS
LANGUAGE JAVA NAME 'com.waytojob.pub.Change.trans(double) return java.lang.String';
24.表空间
DROP TABLESPACE USERS1 INCLUDING CONTENTS AND DATAFILES;
--保证先要有目录
CREATE [UNDO撤消表空间] TABLESPACE USERS1 DATAFILE
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS011.DBF' SIZE 5M AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED;
25.临时表空间
DROP TABLESPACE TEMP1 INCLUDING CONTENTS AND DATAFILES;
--保证先要有目录
CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP011.DBF' SIZE 20M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED;
--给表更改表空间. 一定注意,修改表空间后,原来表上的索引全部失效,需要重新rebuild。!!!!!!!!!!!
alter table tablename move tablespace newTableSpace;
alter user username
--限额
quota 大小(unlimited无限大) on users1;
26.dblink
-- Drop existing database link
drop public database link REMOTE_01;
-- Create database link
--不能OR replace连用
create public database link REMOTE_01
connect to scott identified by "tiger"
using 'localhost:1521/orcl';
调用: 表@dblink名
SELECT * FROM emp@remote01;
drop public database link REMOTE_01;
CREATE public database link REMOTE_01
connect to scott identified by "tiger"
using '192.168.1.133:1521/test';
SELECT * FROM SCOTT.EMP@REMOTE_01 a,dept b WHERE a.deptno = b.deptno;
-- Create the synonym
create or replace synonym REMOTE_EMP
for SCOTT.EMP@REMOTE_01;
SELECT * FROM remote_emp a,dept b WHERE a.deptno = b.deptno;
27.内置函数 数字函数: ROUND TRUNC MOD ABS CEIL EXP FLOOR LOG POWER....
字符函数: UPPER LOWER LENGTH TRIM INSTR CONCAT SUBSTR substr LPAD RPAD....
日期时间函数:MONTHS_BETWEEN ADD_MONTHS NEXT_DAY ....
转换函数: TO_CHAR() TO_DATE() TO_NUMBER()
聚合函数: SUM() AVG() MAX() MIN() COUNT()
28.数据库数据的恢复 1). 当使用drop语句删除数据库数据时,我们可以在pl/sql中browse中的Recycle bin文件夹中找到被drop的文件,右击restore;
也可以通过查看回收站来查看,在通过sql恢复
SELECT * FROM USER_RECYCLEBIN a order by a.droptime desc;
flashback table t_test to before drop ;
--如果存在同名的,就需要恢复时重命名
flashback table t_test to before drop rename to t_test1 ;
清空回收站 purge recyclebin;
清空回收站的某个表 purge table "BIN$/UpBuh+LQ9yZGN95BFsk5Q==$0";
2). 如使用delete语句删除数据库数据时,我们使用flashback_transaction_query;
select * from flashback_transaction_query where (condition);
flashback table t_patrolpoint to timestamp to_timestamp('13-08-28 15:00:05','yy-mm-dd hh24:mi:ss');
alter table t_patrolpoint enable row movement;
imp username/pwd@IP:port/sid file=要导入dmp的路径 full=y 如:imp scott/tiger@localhost:1521/orcl file=c:\1.dmp full=y
exp username/pwd@IP:port/sid file=要导出dmp的路径 如:exp scott/tiger@localhost:1521/orcl file=c:\2.dmp
exp/imp
下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
--exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
exp mohurd1/mohurd1@192.168.1.250:1521/orcl file=c:\mohurd1_20120116.dmp log=c:\mohurd1_20120116.log
imp mohurd3/mohurd3@192.168.1.250:1521/orcl fromuser=mohurd2 touser=mohurd3 file=c:\mohurd2.dmp log=c:\mohurd2.log
上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
不过在上面命令后面 加上 compress=y 就可以了
数据的导入
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
29、Oracle缓存表(db_buffer_pool)由三部分组成:
1、buffer_pool_defualt
2、buffer_pool_keep
3、buffer_pool_recycle
如果要把表钉死在内存中,也就是把表钉在keep区。相关的命令为:
alter table 表名 storage(buffer_pool keep); 这句命令把表示表如果缓存的话是缓存在keep区。
可以通过语句:
select table_name from dba_tables where buffer_pool='KEEP';查询到该表是放在keep区中的。 但是不意味着表已经被缓存了。
下面的语句把表缓存:
alter table 表名 cache; 可以通过
select table_name from dba_tables where rtrim(cache)='Y'; 查询到该表已经被缓存了。
加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。
也可以手工来移出内存,命令如下:
alter table ... nocache;
30、start with…connect by prior
SELECT ……
FROM ……
[WHERE CONDITION1 AND CONDITION2]
CONNECT BY {PRIOR列名1=列名2|列名1=PRIOR裂名2} [CONDITION3……]
[START WITH];
CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。
PRIOR运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在父节点的一侧,另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
将condition放在where后和放在CONNECT BY的区别:
放在where后是对整个树形结构的结果进行过滤,即使父节点不满足条件,子节点也会查询出来(从父到子结构查询);而放在CONNECT BY后,是在获取树形结构时进行过滤,如果父节点不满足条件,子节点是不会被查询出来(从父到子结构查询)
31、LOBINDEX、LOBSEGMENT
当我们建立一个含有lob字段的表时,oracle会自动为lob字段建立两个单独的segment,一个用来存放数据(LOBSEGMENT),另一个用来存放索引(LOBINDEX),并且它们都会存储在对应表指定的表空间中。但是当我们用alter table tablename move tablespace tbs_name 来对表做空间迁移时,只能移动非lob字段以外的数据。而如果我们要同时移动lob相关字段的数据,我们就必需用如下的含有特殊参数据的文句来完成,它就是: alter table tablename move lob(columeName) store as (tablespace newTableSpaceName);
这样,就将这两个对象从老的表空间移至新的表空间。
32、分区表
分区的优点:
1、增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
2、减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,矿能比整个大表修复花的时间更少;
3、维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;
4、均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
5、改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快,在数据仓库的TP查询特别有用。
6、分区对用户透明,最终用户感觉不到分区的存在。
--查询分区part_15的数据
select * from t_task partition(part_15);
--查询子分区part_15_1的数据
select * from t_task subpartition(part_15_1);
分区维护:
(1)增加一个分区:分区范围只能往上增,不能增加一个少于原有的分区:
--添加分区
alter table t_task add partition part_11 values(11);
--添加分区、子分区
alter table t_task add partition PART_11 values(11) tablespace ng_data (
subpartition PART_11_1 values (1) tablespace ng_data,
subpartition PART_11_2 values (2) tablespace ng_data
);
--在已有的分区中添加子分区
alter table t_task modify partition PART_11 add subpartition PART_11_1024 values (1024) tablespace ng_data;
(2)合并分区:(合并后的分区必须指下最后一个大value的分区)
alter table t_task merge partitions part_11,part_12 into partition part_13
(3)删除一个分区:
--删除分区
alter table t_task drop partition part_01
--删除子分区
alter table T_TASK drop subpartition PART_17_DEFAULT;
(4)将分区改名
alter table T_TASK rename Partition part_01 to part_011
(5)将分区改表空间
alter table T_TASK move part_01 tablespace ng_data nologging
(6)查询特定分区
select * from t_task partition(part_15);
select * from t_task subpartition(part_15_1);
(7)添加数据
insert into table_name select * from table_name partition (partition_name)
(8)分区表的导出
userid=USER/PWD
buffer=102400
tables=table_name:partition_name,
file=E:exp_paraxxx.dmp
log=E:exp_paraxxx.log
未完待续……
2.常用的数据库有:oracle (市场占有率44%)、 DB2(由于数据库很大, 市场占有率12%) SQLserver(microsoft) mysql(开源) sysbase;
3.跟数据库打交道的人分两种:DBA(数据库管理员,金牌证书)、程序员();
4.sql数据库的语言类型:数据操纵语言(data MANIPULATION LANGUAGE) DML 用于改变数据库对象 语句:update,insert,delete
数据定义语言(DATA DENIFITION LANGUAGE): DDL 语句:create,alter,drop
数据控制语言(DATA CONTROL LANGUAGE) DCL 用于权限授予和收回 语句: grant
数据访问语言(data QUERY LANGUAGE); DQL 语句: select
5.sql语言分:86版 select * from tablename a, tablename b where a.字段=b.字段;
92版 select * from tablename a join tablename b on conditions;
oracle从1.0~8.0i版本的兼容性不好,9i不耗内存;10g(grid)将表当成一个一个网格来处理(表),当前主流;11g(太大)。
5.范式:对于数据库来说有六大范式,对于程序员来说只要满足前三个
---在一张表里不能出现相同的字段; 1NF
---在满足第一范式的基础上,必须要有唯一的主键或复合主键;2NF
---在满足第二范式的基础上,消除键与键之间的依赖性。 3NF
6.笛卡尔积
内联接 表自身的联接
7.表的联接 (+) 不能与 in or一起
左联接 select * from emp a ,dept b where a.detpno=b.deptno(+);
外联接 右联接 select * from emp a, dept b where a.deptno(+)=b.deptno;
全联接 select * from emp a ,dept b where a.deptno=b.deptno(+) union select * from emp a, dept b where a.deptno(+)=b.deptno;
8.SQL中的对象有:table、index、view、sequence、synonym、constraint、procedure、function、cursor、package、trigger;
对象命名 table t_
index ind_
view v_
sequence seq_
synonym syn_
constraint cons_
procedure proc_
function func_
cursor cur_
package pkg_
trigger trg_
查看sql中的对象:select * from user_object ;
9.table 表:行和列的组合就构成了表。
表的重命名rename oldname to newname;
建表:create table table_name ;
表的复制:create table table_name as select * from table_name1;
表结构的复制:create table table_name as select * from table_name1 where 1=0;
表中的数据复制insert into table_name(col1,col2,col3) select c1,c2,c3 from table_name1;
删除整张表(包括结构和数据):drop table table_name;
删除表的数据(截断表):truncate table table_name; 截断数据不用commit,没有事务,截断的数据不能恢复
查看表信息: select * from tab; select * from user_tables;
建表(字段): create table table_name (column1 datatype primary key,column2 datatype constraint constraint_name,....colname3 references tablename(field));
表结构的修改:给表增加列 alter table table_name add columnname datatype [default value];
改变列的类型 alter table table_name modify columnname datatype [default value];
删除列 alter table table_name drop column column_name;
重命名列 alter table table_name rename column old_colname to new_colname;
给表添加备注 comment on table table_name is '';
查看表的备注 select * from user_tab_comments where TABLE_NAME='EMPLOYEES';
给表列添加备注 comment on column table_name.column_name is '';
查看列的备注 select * from user_col_comments where TABLE_NAME='EMPLOYEES';
表数据的修改:删除表的数据 delete from tablename where (condition); commit; 如果不加where条件,则删除该表中的所有数据但不包括结构(字段);
插入数据:insert into table_name(column1,column2,column3...)values(value1,value2,value3...);
数据的更新:update table_name set 字段1=value,字段2 = value where(condition);
删除表:DROP TABLE temp_test;
10.临时表
create global temporary table temp_
(
field datatype,
field1 datatype
)
on commit delete rows;
或
on commit preserve rows;
create global temporary table temp_test(
username VARCHAR2(20),
password VARCHAR2(20)
)
on commit preserve rows;
11.index 索引:是用于加速数据存取速度的数据库对象,通过索引可以降低I/O次数,从而提高sql语句的访问性能。
索引根据索引列值得唯一性可分为:唯一索引和非唯一索引; 根据索引列的个数可分为:单列索引和复合索引。
唯一索引与唯一约束的区别:索引是物理概念,约束是逻辑概念。实现上没有什么区别唯一约束就是创建一个唯一索引来实现的。
一张表中可以建立多个索引,但是索引的组合必须不同;
索引的创建:create index indx_name on table_name(字段1,字段2,...);
索引的维护:索引的重建(当执行delete操作时,在索引上只会进行逻辑删除,其空间不能提供其他数据的插入操作;索引当频繁使用索引后应定期将索引重建,以提高其利用率);
alter index index_name rebuild;
索引的删除:drop index index_name;
显示索引信息:select * from user_indexes; (用于显示当前用户的所有索引)
select * from user_ind_columns; (用于显示当前用户所有索引列的信息)。
不能用or replace
CREATE UNIQUE INDEX ind_ ON tablename(field);
索引重建
判断是否需要重建索引:
SQL>analyze index index_name validate structure;
SQL> select height,DEL_LF_ROWS/LF_ROWS from index_stats;
( 或 Select index_name,blevel from dba_indexes where blevel>=4 );
说明 : 当查询出来的 height>=4 或者 DEL_LF_ROWS/LF_ROWS>0.2 的场合 , 该索引考虑重建 ;
重建索引的办法:
1.1、删除并从头开始建立索引。
删除并从头开始建索引:方法是最慢的,最耗时的。一般不建议。
1.2 、 使用 alter index index_name rebuild 命令重建索引。
快速重建索引的一种有效的办法,因为使用现有索引项来重建新索引,如果客户操作时有其他用户在对这个表操作,尽量使用带online参数来最大限度的减少索引重建时将会出现的任何加锁问题,alter index index_name rebuild online。但是由于新旧索引在建立时同时存在,因此,使用这种技巧则需要有额外的磁盘空间可临时使用,当索引建完后把老索引删除,如果没有成功,也不会影响原来的索引。利用这种办法可以用来将一个索引移到新的表空间。
Alter index index_name rebuild tablespace tablespace_name [online];
Alter index index_name rebuild online parallel 4 tablespace space_name; Alter index index_name noparallel;
优点:是快速重建索引的一种有效的办法,可以用来将一个索引移到新的表空间。
缺点:重建期间需要额外空间。
1.3 、 使用 alter index index_name coalesce 命令重建索引。
使用带有coalesce参数时重建期间不需要额外空间,它只是在重建索引时将处于同一个索引分支内的叶块拼合起来,这最大限度的减少了与查询过程中相关的潜在的加锁问题,但是,coalesce选项不能用来将一个索引转移到其他表空间
alter index index_name coalesce;
优点:重建期间不需要额外空间。
缺点:coalesce选项不能用来将一个索引转移到其他表空间
--select 'alter index ' || a.segment_name || ' rebuild tablespace NG_INDEX online;' from dba_segments a where a.segment_type = 'INDEX' and a.owner = 'AMS20130223';
12.view
视图以经过定制的方式显示来自一个或多个表的数据
视图可以视为“虚拟表”或“存储的查询”
创建视图所依据的表称为“基表”
视图的优点有:
提供了另外一种级别的表安全性
隐藏的数据的复杂性
简化用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据
视图: 是一个表或多个表的逻辑表示,它对应一条select语句,并且其查询结果将被作为一张表对待,所有视图也被称为虚表。
视图的创建:create view view_name as select * from table_name where(condition);
视图的修改:create or replace view view_name(视图列的别名) as select * from table_name;
视图的删除:drop view view_name;
显示视图信息:select * from user_views;
13.sequence 序列:是用于生成唯一数字的数据库对象。
建立序列:create sequence seq_deptno
start with 50
increment by 1
maxvalue 100
minvalue 10;
序列的使用:通过伪列nextval和currval来实现的 insert into mydept (deptno,dname,loc) values(seq_deptno.nextval,'DEVELOPMENT','DALLAS'); COMMIT;
序列的修改:alter sequence seq_deptno --只能改increment by num
increment by num;
序列的删除: drop sequence seq_name;
显示序列信息: select * from user_sequences;
注:oracle为该数据字典视图提供了同义词SEQ,可以使用SEQ取得序列信息。select * from seq;
不能用or replace
14.synonym 同义词:方案对象的别名;同义词包括:公共同义词和私有同义词。
创建同义词:公共同义词 create public synonym syn_name for [schema.]object schema:方案
私有同义词 create synonym syn_name for [schema.]object;
删除同义词:drop synonym syn_name;
查看同义词信息:select * from user_synonyms;
注:oracle为该数据字典视图提供了同义词syn,可以使用syn取得序列信息。select * from syn;
15.constraint: 约束:用于确保数据库数据满足特定的商业逻辑或企业规则。
约束包括NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK等5种类型。constraint_type => funpc
1). not null
create table table_name(column1 datatype [constraint cons_name] not null,column2 datatype....);
2).unique
create table table_name(column1 datatype ,column2 datatype.... ,[constraint cons_name] unique(column));
3).primary key
create table table_name(column1 datatype,column2 datatype [constraint cons_name] primary key,column3 datatype....);
4).FOREIGN KEY
create table table_name(column1 datatype,column2 datatype [constraint cons_name] references table(column),column3 datatype....);
5).check create table table_name(column1 datatype,column2 datatype....,check(condition));
增加约束的格式:
1)alter table table_name add [constraint cons_name] constraint_type (column,....);
2)alter table table_name modify columnname [constraint cons_name] not null;
1).not null alter table table_name modify columnname [constraint cons_name] not null;
2).unique alter table table_name add [constraint cons_name] unique(column);
3).primary key alter table table_name add [constraint cons_name] primary key(column);
4).foreign key alter table table_name add [constraint cons_name] foreign key(column) references tablename(column);
5).check alter table table_name add [constraint cons_name] check(condition);
alter table emp add constraint cons_unique_sal unique(sal);
alter table emp add constraint cons_fk_deptno foreign key(deptno) references dept(deptno);
alter table emp add constraint cons_pk_emp primary key(empno);
alter table table_name add constraint cons_ck check(sal > 800 AND comm IS NOT NULL);
删除约束: alter table table_name drop constraint cons_name;
查看约束: select * from user_constraints;
查看当前用户约束所对应的表列: select * from user_cons_columns;
alter table EMP
drop constraint FK_DEPTNO;
alter table EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
references DEPT (DEPTNO) ON DELETE cascade ; --级联删除
启用/停用约束
alter table table_name enable constraint cons_name;
alter table table_name disable constraint cons_name;
16.块 块(block)是pl/sql的基本程序单元;块由三个部分组成:定义部分、执行部分、例外处理部分。
declare
/*
* 定义部分(定义变量、常量、复杂数据类型、游标)
*/
begin
/*
* 执行部分(pl/sql语句)
*/
exception
when others then
...
rollback;
/*
* 例外处理部分(处理运行错误)
*/
end;
17.控制结构语句 条件语句:包括了3种语句if-then、if-then-else、if-then-elsif。
if condition then
statements;
[elsif condition then
statements;]
[else statements;]
end if;
循环语句: 包括了基本循环、while循环、for循环等3种类型。
1).基本循环 loop
statement;
....
exit [when condition];
end loop;
2).while循环 while condition loop
statament;
statament;
statament;
....
end loop;
3).for循环 for counter in [reverse] n1..n2 loop
statament;
statament;
statament;
....
end loop;
pl/sql中赋值 :=
18.cursor: 游标:定义游标、打开游标、提取数据、关闭游标。
cursor cv_name is select * from table where (condition); --定义游标
open cv_name; --打开游标
fetch cv_name into variabel1[variabel2,variable3,....];
close cv_name;
1).简化写法 for 一行元素 in 游标 loop
一行元素.属性;
一行元素.字段;
end loop;
例:
declare
cursor cv_emp_cursor is
select ename,sal,empno from emp order by empno;
begin
for v_emp in cv_emp_cursor loop
dbms_output.put_line('v_ename='|| v_emp.ename ||',v_sal=' || v_emp.sal || ',empno=' || v_emp.empno);
end loop;
end;
2).传统写法 fetch cursor_name into variabel1[,variabel2,variable3,....];
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
v_empno emp.empno%type;
cursor cv_emp_cursor is
select ename,sal,empno from emp order by empno;
begin
open cv_emp_cursor;
loop
fetch cv_emp_cursor into v_ename,v_sal,v_empno;
exit when cv_emp_cursor%notfound;
dbms_output.put_line('v_ename='|| v_ename || ',v_sal=' ||v_sal|| ',v_empno='|| v_empno);
end loop;
close cv_emp_cursor;
end;
19.procedure: 过程:用于执行特定操作的pl/sql块.
过程中的参数有三种模式:in(输入) out(输出) in out(输入输出)
过程的建立: create or replace procedure proc_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....)
is/as
---定义变量
begin
---body 注意:select into的用法。
end;
过程的调用: call proc_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
exec proc_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
删除过程:drop procedure proc_name;
查看过程源代码: select * from user_source;
查看过程 SELECT * FROM user_procedures;
过程中无参时,定义时不能有() create or replace procedure proc_name is/as begin end;
调用时,一定要有() call proc_name();
20.function: 函数: 用于返回特定数据.
函数和过程的区别是函数有返回值,过程没有返回值.
函数中的参数有三种模式:in(输入) out(输出) in out()
函数的建立: create or replace function func_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....) return datatype
is/as
---定义变量
begin
---body
end;
函数的调用: call func_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
exec func_name(argumeng1 [mode1] datatype1,argument2 [mode2] datatype2,....);
函数的删除:drop function func_name;
查看函数源代码: select * from user_source;
查看函数 SELECT * FROM user_objects a WHERE a.object_type = 'FUNCTION';
21.package: 包:用于逻辑组合相关的自定义类型、常量、变量、游标、过程、函数。包由包体和包规范两部分组成。
包的创建:create [or replace] package pkg_name
is|as
——定义
procedure proc_**();
function func_**();
end;
包体的创建:
create [or replace] package body pkg_name
is|as
——定义
procedure proc_**()
begin
...
end;
function func_**()
begin
...
end;
end;
22.trigger: 触发器:存放在数据库中,并且被隐含执行的存储过程。触发器分语句触发器和行触发器。
语句触发器的语法: create [or replace] trigger trg_name
{before|after|instead of} insert [or update or delete] of 字段
on table_name
[declare]
pl/sql block;
行触发器的语法: create or replace trigger trg_name
{before|after|instead of} insert [or update or delete] of 字段
on table_name
[REFERENCING NEW AS New OLD AS Old]
for each row [when condition] when new. old.
[declare]
pl/sql block;
注意:
触发器中不能有commit;
insert时,old的值为空值。
禁止/激活触发器 alter trigger trg_name enable;
alter trigger trg_name disable;
删除:
drop trigger trg_name;
显示触发器信息 select * from user_triggers;
--触发器通过insert update delete是不能触发自己的
--如果要写用如下方法:
CREATE OR REPLACE TRIGGER trg_emp
BEFORE INSERT ON emp
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
BEGIN
:NEW.sal := 1000;
END;
--------------------------------------------
if inserting then
elsif updating then
elsif deleting then
end if;
类名Change
23.java source : create or replace and compile java source named Change
as
java代码
删除:
drop java source Change;
调用:
CREATE OR REPLACE FUNCTION xchg(v NUMBER) RETURN VARCHAR2
AS
LANGUAGE JAVA NAME 'com.waytojob.pub.Change.trans(double) return java.lang.String';
24.表空间
DROP TABLESPACE USERS1 INCLUDING CONTENTS AND DATAFILES;
--保证先要有目录
CREATE [UNDO撤消表空间] TABLESPACE USERS1 DATAFILE
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS011.DBF' SIZE 5M AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED;
25.临时表空间
DROP TABLESPACE TEMP1 INCLUDING CONTENTS AND DATAFILES;
--保证先要有目录
CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP011.DBF' SIZE 20M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED;
--给表更改表空间. 一定注意,修改表空间后,原来表上的索引全部失效,需要重新rebuild。!!!!!!!!!!!
alter table tablename move tablespace newTableSpace;
alter user username
--限额
quota 大小(unlimited无限大) on users1;
26.dblink
-- Drop existing database link
drop public database link REMOTE_01;
-- Create database link
--不能OR replace连用
create public database link REMOTE_01
connect to scott identified by "tiger"
using 'localhost:1521/orcl';
调用: 表@dblink名
SELECT * FROM emp@remote01;
drop public database link REMOTE_01;
CREATE public database link REMOTE_01
connect to scott identified by "tiger"
using '192.168.1.133:1521/test';
SELECT * FROM SCOTT.EMP@REMOTE_01 a,dept b WHERE a.deptno = b.deptno;
-- Create the synonym
create or replace synonym REMOTE_EMP
for SCOTT.EMP@REMOTE_01;
SELECT * FROM remote_emp a,dept b WHERE a.deptno = b.deptno;
27.内置函数 数字函数: ROUND TRUNC MOD ABS CEIL EXP FLOOR LOG POWER....
字符函数: UPPER LOWER LENGTH TRIM INSTR CONCAT SUBSTR substr LPAD RPAD....
日期时间函数:MONTHS_BETWEEN ADD_MONTHS NEXT_DAY ....
转换函数: TO_CHAR() TO_DATE() TO_NUMBER()
聚合函数: SUM() AVG() MAX() MIN() COUNT()
28.数据库数据的恢复 1). 当使用drop语句删除数据库数据时,我们可以在pl/sql中browse中的Recycle bin文件夹中找到被drop的文件,右击restore;
也可以通过查看回收站来查看,在通过sql恢复
SELECT * FROM USER_RECYCLEBIN a order by a.droptime desc;
flashback table t_test to before drop ;
--如果存在同名的,就需要恢复时重命名
flashback table t_test to before drop rename to t_test1 ;
清空回收站 purge recyclebin;
清空回收站的某个表 purge table "BIN$/UpBuh+LQ9yZGN95BFsk5Q==$0";
2). 如使用delete语句删除数据库数据时,我们使用flashback_transaction_query;
select * from flashback_transaction_query where (condition);
flashback table t_patrolpoint to timestamp to_timestamp('13-08-28 15:00:05','yy-mm-dd hh24:mi:ss');
alter table t_patrolpoint enable row movement;
imp username/pwd@IP:port/sid file=要导入dmp的路径 full=y 如:imp scott/tiger@localhost:1521/orcl file=c:\1.dmp full=y
exp username/pwd@IP:port/sid file=要导出dmp的路径 如:exp scott/tiger@localhost:1521/orcl file=c:\2.dmp
exp/imp
下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
--exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
exp mohurd1/mohurd1@192.168.1.250:1521/orcl file=c:\mohurd1_20120116.dmp log=c:\mohurd1_20120116.log
imp mohurd3/mohurd3@192.168.1.250:1521/orcl fromuser=mohurd2 touser=mohurd3 file=c:\mohurd2.dmp log=c:\mohurd2.log
上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
不过在上面命令后面 加上 compress=y 就可以了
数据的导入
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
29、Oracle缓存表(db_buffer_pool)由三部分组成:
1、buffer_pool_defualt
2、buffer_pool_keep
3、buffer_pool_recycle
如果要把表钉死在内存中,也就是把表钉在keep区。相关的命令为:
alter table 表名 storage(buffer_pool keep); 这句命令把表示表如果缓存的话是缓存在keep区。
可以通过语句:
select table_name from dba_tables where buffer_pool='KEEP';查询到该表是放在keep区中的。 但是不意味着表已经被缓存了。
下面的语句把表缓存:
alter table 表名 cache; 可以通过
select table_name from dba_tables where rtrim(cache)='Y'; 查询到该表已经被缓存了。
加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。
也可以手工来移出内存,命令如下:
alter table ... nocache;
30、start with…connect by prior
SELECT ……
FROM ……
[WHERE CONDITION1 AND CONDITION2]
CONNECT BY {PRIOR列名1=列名2|列名1=PRIOR裂名2} [CONDITION3……]
[START WITH];
CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。
PRIOR运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在父节点的一侧,另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
将condition放在where后和放在CONNECT BY的区别:
放在where后是对整个树形结构的结果进行过滤,即使父节点不满足条件,子节点也会查询出来(从父到子结构查询);而放在CONNECT BY后,是在获取树形结构时进行过滤,如果父节点不满足条件,子节点是不会被查询出来(从父到子结构查询)
31、LOBINDEX、LOBSEGMENT
当我们建立一个含有lob字段的表时,oracle会自动为lob字段建立两个单独的segment,一个用来存放数据(LOBSEGMENT),另一个用来存放索引(LOBINDEX),并且它们都会存储在对应表指定的表空间中。但是当我们用alter table tablename move tablespace tbs_name 来对表做空间迁移时,只能移动非lob字段以外的数据。而如果我们要同时移动lob相关字段的数据,我们就必需用如下的含有特殊参数据的文句来完成,它就是: alter table tablename move lob(columeName) store as (tablespace newTableSpaceName);
这样,就将这两个对象从老的表空间移至新的表空间。
32、分区表
分区的优点:
1、增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
2、减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,矿能比整个大表修复花的时间更少;
3、维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;
4、均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
5、改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快,在数据仓库的TP查询特别有用。
6、分区对用户透明,最终用户感觉不到分区的存在。
--查询分区part_15的数据
select * from t_task partition(part_15);
--查询子分区part_15_1的数据
select * from t_task subpartition(part_15_1);
分区维护:
(1)增加一个分区:分区范围只能往上增,不能增加一个少于原有的分区:
--添加分区
alter table t_task add partition part_11 values(11);
--添加分区、子分区
alter table t_task add partition PART_11 values(11) tablespace ng_data (
subpartition PART_11_1 values (1) tablespace ng_data,
subpartition PART_11_2 values (2) tablespace ng_data
);
--在已有的分区中添加子分区
alter table t_task modify partition PART_11 add subpartition PART_11_1024 values (1024) tablespace ng_data;
(2)合并分区:(合并后的分区必须指下最后一个大value的分区)
alter table t_task merge partitions part_11,part_12 into partition part_13
(3)删除一个分区:
--删除分区
alter table t_task drop partition part_01
--删除子分区
alter table T_TASK drop subpartition PART_17_DEFAULT;
(4)将分区改名
alter table T_TASK rename Partition part_01 to part_011
(5)将分区改表空间
alter table T_TASK move part_01 tablespace ng_data nologging
(6)查询特定分区
select * from t_task partition(part_15);
select * from t_task subpartition(part_15_1);
(7)添加数据
insert into table_name select * from table_name partition (partition_name)
(8)分区表的导出
userid=USER/PWD
buffer=102400
tables=table_name:partition_name,
file=E:exp_paraxxx.dmp
log=E:exp_paraxxx.log
未完待续……
发表评论
-
使用数据泵导入,出现ORA-39171、ORA-03233报错
2014-04-12 16:59 19602在使用数据泵导入dmp时,出现下面的报错: 出现上面的问题 ... -
数据泵导入报错 ORA-39001、ORA-39000、ORA-31640、ORA-27041、ORA-04002、O/S-Error
2014-04-12 15:43 11234出现上述错误,请确保一下几点: 1、确保directory ... -
oracle中LOBINDEX、LOBSEGMENT迁移表空间
2013-07-24 10:26 5081当我们建立一个含有lob字段的表时,oracle会自动为lob ... -
oracle中约束、表和列名之间的查询,表空间查询
2012-03-20 16:39 19911、查询约束 SELECT USER_CONS_COLUM ... -
Oracle中index by binary_integer的作用
2011-09-08 15:32 2179如语句:type numbers is table of ... -
oracle中bulk collect into用法
2011-09-08 15:31 36941通过bulk collect减少loop处理的开销 采用bu ... -
完全卸载oracle服务器步骤
2011-01-20 18:45 2459卸载oracle服务器的步骤 1、停服务。在服务里将所有关于o ... -
view view_name has errors 原因
2010-12-14 10:47 1548刚才遇到这样一个问题。 我们系统有部分表是通过视图允许别的系统 ...
相关推荐
Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
Oracle学习笔记 Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接...
在Oracle学习笔记中,对安装卸载和配置的详尽讲解,不仅为学习者提供了操作指导,而且还涉及到了数据库管理的一些基础知识点。这些内容对于数据库管理员和开发人员来说都是十分重要的,因为它们是操作Oracle数据库的...
Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...
资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...
以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...
### Oracle 学习笔记知识点概览 #### 一、Oracle 数据库系统参数查询与管理 在 Oracle 数据库的学习过程中,了解如何查看和管理数据库的系统参数是非常重要的。这些参数直接影响着数据库的性能和稳定性。 ##### ...
ORACLE学习笔记:日常应用、深入管理、性能优化.part1
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...
全网最全的oracle学习笔记,oracle学习笔记,oracle,### 4、oracle的七个服务 ```sql 1、Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如...
根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。
### Oracle 学习笔记知识点详解 #### 一、Oracle 数据库简介 Oracle 是一款由美国甲骨文公司开发的关系型数据库管理系统。它以其强大的数据处理能力、高度的安全性及稳定性而闻名于世,在金融、电信、政府等领域...
Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...
在“MSDN Oracle学习笔记”中,我们可以期待找到关于Oracle数据库的详细讲解和实践指导。 首先,Oracle数据库的基础知识是必不可少的。这通常涵盖数据库系统的基本概念,如SQL(结构化查询语言)的使用,数据类型,...
oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记