第一章主要是对oracle数据库的介绍,PL/SQL的组成部分介绍,大概可以分为三个部分,declar部分,begin部分,和最后的结束部分end,其中的declar是用来定义的部分,begin 是执行的部分,其中还包括异常的处理,大概的组成,可以由下面的例子说明//定义部分
declare
v_date date;
//执行部分
begin
v_date :=sysdate+1;
dbms_output.put_line(v_date);
when date_not_found then
………………..
//执行部分
end;
PL/SQL的运行机制:
首先是PL/SQL发送到oracle服务器,然后可将PL/SQL分为PL/SQL引擎处理的PL/SQL 块和SQL引擎处理的SQL块。
相比其他的数据,orcale数据具备很多其他数据库没有的功能,也可以说是oracle的优势所在:1、提高应用程序的性能,因为PL/SQL是把select作为一个单个的单元发送的,然后交给PL/SQL来执行的。2、提高模块化程序开发能力,3、具有良好的兼容性,4、允
主要可以分为共享内存区(SGA)和非共享内存区(PGA),其中的SGA是重点掌握部分,SGA主要又可以分为以下几个部分:1、数据库缓存区:用来保存从磁盘读取的数据保存,这样,在下次访问的时候不需要再去读取数据,减少读写动作,提高数据的存取效率。2、重做日志缓冲区:主要是用于数据库损坏时候可以进行必要的恢复工作,3、共享池:主要是对SQL,PL/SQL程序进行语法解析,编译执行的内存区域。
序列的创建:创建一组基本连续唯一的值,主要用于数据库表主键的自动增长,下面是一个创建序列的实例:
Create sequence 序列名,
然后还可以对序列进行一系列的设置,设置最大或者最小值,每次增长的值,开始的值等等。
第二章可以说是第一章的深入,详细介绍了PL/SQL块的结构,分为三个部分:定义部分,执行部分,异常处理部分,其中定义部分用于定义常量,变量,游标,用户自定义异常,复杂数据类型等,执行部分用于实现应用模块功能,该部分包含了要执行的PL/SQL语句和SQL语句,而异常部分则是处理在执行过程中可能出现的错误。
PL/SQL块的类型:1、匿名块:表示的是没有名称的PL/SQL块2、子程序:过程、包、触发器,对过程的创建,包的创建,触发器的创建,还有函数的创建有一个基本的了解,能创建出过程,包,函数和触发器等。
函数:create or replace function 函数名
过程:create or replace procedure 过程名字
包:create or replace package 包名is …..begin……end(创建包规范,里面一般是定义的变量,函数,过程等)。
Create or replace package body 包名is…..begin…..end(包体部分,实现包规范中定义的函数,过程等)。
触发器:create or replace trigger 触发器名,触发器感觉有点像监听器,也就说,我在执行某个sql语句的时候,触发某个动作。
数据的类型:与其他的数据相比,有一定的差别,但是相对来讲的话,这个部分还是比较简单的,常用的数据类型:number varchar2 date Boolean 等等。
%type的使用,大概的意思就说,如果一个表,我需要引用其他表的数据类型时候,我们可以在类型定义的时候,写成表名.字段名%type,这样就可以得到和引用表某个字段一样的数据类型了。
%rowtype运用与上面的差别不是很大,大多的类型的引用,主要这个是用于一行多列的数据处理,比如我们在接受多个参数时候,或者定义sql记录的时候一般用%rowtype,例如:变量名表名%rowtype
第三章主要是对程序控制结构的介绍、
1、条件控制语句
1.1:if语句:用于根据条件,执行两个代码块之一。
语法:
If 条件then
执行语句一
Elsif 条件then
执行语句二
Else
执行语句
End if;
实例:
declare
v_se number;
begin
--select max(max_salary) into v_se from jobs;
if updating then
if :old.job_title='manager' then
raise_application_error(-20001,'manager不能修改');
end if;
end if;
if deleting then
if :old.max_salary=88800 then
raise_application_error(-20002,'这人不能删除');
end if;
end if;
if inserting then
if :new.job_title='cao' then
raise_application_error(-20003,'不能插入');
end if;
end if;
end;
1.2、case多条件选择(多碰到很多条件的时候,可以用case进行选择,然后执行满足条件的语句)
语法:
case 后接表达式
when 后接具体的值then
....
when .. then
else
.....
end case;
实例:
declare
str varchar2(1);
begin
--提示输入字符串
str:='&str';
case str
when 'C' then
dbms_output.put_line('不及格');
when 'B' then
dbms_output.put_line('优良');
when 'A' then
dbms_output.put_line('优秀');
else
dbms_output.put_line('其他');
end case;
end;
从上例中运行时候我们可以看到,当我们输入的是C的时候,打印出的时候是不及格,
然后当我们输入的是A 的时候打印出来的是优秀。
2循环控制语句
2.1、loop循环
语法:
loop
statement1;
......
exit [when condition]
end loop;
实例:
declare
i number(6):=10;
begin
loop
insert into tmp values(i,'值'||i);
exit when i=0; --循环终止语句
i:=i-1;
end loop;
dbms_output.put_line('数据入库完毕');
end;
2.2 、while循环
语法:
while 条件loop
执行语句
.....
end loop;
实例:
declare
i number(6):=1;
begin
while (i<=10)
loop
insert into tmp values(i,'值'||i);
i:=i+1;
end loop;
end;
2.3、for循环
语法:
for 循环控制变量in 循环控制边界值loop
执行语句
.......
end loop;
实例:
declare
i number(3);
begin
for i in 1..10 loop
dbms_output.put_line(i);
end loop;
end;
3、异常的处理
引发异常的可能:1、由系统产生的错误,2、由用户行为导致的错误,3、由应用程序发给用户的警告。
实例:
declare
v_empname varchar2(50);
v_salary number(6,2);
ex exception;--自定义一个异常
pragma exception_init(ex,-10430);--将自定义异常绑定到异常代码10430上
begin
select empname into v_empname from emp where empno=&no;
select salary into v_salary from emp where empno=&no;
if v_salary>=4000 then
raise ex;
--raise_application_error(-10430,'cuollllll');
end if;
exception
when no_data_found then
dbms_output.put_line('没有对应的员工名字!!');
dbms_output.put_line(sysdate);
when ex then
dbms_output.put_line('需纳个人工资所得税!!'||sqlcode);
end;
第四章在PL/SQL中更改数据和事务管理。
1.DML操作游标属性(隐式游标)
隐式游标:所有的修改,删除,添加动作都能直接执行,在查找的时候只能返回一条记录,如果要返回多行记录集合则需要采用显示游标。
属性:
sql%found 是个布尔类型的值,影响了数据库中的记录返回True,否则是false
sql%notfound 与sql%found的相反
sql%rowcount 表示影响的记录数(整数)
sql%isopen 是个布尔类型的值,如果游标打开则为TRUE,否则false,隐式游标总为false DML语句的returning字句。
如果我们要得到sql语句执行后的信息,我们则可以在其后面加上returning字句。
2、使用forall语句的批量DML
使用ForAll语句可以让PL/SQL引擎一次将多条SQL转发给SQL引擎,
从而减少转发次数,提高系统性能。
forall 其主要作用:减少PL/SQL引擎与SQL引擎之间传递数据的次数
forall语法:
forall index in lower_bound..upper_bound
sql语句;
实例:
declare
v_monthbt number(5,2);
type str_type is table of varchar2(50)index by binary_integer;
type id_table_type is table of number(3)index by binary_integer;
name_table str_type;
money_table str_type;
id_table id_table_type;
begin
for i in 1..5
loop
select months_between(sysdate,btime) into v_monthbt from backuser where bid=i;
if v_monthbt between 6 and 12 then
money_table(i):=100;
elsif v_monthbt between 12 and 24 then
money_table(i):=200;
elsif v_monthbt>=24 then
money_table(i):=500;
else
money_table(i):=0;
end if;
id_table(i):=i;
end loop;
forall i in 1..money_table.count
update backuser set balance=balance+money_table(i) where bid=id_table(i)
returning bname bulk collect into name_table;
for i in https://www.doczj.com/doc/dc17002538.html,_table.count
loop
dbms_output.put_line(name_table(i)||' '||'利息'||money_table(i));
end loop;
end;
3、PL/SQL中的数据库事务管理
什么是事务:一组sql语句组成的一个逻辑工作单元看作
是一个事务,这些sql语句是不可分割的,具有动作一致性,
即要么全部成功执行,要么全部失败。
事务的4个属性:
1. 原子性:事务是一个不可分割的单元
2. 一致性:
3. 隔离性:每个事务独立于其他事物,并且事务中的操作同时发生
4. 持久性:确保事务完成后,对数据修改是永久性的。
在事务中,如果有问题发生,所有成功的DML操作都被撤销,
所有的东西都恢复到开始事务前的状态。
撤销成功操作的过程叫做事务回滚rollback,
反之,如果所有操作成功,我们就说事务已经被提交commit,
当一个事务提交后就不能回滚了。
事务包含如下几个方面:
1. 开始事务
2. 执行事务
3. 提交事务
4. 回滚事务(全部回滚,部分回滚)
实例:
--全部回滚
begin
insert into demo values(111,'zs');
insert into demo values(112,'lisi');
insert into demo values(113,'55555555555555555555555555555555');
commit;
exception
when others then
dbms_output.put_line('33333');
rollback;
end;
--部分回滚
create table test(
id int,
tname varchar(10)
)
begin
insert into test values(1,'eee');
savepoint a; --保存点名称
insert into test values(2,'bb');
savepoint b;
insert into test values(3,'bb');
rollback to savepoint a; --设置部分回滚点 a --如果后面在加一句insert into test values(4,'www');会有啥情况?
exception
when others then
dbms_output.put_line('333');
rollback;
end;
第五章如何在PL/SQL使用游标获取数据,
游标分为隐式游标和显示游标
隐式游标:
每次执行一个返回单行的select into时,都会声明和管理一个隐式游标,oracle自动处理游标的操作自动为我们声明,打开,提取记录,关闭游标。
注:如果运用隐式游标获取多行记录,则必须用显示游标或者带bulk collect子句的select 语句,其语法规则:..bulk collect into 集合名
2. 显示游标
显示游标用在需要获取多行记录的情况下,使用显示游标必须
手动地在声明部分定义他,必须手动对该游标执行
打开,提取数据,关闭等。
显示游标的语法:
1.声明显示游标
cursor 游标名[(游标参数)] [return 返回值规范]
is select 语句
[for update ];
2. 打开游标
open 游标名
3. 从显示游标中提取数据
用fetch 游标名称into 记录或者变量列表
(此地方还可以用for循环的方式,来提取数据,与前面的不同,这里的for循环的语法规则是:
for 记录in 游标名
loop
执行语句
end loop;)
4. 关闭游标
close游标名
3动态游标的使用
语法:
1. 定义ref cursor类型的游标变量
1.1 创建一个引用游标类型
语法:type 游标名is ref cursor [return return_type]
1.2 基于该类型,定义实际的游标变量
2. 打开游标变量:意味着为游标变量赋一个游标对象值。
语法:open 游标名for 查询语句
3. 从游标变量中提取数据
4. 关闭游标
注:动态游标可以分为弱类型和强类型。
与弱类型不同,强类型有返回类型,也就是说在在创建动态游标的时候,需要返回制定的类型数据。(例:type jobs_cur_type is ref cursor return jobs%rowtype;)从例题中我们呢可以看到,我们创建的游标要求返回的类型必须符合jobs表的数据类型。
第六章动态sql
1.什么是动态SQL?
动态SQL是指在运行PL/SQL块时动态输入SQL语句。在PL/SQL块中只能执行DDL (create、alter、drop)、DCL
(grant、revoke)或比较灵活的SQL语句(如select子句不带where条件);
动态SQL的性能不如静态SQL,但是比较灵活;
在PL/SQL块中编写动态SQL语句时需要将SQL语句存放到字符串变量中而且SQL 语句可以包含占位符(以冒号开始);
2.动态SQL的语法
2.1 使用execute immediate语句
可以处理多数动态SQL操作如:DDL语句(create、alter、drop)、DML语句(insert、update、delete)、DCL(grant、revoke)以及单行的select子句;但是不能处理多行查询语句。
案例1:同时实现新建一个表并插入数据--create+insert+update+delete+insert declare
create_table varchar2(200);
insert_table varchar2(200);
update_table varchar2(200);
delete_table varchar2(200);
re_insert_table varchar2(200);
begin
create_table:='create table &table_name (sid int, sno int)';
execute immediate create_table ;
insert_table:='insert into &table_name values (&sid, &sno)';
execute immediate insert_table;
update_table:='update &table_name set &column_name=&new_value where sid=&old_value';
execute immediate update_table;
delete_table:='delete from &delete_tablename';
execute immediate delete_table;
re_insert_table:='insert into &re_table_name values (&new_sid, &new_sno)';
execute immediate re_insert_table;
end;
案例2:动态绑定插入数据(insert)
create table temp(
userId number,
userName varchar(20)
)
declare
v_sql varchar2(200);
v_tj varchar2(20);
begin
v_tj:='tt';
execute immediate 'insert into temp values(:userid,:tname)' using &userid,'&kk';--用绑定变量的方式
--v_sql:='insert into temp values(2,'''||v_tj||''')'; --直接字符串拼接
--dbms_output.put_line('v_sql'||v_sql);
--execute immediate v_sql;
commit;
end;
open for语句:
语法:open 游标for dynamic_string [using 参数];
例:
declare
type cursor_type is ref cursor;
mysor cursor_type;
row_backuser backuser%rowtype;
begin
open mysor for 'select * from backuser where bid=:no' using 5;
loop
fetch mysor into row_backuser;
exit when mysor%notfound;
dbms_output.put_line('姓名:'||row_backuser.bname||' '||'薪水:'||row_backuser.balance); end loop;
close mysor;
end;
--隐式游标bulk collect多行查询
declare
type cursor_type is table of backuser%rowtype index by binary_integer;
mysor cursor_type;
begin
execute immediate 'select * from backuser where deptno=:no' bulk collect into mysor using 10; for i in 1..mysor.count
loop
dbms_output.put_line('姓名:'||mysor(i).bname||' '||'薪水:'||mysor(i).balance);
end loop;
end;
--动态创建表格
declare
v_table_sql varchar2(4000);
v_sql varchar2(4000);
begin
v_table_sql:='create table mytemp('||
'id number(3) not null,'||
'username varchar2(20) not null,'||
'pwd varchar2(50) not null'||'
)';
execute immediate v_table_sql;
v_sql:='insert into mytemp values(1,''wangwui'',''wangwu'')';
execute immediate v_sql;
v_sql:='insert into mytemp values(2,''sashenwan'',''sashenwan'')';
execute immediate v_sql;
v_sql:='insert into mytemp values(3,''yidu'',''yidu'')';
execute immediate v_sql;
v_sql:='insert into mytemp values(4,''dentity'',''dentity'')';
execute immediate v_sql;
end;
第七章主要讲的是子程序和包的运用
子程序中包括,存储过程,函数和包,在第二章我们已经介绍了存储过程的创建,函数的创建以及包的创建。而在这一章进行了详解运用介绍。
相比较SL/SQL的匿名块,子程序则可以看成是命名的SL/SQL块,其中可以带参数,并可以再需要的时候进行调用,
子程序可以具备声明部分,可执行部分和异常处理部分,具体可以通过下面的例题看出来--创建过程(输入)
create or replace procedure my_name(v_name in varchar2)
is
v_salary backuser.balance%type;
v_bid backuser.bid%type;
begin
select bid,balance into v_bid,v_salary from backuser where bname=v_name;
dbms_output.put_line('员工编号:'|| v_bid ||' '|| '薪水:'|| v_salary);
end;
begin
my_name('欧少杰');
end;
--创建过程(输出)
create or replace procedure my_name(v_name out varchar2,v_salary out number) is
begin
select bname,balance into v_name,v_salary from backuser where bid=3;
dbms_output.put_line('员工姓名:'|| v_name ||' '|| '薪水:'|| v_salary);
end;
declare
name backuser.bname%type;
salary backuser.balance%type;
begin
my_name(name,salary);
end;
--创建过程(输入输出)
create or replace procedure my_name(v_inout in out varchar2) is
begin
select balance into v_inout from backuser where bname = v_inout;
dbms_output.put_line('薪水:'|| v_inout);
end;
name backuser.bname%type:='欧少杰';
begin
my_name(name);
end;
创建函数,并调用函数:
create or replace package get_backuser_info
is
type my_sor is ref cursor;
function backuser_info return my_sor;
end get_backuser_info;
create or replace package body get_backuser_info
is
function backuser_info return my_sor
is
v_my_sor my_sor;
begin
open v_my_sor for select * from backuser where balance>=3000 and balance<=4000;
return v_my_sor;
end;
end get_backuser_info;
declare
v_mycur get_backuser_info.mysor;
type backuser_type backuser%rowtype index by binary_integer;
my_backuser backuser_type;
begin
v_mycur:=get_backuser_info.backuser_info;
fetche v_mycur bulk collect into my_backuser;
for i in 1..my_backuser.count
loop
dbms_output.put_line('姓名:'||my_backuser(i).bname||' '||'薪水:'||my_backuser(i).balance);
end loop;
end;
3包是一种数据库对象,它是对相关PL\SQL类型,子程序,游标,异常变量以及常量的封装。它由量部分组成,即包规范和包体,其中包规范可以看成是声明部分,而包体则是包规范部分的具体实现,具体的运用我们参照下面的例题。
包规范:
create or replace package pk_04
is
procedure v_my_name(v_name in number,v_sal out number);
function v_my_sal(v_sal in varchar2) return number;
end pk_04;
create or replace package body pk_04
is
procedure v_my_name(v_name in number,v_sal out number)
is
begin
select balance into v_sal from backuser where bid=v_name;
end;
function v_my_sal(v_sal in varchar2) return number
is
v_myname number(10);
begin
select balance into v_myname from backuser where bname=v_sal;
return v_myname;
end;
end pk_04;
select*from backuser
declare
v_show number;
v_showe number;
begin
pk_04.v_my_name(7499,v_show);
v_showe:=pk_04.v_my_sal('SMITH');
dbms_output.put_line(v_show);
dbms_output.put_line(v_showe);
end;
第八章是对数据库触发器的介绍
数据库触发器是一种PL/SQL命名块,是数据库中的一种较为复杂的用来强制业务的规则,数据库完整性和一致性,是存放在数据库中,在特定的事件发生时,可以自动被数据库执行,给人的感觉就想java应用程序中的监听事件,比如我们在做某一件事情的同时发生另外一件事情。
触发器的触发可以分为语句执行之前(before)或者执行之后,(after)
触发器可以分为行级触发器和语句触发器,行级触发器每作用一行就要触发一次触发器New伪记录;类似于pl/sql中的记录,只能在update 和insert DML触发器内可用,它包含了修改发生后被影响的行的值。
old伪记录:只在update和delete DML触发器内可用,包含了修改发生之前被影响的行的值。
when子句,决定触发器中某段代码是否被执行
创建触发器语法:
create [or replace] trigger 触发器名称
before| after --触发时间
insert | update | delete | update of 列名on 表名--指定触发器应用的类型
[for each row] --行级触发器,每行触发一次
begin
[exception ...]
end;
--创建序列
create sequence tempid
select tempid.NextVal from dual;
--创建触发器
create or replace trigger trigs
before
insert on temp
for each row
begin
select tempid.nextval into :new.id from dual;
end;
--谓词的运用
select * from backuser
create or replace trigger v_adi
before delete or update or insert
on backuser
for each row
begin
--工资为8700的员工不能删除,修改
if deleting then
if :old.balance=8700 then
raise_application_error(-20001,'该员工信息不能删除');
end if;
end if;
if updating then
if :old.balance=8700 then
raise_application_error(-20002,'该员工的信息不能修改');
end if;
end if;
if inserting then
if :old.bname='你妹' then
raise_application_error(-20003,'不可插入不文明的用户');
end if;
end if;
end;
delete from backuser where balance=3500;
insert into backuser values(7,'你妹',3500.23,to_date('12-02-2008','dd-mm-yyyy'),1001);
update backuser set balance=5600 where balance=8700;
Oracle中分析函数用法小结 一.分析函数适用场景: ○1需要对同样的数据进行不同级别的聚合操作 ○2需要在表内将多条数据和同一条数据进行多次的比较 ○3需要在排序完的结果集上进行额外的过滤操作 二.分析函数语法: FUNCTION_NAME(
oracle视图总结(转) 视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。 视图的优点: 1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2.用户通过简单的查询可以从复杂查询中得到结果。 3.维护数据的独立性,试图可从多个表检索数据。 4.对于相同的数据可产生不同的视图。 视图的分类: 视图分为简单视图和复杂视图。 两者区别如下: 1.简单视图只从单表里获取数据,复杂视图从多表获取数据; 2.简单视图不包含函数和数据组,复杂视图包含; 3.简单视图可以实现DML操作,复杂视图不可以。 视图的创建: CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] 其中: OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图; FORCE:不管基表是否存在ORACLE都会自动创建该视图; NOFORCE:只有基表都存在ORACLE才会创建该视图: alias:为视图产生的列定义的别名; subquery:一条完整的SELECT语句,可以在该语句中定义别名; WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束; WITH READ ONLY :该视图上不能进行任何DML操作。 例如: Sql代码 1.CREATE OR REPLACE VIEW dept_sum_vw 2.(name,minsal,maxsal,avgsal)
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 例如这样一个查询:SELECT * FROM TABLE1 WHERE ID = 44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。 建立索引的目的是加快对表中记录的查找或排序。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。 虽然建立索引能加快对表中记录的查询或者排序速度,但是并不是索引建得越多越好,这就需要我们了解使用索引过程中,索引的一些优点以及缺陷: 使用索引的好处: 创建索引可以大大提高系统的性能: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。使用索引的一些不足: 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引: ?在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; ?在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; ?在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; ?在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; ?在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点: ?对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 ?对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了
1、在开发环境中连接到数据库,进行基本的select查询操作; 2、熟悉plsql的使用; 3、熟悉sqlplus相关命令(登录、查询、导入导出等) 登录sqlplus: 第一:使用dos窗口登录sqlplus Sqlplus 用户名/密码@数据库实例名 Sqlplus system/密码@数据库实例名as sysdba 第二:使用oracle自带的一个sqlplus登录,提供界面,显得更简单一些。 显示当前用户名:show user; 创建一个用户:create user 用户名identified by 密码; 给用户赋予登录的权限:grant connect to 用户名;(此时才可以使用这个用户来登录这个数据库。)给其赋予dba的权限。 修改用户的密码:alter user 用户名identified by 新密码; 查询: Select * from t_user; Select id from t_user; Select name from t_user; Select birthday from t_user; Select id,name from t_user; 导入导出: 导出表: (注意,导出表的exp命令不是在sqlplus下使用的,是在dos窗口下使用的命令。) exp userid=test/sa@test tables=(qx) file=d:\e1223.dmp exp userid=test/sa@test tables=(t_user,qx) file=f:\test.dmp 导出方案: Exp userid=test/sa@test owner=test file=f:\test2.dmp 导出数据库: Exp userid=test/sa@test full=y inctype=complete file=f:\all.dmp 导入表: 下面以一个例子来说明: 看下面的图,我的用户名test,密码sa,数据库实例名test,所有的表都在这里 现在我执行导出表JD的操作:exp userid=test/sa@test tables=(jd) file=f:\jd.dmp 在我的f盘下就出现了这么一个.dmp文件
constraint pk_spj primary key (sno,pno,jno), constraint fk_spj_sno foreign key (sno) references s(sno), constraint fk_spj_pno foreign key (pno) references p(pno), constraint fk_spj_jno foreign key (jno) references j(jno) 实验二游标和函数 1、定义一个游标完成显示所有供应商名。 declare v_sname s.sname%type; cursor cursor_sname is select sname from s; begin for curso in cursor_sname loop dbms_output.put_line(curso.sname); end loop; end; 2、定义、调用一个简单函数:查询返回指定供应商编号的供应商名及其供应零件总数量。create or replace function fun(f_sno in s.sno%type,f_sname out s.sname%type) return number as f_qty number; begin SELECT s.sname,sum(qty) into f_sname,f_qty from s,spj WHERE s.sno=spj.sno GROUP BY s.sname,spj.sno having spj.sno=f_sno; return f_qty; end; declare v_sno s.sno%type:='&sno'; v_sname s.sname%type; v_qty spj.qty%type; begin v_qty:=fun(v_sno,v_sname); dbms_output.put_line(v_sname||v_qty); end; 3、定义一个函数:对于给定的供应商号,判断是否存在,若存在返回0,否则返回-1。写一段程序调用此函数,若供应商号存在则在spj插入一元组。
Oracle实验总结 Oracle实验总结 Oracle实验总结 近日做了基于ORACLE的数据库安全、对象sql数据库,XML数据库的实验,其中遇到很多问题,先总结如下。 1、安装Oracle的过程中可以‘选择建立数据库’,也可以选择‘只安装软件’,后者可在安装好软件后,建立数据库,可参考网上的很多安装步骤。 2、Oracle的默认用户有sys和system,在命令行或者sQl*plus中登陆时,写法如下: Connectsys/123456assysdba;其中123456是密码,在创建数据库的时候设置的。 普通用户登录,connectzhangsan/123456; 3、grantselect不支持对表中选定的几列授权,只能将整个表的select权限授权出去。所以实验中先建立了基于选课信息表的视图SelectiveInfo1,视图中包含成绩列,学号列以及班级列(不包含其他的列),再将对视图SelectiveInfo1的select权限授予角色teacher。 4、创建用户的时候,一定要说明该用户对表空间的权限即(quotaunlimitedontablespace或者具体限定大小的句子),否则该用户即使被授予了建表权限,也不能建表。 创建用户的时候必须给用户授予createsession的权限,这是最基本的权限。 5、不同的用户可以创建相同的表格,例如,teacher用户创建了table1,student 用户也创建了table1,且这两个表格式完全相同的,那么其他用户需要用这两个表格时,可以用teacher.table1和student.table1加以区分。系统用户创建的
ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路... 今年我们学习了oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于oracle数据库的一些知识。 1.ORACLE的特点: 可移植性ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。 可联结性对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。 2.ORACLE的总体结构 (1)ORACLE的文件结构一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。 数据文件一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。 日志文件须有两个或两个以上,用来记录所有数据库的变化,
用于数据库的恢复。控制文件可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件含有数据库例程起时所需的配置参数。 (2)ORACLE的内存结构一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。 SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。 PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。 (3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程用来执行用户应用程序的。 ②服务进程处理与之相连的一组用户进程的请求。 ③后台进程ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。 SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON (Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。
oracle的sqlldr的使用总结 part i一:sql loader 的特点 oracle自己带了很多的工具可以用来进行数据的迁移、备份和恢复等工作。但是每个工具都有自己的特点。比如说exp和imp可以对数据库中的数据进行导出和导出的工作,是一种很好的数据库备份和恢复的工具,因此主要用在数据库的热备份和恢复方面。有着速度快,使用简单,快捷的优点;同时也有一些缺点,比如在不同版本数据库之间的导出、导入的过程之中,总会出现这样或者那样的问题,这个也许是oracle 公司自己产品的兼容性的问题吧。 sql loader 工具却没有这方面的问题,它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢,另外对blob 等类型的数据就有点麻烦了。 二:sql loader 的帮助 C:\>sqlldr SQL*Loader: Release 9.2.0.1.0 - Production on 星期六10月9 14:48:12 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 用法: SQLLDR keyword=value [,keyword=value,...] 有效的关键字: userid -- ORACLE username/password control -- Control file name log -- Log file name bad -- Bad file name data -- Data file name discard -- Discard file name discardmax -- Number of discards to allow (全部默认) skip -- Number of logical records to skip (默认0) load -- Number of logical records to load (全部默认) errors -- Number of errors to allow (默认50) rows -- Number of rows in conventional path bind array or between direct p ath data saves (默认: 常规路径64, 所有直接路径) bindsize -- Size of conventional path bind array in bytes(默认256000) silent -- Suppress messages during run (header,feedback,errors,discards,part itions) direct -- use direct path (默认FALSE) parfile -- parameter file: name of file that contains parameter specification s parallel -- do parallel load (默认FALSE) file -- File to allocate extents from skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默 认FALSE) skip_index_maintenance -- do not maintain indexes, mark affected indexes as unus
oracle体系结构总结 传统上Oracle体系结构由内存结构、进程结构、存储结构组成。其中,内存结构由SGA、PGA组成;进程结构由用户进程和Oracle进程组成;存储结构由逻辑存储、物理存储组成。 通过数据库的启动过程和一条sql的执行过程可以将oracle的内存结构、进程结构、存储结构串起来。 一、内存结构 (1)SGA(System Global Area):一个包含实例数据和控制信息的共享内存区域 (2)PGA(Program Global Area):一个包含服务器进程和后台进程的数据和控制信息的共享内存区域 1.1系统全局区SGA 系统全局区,是DB Server 中实例的必要组成部分,由很多小内存区共同构成,各个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程(包括server process 以及background process)共享的信息,对系统的运行性能有好处,SGA 在实例启动的时候自动分配,实例关闭时自动释放。 SGA 暂存系统的大量共享数据,对系统有相当的性能影响,所以需要为SGA 选择适当的管理方式,根据所使用的数据库版本不同,SGA 的管理有三种方式:1)8i:SGA 的大小由所有内存组件大小之和决定,不能直接定义SGA 大小,对内存组件的大小可后台进行修改,但只能通过直接修改参数文件的内存参数大小,而且修改完数据库必须重起后才能生效,所以这种内存管理方法叫做SGA 的静态管理。 2)9i:SGA 的大小由初始化参数SGA_MAX_SIZ E 确定,各个内存组件大小之和不能超过这个参数。可以直接通过命令进行修改内存组件大小而不用重启,这种叫做SGA 的动态管理
高级查询总结 A.层次查询:start with……connec by prior…….. select lpad(' ',3*level)||ename,job,level from emp start with mgr is null connect by prior empno=mgr; 从根结点向下查,lpad()为左添加,level为第几层,prior为查找的方向;此句若省掉start with….则表示要遍历整个树型结构;若出现level,则后面一定要跟connect by B.交叉报表(case when then end 与decode()) select ename,case when sal>=1500then sal*1.01 else sal*1.1 end工资 from emp; select姓名, max(case课程when'语文'then分数end) 语文, max(case课程when'数学'then分数end) 数学, max(case课程when'历史'then分数end) 历史 from学生group by姓名;------(交叉报表与函数一起使用) select ename,sum(decode(sal,'sal',comm,null)) 奖金from emp group by ename;--可实现分支 decode(条件,(值),(返回值),…………,(默认值)) 部门 select sal,decode(sign(sal-1500),-1,1.1*sal,0,1.1*sal,1,1.05*sal) from emp; C.连接查询 1.等值: select * from emp,dept where emp.deptno(+)=dept.deptno; ‘+’在左则以右表为主,反之亦然 2.非等值:where的运算符不是等号 3.自然连接: select * from emp natural join dept 4.99乘法: select * from emp e full join dept d using (deptno) where deptno=10; --where必须放在using(on)的后面 D集合查询: 1.A Union B:消除重复行,有all则可以重复,默认第一列升序select ename,sal from deptno=20 union select ename,sal from job=’CLERK’; 2.A intersect B:A与B的交集 select ename,sal from deptno=20 intersect select ename,sal from job=’CLERK’; 3.A minus B:在A中减去既属于A又属于B的一部分
Oracle数据库备份与恢复总结 1. EXP/IMP (导出与导入) (6) 1.1基本命令 (6) 1.获取帮助 (6) 2.三种工作方式 (6) 3.三种模式 (7) 1.2高级选项 (7) 1.分割成多个文件 (7) 2.增量导出/导入 (8) 3.以SYSDBA进行导出/导入 (8) 4.表空间传输(速度快) (8) 1.3优化 (10) 1.加快exp速度 (10) 2.加快imp速度 (10) 3.通过unix/Linux PIPE管道加快exp/imp速度 (10) 4.全库导入的一般步骤 (12) 1.4常见问题 (12) 1.字符集问题 (12) 2.版本问题 (13) 2. SQL*LOADER (14) 2.1基本知识 (14) 1.命令格式 (14) 2.控制文件 (14) 3.数据文件 (15) 4.坏文件 (16) 5.日志文件及日志信息 (16) 2.2高级选项 (16) 1. Conventional Path Load与Direct Path Load (16) 2. SPOOL导出文本数据方法 (16) 2.3脚本 (17) 1.将表中数据记录导出为字段值用分隔符'|'分开的.dat文件 (17) 2.将数据导入到相应表中 (18) 3. OS备份/用户管理的备份与恢复(USER MANAGED BACKUP AND RECOVERY) (20) 3.1相关设置 (20) 3.1.1设置ARCHIVELOG与NONARCHIVELOG模式 (20) 3.1.2 LOGGING与NOLOGGING (21) 3.1.3归档路径 (21)
学习Oracle数据库的心得体会 对于学习Oracle数据库,应该先要了解Oracle的框架。它有物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成),逻辑结构(表空间、段、区、块),内存分配(SGA和PGA)算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写,后台进程(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程),SCN(System Change Number)。这些东西感觉都比较专业,我对它们也就是个知道,想要真真去认识我还得努力去做。虽然懂得还不是很多,起码会了基本的软件操作,老师说我们用的都是客户端,服务端看不到,也不知道服务端是什么样的,只知道客户端就挺多东西的,没有真正的去学习利用是很难掌握的。 Oracle数据库的学习使我对数据库的有了新的进步,以后再看到也就不至于什么也不懂,其实那么多数据库我觉得学好一门就行,只是他们的语言可能不大一样,学好一门后就可去认识其它的,这样应该有事半功倍的效果。就像我学习C语言,当时不能说是学习的棒,但不算差。所以我对以后的语言感觉都不是很困难,了解了https://www.doczj.com/doc/dc17002538.html,、C++还有网页中用的Html 语言、asp语言都能看懂,起码可以对别人的东西进行了一下修改。因此,我感谢Oracle数据库老师给了我有用的知识,以便我在以后学习或认识更多的内容能有新的方法和思维,也能更加有效和快速的去消化吸收新的东西。希望在今后中,Oracle能给我更多帮助,让我在我熟悉的https://www.doczj.com/doc/dc17002538.html,中运用上去,我以前的一个目标是要为学校的选课做一个选课助手来帮助大学。不过因为种种原因一直没有完成,也包括我对数据库的不了解,因为学了Oracle以后知道第一项内容是通过SQL查询后得到的,如果去把它们联系起来还不是真正明白,不过我相信我的目标能在学习Oracle后得到进展。
Oracle知识点总结 根据阎赫老师讲义整理Zealjiang 1、Oracle数据库的安装和配置 ⑴Oracle Internet级数据库 SQLServer 中小企业级数据库 Access 桌面级数据库 ⑵Oracle的安装 注意:来源和目标的目录不允许有中文或空格 ⑶Oracle数据库启动时必需开启的后台服务 ①OracleOrahome90TNSListener 使第三方的软件或语言访问 ②OracleServiceETC Oracle的实例 CRUD 增删改查 注意:②中的ETC是你起的实例的名字 ⑷Oracle的开发工具 ①DOS界面的开发平台 -> 运行->sqlplus ②Oracle本身基于DOS的平台 ->运行-> sqlplusw ③Oracle Enterprise Manager Console ④PL/SQL Developer7.1.5 ⑸创建一个表的完整流程 ①创建一个数数库 例子:创建一个数据库 ETC , 物理文件放在F:\ ,初始化1m ,自增长开启 create tablespace etc
datafile 'f:\etc.dbf' size 1m autoextend on; 删除表空间 drop tablespace 数据库名称; ②为该数据库创建一个帐号和密码 语法: create user 用户名称 identified by 密码 default tablespace 数据库名称 注意:1、在Oracle中账号和数据库one2one绑定 2、Oracle的密码不允许为纯数字或空 3、需要在system账号完成动作 修改Oracle的账号密码 语法:alter user 用户 identified by 新密码 ③用grant 权限 to 用户为该帐户授权 语法: grant 权限名称 to 用户; 撤销权限 语法:revoke 权限名称 from 用户名; ④在该帐号下创建表
学习总结 1、配置环境的安装: 2、安装须知: a)拷下来的文件夹大概20+G,从移动硬盘(别人家的移动硬盘) 中拷出和这两个文件夹; b)1中的四个工具在Han_training_college文件夹当中,注意安装 这些程序之前先把其中的EBS_工具集_For_R12改名字去掉其 中的中文,改成比如EBS_For_R12之类的。否则安装的时候会 报错; c)安装第一个工具Developer10G的时候,需要先设置虚拟内存,
虚拟内存的设置方法:计算→系统属性→高级系统设置→高级→性能的设置→高级→虚拟内存的更改,然后更改为自定义大小,贴上我的设置: d)安装第二个文件的时候也就是安装PLSQL Developer的时候, 建议不安装他给的东西,去官网下载最新的程序 https://www.doczj.com/doc/dc17002538.html,/plsqldev1005.exe e)贴上官网给出的中文包: https://www.doczj.com/doc/dc17002538.html,/plsqldevlang/100/chinese.exe
f)安装PLSQL的时候,注意安装的时候会报警,原因是因为安装 路径不允许有空格和括号,所以就像ReadMe里面说的那样, 建议安装在C:\PLSQLdev中; g)第三个没什么要说的; h)第四个的话,需要先安装java的环境和office办公软件,java 环境说的不是jdk和jre之类的,说的是可以直接运行.jar类型 文件的java虚拟机,很小,贴上网址: https://www.doczj.com/doc/dc17002538.html,/zh_CN/ i)安装这些之前或者之后都可以,安装java的jdk和jre,具体的 配置环境变量的就不说了,很容易的; j)安装完这些之后安装虚拟机:VMware-workstation; k)然后用虚拟机打开里面的系统; l)里面是XP系统,已经配置好的XP系统; m)里面是LINUX系统; n)安装VMware-workstation可以选择安装官网最新版的10版本,这个版本支持中文版;https://www.doczj.com/doc/dc17002538.html,/ 3、建立主机和虚拟机的访问 a)这一步的目的是为了让主机和虚拟机之间能够互相Ping通, 互相Ping通的目的是为了让主机里面的PLSQLdev可以访问主 机里面的oracle服务器然后进行操作,现阶段我们操作的主要 是练习SQL语句 b)要让主机和虚拟机之间互相Ping通有两个办法:
AD1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 4. 将显示的内容输出到指定文件 SQL> SPOOL file_name 在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。 5. 关闭spool输出 SQL> SPOOL OFF 只有关闭spool输出,才会在输出文件中看到输出的内容。 7. COL命令: 主要格式化列的显示形式。 1). 改变缺省的列标题 COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ---------- ---------------------------- --------- 10 ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location --------- ---------------------------- ----------- 10 ACCOUNTING NEW YORK 2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上: Sql>select * from emp Department name Salary ---------- ---------- ---------- 10 aaa 11 SQL> COLUMN ENAME HEADING ’Employee|Name’ Sql>select * from emp Employee Department name Salary ---------- ---------- ---------- 10 aaa 11 note: the col heading turn into two lines from one line. 3). 改变列的显示长度: FOR[MAT] format Sql>select empno,ename,job from emp; EMPNO ENAME JOB ---------- ---------- --------- 7369 SMITH CLERK
oracle数据库 优化报告
目录 1、概述 (3) 2、数据库优化部分 (3) 2.1、环境优化 (3) 2.1.1 统计信息收集被关闭 (3) 2.1.2 部分索引失效 (4) 2.2、设计优化 (4) 2.2.1 设计类问题概述 (4) 2.2.2 设计类问题优化建议 (5) 2.3、SQL优化 (5) 2.3.1 SQL_ID= 7gf3typgc469a (5) 2.3.2 SQL_ID= bdcfdz26x5hm9 (6) 3、数据库优化总结 (7)
1、概述 随着应用软件用户负载的增加和愈来愈复杂的应用环境,操作系统的各项性能参数、数据库的使用效率、用户的响应速度、系统的安全运行等性能问题逐渐成为系统必须考虑的指标之一。性能测试以及优化通常通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,用来检测系统是否达到用户提出的性能指标,及时发现系统中存在的瓶颈,最后起到优化系统的目的。 随着需求不断增加,特别是复杂逻辑的需求,一旦出现高并发量时,也将可能导致数据库主机无法承载,因此数据库优化亟待解决。 2、数据库优化部分 从2018年1月份开始跟踪及分析,发现托管区数据库在环境、设计及SQL三方面,都存在不少问题。在SQL类优化中,本地化代码编写和设计不良,是比较明显的问题。下面将分成环境、设计、SQL优化三类进行持续分析,并给出相关建议、整改方案、整改进度。 2.1、环境优化 2.1.1 被关闭 zonghe托管区数据库统计信息未自动收集,如果未打开收集,会对系统性能造成较大的影响。
需要开启统计信息 开启方法如下: --执行 BEGIN dbms_auto_task_admin.enable(client_name => 'auto optimizer statscollection', operation => NULL, window_name =>NULL); END; 2.1.2 部分索引失效 需要将索引进行删除。删除命令参考如下: drop index index_name; 2.2、设计优化 2.2.1 设计类问题概述 序号 类型 问题描述 1 表 ZJ_KZH_DATE 、ZJ_CRM_S_ORDER_GATHER 等本 地表,设计了大量的V1,V2,需要开发人员核对需 求 2 索引 索引定义较混乱,常与其他表进行连接的表,在连接
o r a c l e实训 总结 系别:信管院班级:姓名:浦江峰学号 日期: 2012年12月21日 实训总结: 由于感到oracle实训担子很重,而自己的学识、能力和阅历与其任职都有一定的距离,所以总 不敢掉以轻心,总在学习,向书本学习、向周围的同学学习,向老师请教,这样下来感觉自己半年来 还是有了一定的进步。 颠末一个星期的oracle数据库实训,让我体会到了日常仄凡是很多课堂上所无法实践知晓的, 让人收获颇丰,明白如何去应用。而本次数据库实训的目标是让我们把握数据库系统的原理。将理论 与实践相结合,利用现有的数据库管理系统硬件、范例、科学地完成一个设计。 这个星期是我们oracle 数据库管理课的实训,经过一个星期的实训,让我领会到了许多平时课 堂上所没有接受的课外知识,很让人受益匪浅,懂得如何去运用,而进行的一次分析设计综合的训练。而本次实训的目的是让我们掌握数据库系统的原理、技术。将理论与实际相结合,应用现有的数据库 管理系统软件,规范、科学地完成一个设计与实现。这次我们实训的内容是从数据库、数据表的创建和修改开始的,表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表信息、查看表属性、修改表中的数据、删除表中的数据及修改表和删除表的操作。从实 训中让我更明白一些知识,表是数据最重要的一个数据对象,表的创建好坏直接关系到数数据库的成败,表的内容是越具体越好,但是也不能太繁琐,以后在实际应用中多使用表,对表的规划和理解就 会越深刻。我们实训的另一个内容是数据库的约束、视图、查询。从中我们了解到查询语句的基本结构,和简单select语句的使用,多表连接查询。而在视图的操作中,也了解到了视图是常见的数据库对象,是提供查看和存取数据的另一种途径,对查询执行的大部分操作,使用视图一样可以完成。使 用视图不仅可以简化数据操作,还可以提高数据库的安全性,不仅可以检索数据,也可以通过视图向 基表中添加、修改和删除数据。存储过程、触发器也是我们实训的内容之一,在操作中有建立存储过程,执行存储过程,及查看和修改存储过程,这些都是非常基础的东西,但对用户却是非常重要的呢,只有熟悉了t_sql语言,才能更好的掌握更多的东西。我们还学习了,数据库的管理、数据的导入、 导出、备份和还原。有oracle 安全访问控制;登录账户的管理;数据库角色的管理;用户权限管理。维护数据库的安全是确保数据库正常运行的重要工作。数据的备份是对oracle数据事务日志进行拷贝,数据库备份记录了在进行备份操作的数据库中所有数据的状态。而数据的备份还分为数据库完整备份、差异备份、事务日志备份、文件及文件组备份。做数据备份就是为了以后的数据库恢复用。在实训内 容上我们还做了图书管理数据库,其中的要求包含了许多数据库的对象,综合了我们所学的许多知识,让我们更努力的把所学到的东西运用上去。 实训课是在学习与探索中度过的,短暂的一星期实训是结束了,但其中让我们学到了许多知识,出现许多未知的为什么,如仓库管理数据库的初步设置、数据备份与还原的步骤,如何建立视图、触 发器等一系列的问题,正是在老师和同学的共同努力之下,我们才一步步把问题解决了,最终完成了 不可能完成的任务。 日期:2012年12月21日篇二:oracle实训总结 oracle数据库管理与应用实训总结 在这一周oracle数据库管理与应用的实训的时间里,实训老师针对我们本学期的学习,有针对 性地对我们进行了很有价值的实训工作,从最基础的字段类型,到一般的oracle语句,如创建数据表、视图、存储过程、触发器等,给我们细心讲解,虽然oracle数据库管理与应用的课已经学习了将近一学期,但对其简单的知识点运用的都不是很熟练,没能真正去融会贯通。 不过,经过为期一周的针对性实训,我学到了很多知识,把以前学的所有知识点都贯穿到一起,又温习了一遍,让我们能从真正意义上了解到oracle数据库的用处。 不论再用到什么软件编写网站,都会用到数据库连接,都要从那个数据库中调用数据,这说明了数据库的重要性,认识到学习数据库的必要性。oracle数据库是很重要的数据库系统。在数据库实训 过程中,难免会出现小错误,但经过我们的讨论研究,加上老师认真的辅导,我们会解决这些错误, 从而更加熟练掌握oracle数据库。这一周不仅学到了oracle数据库的知识,还培养了我们的团队合
1、用dba权限的用户查看数据库都有哪些锁 select https://www.doczj.com/doc/dc17002538.html,ername,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time; 2、查看有哪些对象被锁了 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id 3、根据sid查找进程id select pro.spid from v$session ses, v$process pro where ses.sid=129 and ses.paddr=pro.addr; select ses.sid from v$session ses, v$process pro where pro.spid=129 and ses.paddr=pro.addr; 4:根据这个spid对应linux下的进程pid linux命令: ps -ef | gre | 'ora' (找到所有ora开头的进程) kill -9 (pid) 5、解决delete后表的高水位的问题 初步判断应该是之前有大量数据,后来delete了,选成高水位,用shrink 清除高水位: alter table t_mobile_client_tp_prov enable row movement; alter table t_mobile_client_tp_prov shrink space; 重新收集统计信息: begin dbms_stats.gather_table_stats(ownname=>'traffic',tabname=>'T_MOBILE_CLIENT_TP_PR end; 6、ORA-02064 distributed operation not supported