首页 > 精品范文库 > 15号文库
ORACLE学习日记
编辑:浅唱梦痕 识别码:24-286436 15号文库 发布时间: 2023-04-02 07:32:19 来源:网络

第一篇:ORACLE学习日记

第十八讲

Exo userid=system/manager@myral1 owner=(system,scott)file;=d;system.dmp 导出数据库

Exp userid=system/manager@myor full=y inctype=complete file=d;x.dmp 导入用imp 语句(其他用户到入表的时候不能有主外键关系)Inp userid=scott/m123@myoral1 tables=(emp)file=file=d;scott/dmp 数据字典和动态性视图

数据字典是oracle数据库中最重要的组成部分,他提供了数据的一些系统信息(静态)数据字典是存放在基本表里,存在在system里面。其中基表存放数据库的基本信息,普通用户不能直接访问数据字典的基表,数据字典视图是基于数据字典基表所建立的视图,普通用户可以通过查询数据字典视图取得系统信息,数据字典视图主要包括user_xxx,all_xxx,dba_xxx三个类型

User_table 用于显示当前用户所拥有的所有表,它只返回用户所对应反感的所有表 Select table_name from user_tables

All_TABLE 显示当前用户可以访问的所有表,她不仅会返回当前用户可以访问的其他方案表

select table_name from all_tables DBA_TABLE

他会显示所有拥有的数据库表,但是查询这种数据库字典视图,必须是DBA角色或是拥有select any table系统权限 用户名,权限,角色

在建立用户,oracle会把用户的信息存放到数据字典中,当给用户授权或是角色时,oracle会将权限和角色的信息存放到数据字典中 显示数据库用户

Select username,from DBA_users‟

DBA_SYS_PRIVS可以显示用户所具有的系统权限 DBA_TAB_PRIVS 可以显示用户所具有的对象权限 DBA_COL_PRIVS 可以显示用户具有的列权限 DBA_ROLE_PRIVS 可以显示用户所具有的角色

查看SCOTT具有的角色,可以查询DBA_ROLE_PRIVS Select * from DBA_ROLE_PRIVS WHERE =‟SCOTT 如何查询一个角色包括的权限 Select * from ‟

查询oracle中所有的系统权限,一般用DBA SELECT * FROM SYS_PRIVILEGE_MAP 查询oracle 中所有的角色,一般是DBA SELECT * FROM DBA_ROLES 查询oracle中所有对象权,一般是DBA SELECT DISTNCT PRIVILEGE FROM DBA_TAB_PRIVS 查询数据的表空间

Select tablespace_name from DBA_TABLESPACES 查询一个用户包含的系统权限

Select * from dba_sys_privs where grantee=‟DBA‟

SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE=‟DBA‟ 如何究竟有多少中角色 SELECT * FROM DBA_ROLES 显示当前用户可以访问的所有数据字典视图

SELECT * FROM DICT WHERE COMMENT LIKE „%RANT%‟ 显示当前数据全称

Select * from global_name

数据字典记录有ORACLE 数据库的所有系统信息,通过查询数据字典可以取得以下的系统信息,比如

A 对象定义情况 B 对象所占用空间大小 C 列信息 等 但因为这些个信息,可以通过PL/SQL DEVELOPER 动态性能视图记载了里程启动后的相关信息

动态性能视图用于记录当前历程的活动信息,启动oracle server时,系统会建立动态性能视图,当停止ORACLE SERVER 时,系统会删除动态性能视图 管理表空间和数据文件

介绍,表空间时数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中,从逻辑上讲,数据则是存放在表空间中,表空间由一个或是多个数据文件组成ORACLE的逻辑结构报考表空间,段,区,和块 表空间由段构成,段由区构成,区由块构成

表空间用于从逻辑上组织数据库的数据,数据库逻辑上是由一个或是多个表空间组成的。作用

A控制数据占用的磁盘空间

B DBA可以讲不同数据类型部署到不同的位置,这样由利于提高I/O性能

建立表空间 create tablespace 命令完成的,建表空间一般是特权用户或是DBA执行 的 建立数据库后方便管理,最好建立自己的表空间,Create tablespace data01 datafile „d:testdata01.dbf‟ size 20m uniform size 128 使用数据表空间

Create table mypart(deptno number(4)),dname varchar2(14),loc varchar2(130)tablespace data01 查询所在表空间 改变表空间状态,表空间处于联机状态,此时表空间是可以访问的,并且空间执行各种语句,(1)使用表空间脱机

Alter tablespace biaokongjian offline B 使用表空间脱机

Alter tablespace biaokongjian o C 只读 表空间或写,用write ALTER TABLESPACE BIAOGONGJIAN READ ONLY 知道表空间名,显示该空间包括的所有的表

Select * from all_tables where tablespace_name=‟biaokongjianming‟ 知道表名,查看该表属于哪个空间

Select tablespace_name ,table_name from user_tables where table_name=‟emp‟ 删除表空间

Drop tablesspace “biaokongjianming ” including contents and datafiles 扩展表空间

表空间是由数据文件组成,表空间的大小实际上就是数据文件相加的大小,那么我们可以想象

Show users Insert into mypart select * from mypart 拓展表空间由三种 增加数据文件

Alter table tablespace sp01 add datafile „d;testsp01.dbf‟ size 20m 增加数据文件大小

Alter table tablespace biaokongjianming „d;testsp01.dbf‟ size 20m 设置文件的自动增长

Alter table tablespace biaokongjianming „d;testsp01.dbf“ autoextend on next 10M maxsize 500M 移动数据文件

确定数据文件所在的表空间

Select tablespace_name from dba_data_files where file_name=‟ d;testsp01.dbf‟ 使表空间脱机

Alter tablespace sp01 offline

使用命令移动数据文件到指定位置

Host move d;testsp01.dbf c;testsp01.dbf 移动数据文件

Alter tablespace sp01 rename datafile „d;testsp01.dbf‟to “c;testsp01.dbf‟ 使空间联机

Alter tablespace sp001 online 其他表空间 索引表空间 Undo 表空间 临时表空间

非标准块的表空间 第二十一讲

数据的完整性用于确保数据遵从一定的商业和逻辑规则,数据完整性可以使用约束,触发器,应用程序,三种方法。

约束用于确保数据库数据满足特定的商业规则,约束包括

Not null 不为空

Unique 唯一 可以为空

Primary key 主键 唯一的标示表行的数据,不能重复而且不能为空 只能一个主键 Foreign key 外键

外键列数据必须在主表的主键列存在或是为NULL Check 检查 强制执行数据必须满足的条件 增加约束

ALTER TABLE 命令

在增加not null 用midify

Alter table goods modify goosname not null Alter table customer add constraint aa unique(cardID)删除约束

Alter table emp drop constraint 约束名称

删除主键约束时候,存在主从关系,那么要在删除主表的主键约束的时候 必须带上CASCADE Alter table emp drop primary key cascade 显示约束信息

通过查询user_constraints 可以显示所有约束信息

Select constraint_name,constraint_type,from user_constraints where table_name=表名 索引是用于加速数据存取的数据对象,合理使用索引可以大大的降低io的次数 创建索引

Create index suoyi on customer(列名1,列名2)使用原则 1 在大表上建立索引才有意义 在WHERE 子句或是链接跳上 经常用的列

缺点,建立索引,系统要占用大约表的1.2倍的硬盘和内存空间来保存索引 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新。以维持数据和索引的一致性。权限和角色 创建和授予

Create user ken identified by ken

Grant create session,create table to ken with admin option 对象权限,常用有

Alter 修改 delete 删除 select查询 insert 添加 Update 修改 index 索引 references 引用 execute 希望monkey 授权Scott 可以查询

Grant select on emp to monkey With grant option 只能授予用户,不能授予角色 第23讲

预定义角色,是指oracle所提供的角色 1 connect角色resource 角色DBA 角色

自定义角色 一般是DBA设定

建立角色

create role jueseming not identified(不验证)Create role 角色名 identity by SHUNP 赋予权限

Grant create session to jueseming with admin option Conn scott/tiger@myoral Grant select on scott,emp to jueseming Grant insert,update,delete on scott.emp 分配角色给某个用户 Conn system/manager Grant jueseming to blake with admin option 删除 角色

Drop role juese 第25讲

PL/SQL是oracle在标准语言上的扩展,不仅允许嵌入SQL语言还可以定义变量和常量。过程,函数,触发器是PL/sql编写,过程,函数,触发器是在oracle中,PL/QSL是非常强大的数据库语言,过程函数,可以在JAVA程序中可以调用。编写一个存储过程,该过程可以插入 Create or replace procedure so_spro1 is Begin--执行部分

Insert into mytest values(„寒暑平‟,‟M123‟);End.;/ 查看错误

SHOW ERROR 如何调用该过程 exec 过程名(参数值1,参数值2。。)2 call 过程名(参数值1,参数值2)删除某表记录

Create or replace sp_pro2 is Begin Delete from mytess where name=‟hanshupin‟ End.分类,块 A 过程

B函数

C 触发器

D 包 注释

单行注释

--多行注释

/*…*/划分 标识符号的命名的规范 定义变量时 建议用V_前缀 2 定义常量时,建议用C_前缀 定义游标时候,建议用—cursor作为后缀 4定义例外时

Pl/sql 由三个部分构成,定义部分,执行部分,例外处理部分 如下所示 Declear(可选)定义部分—定义变量,常量,游标,例外,复杂数据类型 Begin(必选)执行部分----要执行的语句 Exception(可选)

例外处理部分----处理运行的各种错误 End.最简单的块 Begin Dbms_output.put_line(„‟hello world”)End

Declare

V_ename varchar2(4)Begin

Select ename into v_name from emp where empno=&no;End

有定义和执行部分的块 Declare ==定义变量

V_ename varchar2(4)V_sal number(7.2)Begin---执行部分

Select ename,sal into v_name,v_sal from emp where empno=&aa---在控制台显示用户名 Dbms_output.put_line(t….)Exception When no_data_found then Dbms_output.put_line(有误)End;过程用于执行特定的操作,当建立过程时,既可以制定输入参数in ,可以指定输出参数。可以将数据传递到执行部分,通过使用输出参数,可以将执行部分的数据传递到应用环境 1 请考虑编写一个过程,可以输入雇员名,新工资,可修改雇员的工资 2 如何调用两种方法

答 1 create procedure sp_pro3(spname varchar2,newsal number(3,2))is Begin Update emp set sal=newsal where ename=spname End 如何使用过程返回值?

函数用于返回特定的数据,当建立函数时,在函数头部必须包含return 显示雇员的年薪

Create function sp_fun2(spname varchar2)return Number is yearsal Begin

Select sal*12+nvl(comm.,0)*12 into yearsal from emp where ename=spname Return yearsal End 包是用于逻辑上组合过程和函数,它由包规范和包体两部分 实例

Create package sp_package is

Procedure update_sal(name varchar2,newsal number)Is Begin Update emp set sal=newsal where ename=name end

Function annual_incom(name varchar)return number Return number is Annuan_salary number Begin End 变量类型 标量类型

定义可变长字符串 V_ENAME VARCHAR2(10)定义一个小数 v_sal number(6.2)定义一个小数和初始值 v_sal2 number(9,2)=6.4 定义一个日期类型的数据 v_hiredate date 定义一个布尔变量,不能为空,初始值为false v_valid Boolean not null default false Declare

C_tax_rate number(3,2):=0.03 V_ename varchar2(7,2)V_sal number(7,2)V_tax_sal number(7,2)Begin Select ename,sal into v_ename,v_sal from emp where empno=&no V_tax_sal;=v_sal*v_tax_rate End 标量%tyoe 符合类型

用于存放多个值的变量,主要包括 记录 表 嵌套表 嵌套表 varry 记录 类似与高级语言中的结构体

PL.SQL记录实例 Declare--定义一个PLSQL记录类型

emp_record_typ,类型包括三个数据name ,salary,title Type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title emp.job%type)--定义一个变量emp_record_typ, Sp_record emp_record_type Begin Select ename,sal,job into sp_record from emp where empno=7788 End PLSQL表

Declare

定义了一个表类型sp-table-type 该类型用于存放EMP,ENAME%TYPE, index by binary_integer标示下标是整数

Tysp sp_table_type is table of emp,ename%type index by binary_integer Sp_table sp_table_type/ Begin

Select ename into sp_tabel(0)from emp where empno=7788 End

参照类型 参照变量是指用于存放数值指针的变量,可以使用游标标量(ref cursor)参照变量-ref cursor 使用游标时,当定义游标时不需要制定相应的select语句 但使用游标时OPEN时需要指定SELECT 语句,这样一个游标就与一个SELECT 语句结合了 编写使用PLSQL编写一个存储过程,可以输入部门号,并显示 Declare 定义游标类型sp_emp_cirsor Type sp_emp_cirsor is ref cursor Test_cursor sp_emp_cirsor:-定义变量

V-ename emp.empno&pyte V_sal emp.sal&type Begin-执行

-把 test_cursor和一个select结合

Open test_cursor for select ename,sal,from emp where deptno=&no =循环取出 Loop

Fet test_cursor into v_ename,v_sal‟-判断是否test_cursor为空

Exit when test_cursor ¬found End loop End 第二十八讲 循环FOR BEGIN

FOR I IN REVERSE 1..10 LOOP INSERT INTO USERS VALUSE END

GOTO 语句 最好不要用 Null 语句 Declare

V_sal emp.sal%type;V_ename emp.enmae%type Begin Select ename.sal into v_ename ,v_sal From emp where empno=&no If v_sal<3000 then Update emp set comm.=sal*0.1 where enma=v_ename Else Null End if End 分页编写 建表 create table book(bookID,number,bookname varchar2,publicshshou varchar)--编写过程

---in 代表这是一个输入参数(默认)---out 输出参数

Create or replace sp_pro7(spbookid in number, spbook in varchar2, sppublishhouse in varchar2)iis Begin Insert into book values(spbookid,spbookname,sppublishhouse)End 编写一个过程,输入雇员编号,返回雇员的姓名 Create orproceduresp_pro8(spname in number,spname out varchar, spsal out number,spjob out varchar2)is Begin

Select ename into spname from emp where empno=spno‟ End

有返回值的存储过程 列表 结果集 返回的结果集需要包 package Create or replace package testpackage as Type test_cursor is ref cursor End testpackage Create or replace procedure sp_pro9(spno in number, p_cursor out tesspackage.test_cursor)is Begin

Oper p_cursor for select * from emp where deptno=spno;end 编写一个过程,输入部门号,返回该部门所有雇员信息

Oracle 的分页 Select * from(Select t1.*, rownum rn from(select * from emp)ti where rn<10)where rownum>6 开始编写分页的过程

Create or replace procedure fenye(table_name in varchar2, Pagesize in number, Pagenow in number, Myrows out number, Mypagecount out number P_cursor out tespackage.test_cursor)is

定义部分

定义SQL语句

V_sql varchar2(1000)V_begin number;=(pagenow-1)*pagesize+1

V_end;=(pagenow*pagesize Begin V_sql;=” Select * from(Select t1.*, rownum rn from(select * from‘||?||’)ti where rn<‟||?||‟)where rownum>=‟|| ”

Loop 循环

Create or replace procedure sp_pro6(spname varchar2)is V_num number:=1 Begin While v_num<=20 loop Insert into user values(v_num,spname)V_num;=v_num+1 insert into users values(v_num,spname)--自增

exit when v_num=10 end loop

while循环

while v_table_name2 <> v_table_name3 loop select TABLE_NAME into v_table_name2 from

(select A1.*,rownum rn from(SELECT * FROM user_tab_columns_new)A1 where rownum=v_number1)

while v_column_name1=v_column_name2 loop

select v_table_name,v_column_name,v_data_type,v_data_length from

select distinct ljs.column_name, ljs.comments, lm.DATA_TYPE, lm.DATA_LENGTH from user_col_comments ljs inner join user_tab_columns lm on ljs.table_name = lm.TABLE_NAME and ljs.column_name = lm.COLUMN_NAME order by ljs.column_name

第二篇:ORACLE学习日记

第十八讲

Exo userid=system/manager@myral1 owner=(system,scott)file;=d;system.dmp 导出数据库

Exp userid=system/manager@myor full=y inctype=complete file=d;x.dmp 导入用imp 语句(其他用户到入表的时候不能有主外键关系)Inp userid=scott/m123@myoral1 tables=(emp)file=file=d;scott/dmp 数据字典和动态性视图

数据字典是oracle数据库中最重要的组成部分,他提供了数据的一些系统信息(静态)数据字典是存放在基本表里,存在在system里面。其中基表存放数据库的基本信息,普通用户不能直接访问数据字典的基表,数据字典视图是基于数据字典基表所建立的视图,普通用户可以通过查询数据字典视图取得系统信息,数据字典视图主要包括user_xxx,all_xxx,dba_xxx三个类型

User_table 用于显示当前用户所拥有的所有表,它只返回用户所对应反感的所有表 Select table_name from user_tables

All_TABLE 显示当前用户可以访问的所有表,她不仅会返回当前用户可以访问的其他方案表

select table_name from all_tables DBA_TABLE

他会显示所有拥有的数据库表,但是查询这种数据库字典视图,必须是DBA角色或是拥有select any table系统权限 用户名,权限,角色

在建立用户,oracle会把用户的信息存放到数据字典中,当给用户授权或是角色时,oracle会将权限和角色的信息存放到数据字典中 显示数据库用户

Select username,from DBA_users‟

DBA_SYS_PRIVS可以显示用户所具有的系统权限 DBA_TAB_PRIVS 可以显示用户所具有的对象权限 DBA_COL_PRIVS 可以显示用户具有的列权限 DBA_ROLE_PRIVS 可以显示用户所具有的角色

查看SCOTT具有的角色,可以查询DBA_ROLE_PRIVS Select * from DBA_ROLE_PRIVS WHERE =‟SCOTT 如何查询一个角色包括的权限 Select * from ‟

查询oracle中所有的系统权限,一般用DBA SELECT * FROM SYS_PRIVILEGE_MAP 查询oracle 中所有的角色,一般是DBA SELECT * FROM DBA_ROLES 查询oracle中所有对象权,一般是DBA SELECT DISTNCT PRIVILEGE FROM DBA_TAB_PRIVS 查询数据的表空间

Select tablespace_name from DBA_TABLESPACES 查询一个用户包含的系统权限

Select * from dba_sys_privs where grantee=‟DBA‟

SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE=‟DBA‟ 如何究竟有多少中角色 SELECT * FROM DBA_ROLES 显示当前用户可以访问的所有数据字典视图

SELECT * FROM DICT WHERE COMMENT LIKE „%RANT%‟ 显示当前数据全称

Select * from global_name

数据字典记录有ORACLE 数据库的所有系统信息,通过查询数据字典可以取得以下的系统信息,比如

A 对象定义情况 B 对象所占用空间大小 C 列信息 等 但因为这些个信息,可以通过PL/SQL DEVELOPER 动态性能视图记载了里程启动后的相关信息

动态性能视图用于记录当前历程的活动信息,启动oracle server时,系统会建立动态性能视图,当停止ORACLE SERVER 时,系统会删除动态性能视图 管理表空间和数据文件

介绍,表空间时数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中,从逻辑上讲,数据则是存放在表空间中,表空间由一个或是多个数据文件组成ORACLE的逻辑结构报考表空间,段,区,和块 表空间由段构成,段由区构成,区由块构成

表空间用于从逻辑上组织数据库的数据,数据库逻辑上是由一个或是多个表空间组成的。作用

A控制数据占用的磁盘空间

B DBA可以讲不同数据类型部署到不同的位置,这样由利于提高I/O性能

建立表空间 create tablespace 命令完成的,建表空间一般是特权用户或是DBA执行 的 建立数据库后方便管理,最好建立自己的表空间,Create tablespace data01 datafile „d:testdata01.dbf‟ size 20m uniform size 128 使用数据表空间

Create table mypart(deptno number(4)),dname varchar2(14),loc varchar2(130)tablespace data01 查询所在表空间 改变表空间状态,表空间处于联机状态,此时表空间是可以访问的,并且空间执行各种语句,(1)使用表空间脱机

Alter tablespace biaokongjian offline B 使用表空间脱机

Alter tablespace biaokongjian o C 只读 表空间或写,用write ALTER TABLESPACE BIAOGONGJIAN READ ONLY 知道表空间名,显示该空间包括的所有的表

Select * from all_tables where tablespace_name=‟biaokongjianming‟ 知道表名,查看该表属于哪个空间

Select tablespace_name ,table_name from user_tables where table_name=‟emp‟ 删除表空间

Drop tablesspace “biaokongjianming ” including contents and datafiles 扩展表空间

表空间是由数据文件组成,表空间的大小实际上就是数据文件相加的大小,那么我们可以想象

Show users Insert into mypart select * from mypart 拓展表空间由三种 增加数据文件

Alter table tablespace sp01 add datafile „d;testsp01.dbf‟ size 20m 增加数据文件大小

Alter table tablespace biaokongjianming „d;testsp01.dbf‟ size 20m 设置文件的自动增长

Alter table tablespace biaokongjianming „d;testsp01.dbf“ autoextend on next 10M maxsize 500M 移动数据文件

确定数据文件所在的表空间

Select tablespace_name from dba_data_files where file_name=‟ d;testsp01.dbf‟ 使表空间脱机

Alter tablespace sp01 offline

使用命令移动数据文件到指定位置

Host move d;testsp01.dbf c;testsp01.dbf 移动数据文件

Alter tablespace sp01 rename datafile „d;testsp01.dbf‟to “c;testsp01.dbf‟ 使空间联机

Alter tablespace sp001 online 其他表空间 索引表空间 Undo 表空间 临时表空间

非标准块的表空间 第二十一讲

数据的完整性用于确保数据遵从一定的商业和逻辑规则,数据完整性可以使用约束,触发器,应用程序,三种方法。

约束用于确保数据库数据满足特定的商业规则,约束包括

Not null 不为空

Unique 唯一 可以为空

Primary key 主键 唯一的标示表行的数据,不能重复而且不能为空 只能一个主键 Foreign key 外键

外键列数据必须在主表的主键列存在或是为NULL Check 检查 强制执行数据必须满足的条件 增加约束

ALTER TABLE 命令

在增加not null 用midify

Alter table goods modify goosname not null Alter table customer add constraint aa unique(cardID)删除约束

Alter table emp drop constraint 约束名称

删除主键约束时候,存在主从关系,那么要在删除主表的主键约束的时候 必须带上CASCADE Alter table emp drop primary key cascade 显示约束信息

通过查询user_constraints 可以显示所有约束信息

Select constraint_name,constraint_type,from user_constraints where table_name=表名 索引是用于加速数据存取的数据对象,合理使用索引可以大大的降低io的次数 创建索引

Create index suoyi on customer(列名1,列名2)使用原则 1 在大表上建立索引才有意义 在WHERE 子句或是链接跳上 经常用的列

缺点,建立索引,系统要占用大约表的1.2倍的硬盘和内存空间来保存索引 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新。以维持数据和索引的一致性。权限和角色 创建和授予

Create user ken identified by ken

Grant create session,create table to ken with admin option 对象权限,常用有

Alter 修改 delete 删除 select查询 insert 添加 Update 修改 index 索引 references 引用 execute 希望monkey 授权Scott 可以查询

Grant select on emp to monkey With grant option 只能授予用户,不能授予角色 第23讲

预定义角色,是指oracle所提供的角色 1 connect角色resource 角色DBA 角色

自定义角色 一般是DBA设定

建立角色

create role jueseming not identified(不验证)Create role 角色名 identity by SHUNP 赋予权限

Grant create session to jueseming with admin option Conn scott/tiger@myoral Grant select on scott,emp to jueseming Grant insert,update,delete on scott.emp 分配角色给某个用户 Conn system/manager Grant jueseming to blake with admin option 删除 角色

Drop role juese 第25讲

PL/SQL是oracle在标准语言上的扩展,不仅允许嵌入SQL语言还可以定义变量和常量。过程,函数,触发器是PL/sql编写,过程,函数,触发器是在oracle中,PL/QSL是非常强大的数据库语言,过程函数,可以在JAVA程序中可以调用。编写一个存储过程,该过程可以插入 Create or replace procedure so_spro1 is Begin--执行部分

Insert into mytest values(„寒暑平‟,‟M123‟);End.;/ 查看错误

SHOW ERROR 如何调用该过程 exec 过程名(参数值1,参数值2。。)2 call 过程名(参数值1,参数值2)删除某表记录

Create or replace sp_pro2 is Begin Delete from mytess where name=‟hanshupin‟ End.分类,块 A 过程

B函数

C 触发器

D 包 注释

单行注释

--多行注释

/*…*/划分 标识符号的命名的规范 定义变量时 建议用V_前缀 2 定义常量时,建议用C_前缀 定义游标时候,建议用—cursor作为后缀 4定义例外时

Pl/sql 由三个部分构成,定义部分,执行部分,例外处理部分 如下所示 Declear(可选)定义部分—定义变量,常量,游标,例外,复杂数据类型 Begin(必选)执行部分----要执行的语句 Exception(可选)

例外处理部分----处理运行的各种错误 End.最简单的块 Begin Dbms_output.put_line(„‟hello world”)End

Declare

V_ename varchar2(4)Begin

Select ename into v_name from emp where empno=&no;End

有定义和执行部分的块 Declare ==定义变量

V_ename varchar2(4)V_sal number(7.2)Begin---执行部分

Select ename,sal into v_name,v_sal from emp where empno=&aa---在控制台显示用户名 Dbms_output.put_line(t….)Exception When no_data_found then Dbms_output.put_line(有误)End;过程用于执行特定的操作,当建立过程时,既可以制定输入参数in ,可以指定输出参数。可以将数据传递到执行部分,通过使用输出参数,可以将执行部分的数据传递到应用环境 1 请考虑编写一个过程,可以输入雇员名,新工资,可修改雇员的工资 2 如何调用两种方法

答 1 create procedure sp_pro3(spname varchar2,newsal number(3,2))is Begin Update emp set sal=newsal where ename=spname End 如何使用过程返回值?

函数用于返回特定的数据,当建立函数时,在函数头部必须包含return 显示雇员的年薪

Create function sp_fun2(spname varchar2)return Number is yearsal Begin

Select sal*12+nvl(comm.,0)*12 into yearsal from emp where ename=spname Return yearsal End 包是用于逻辑上组合过程和函数,它由包规范和包体两部分 实例

Create package sp_package is

Procedure update_sal(name varchar2,newsal number)Is Begin Update emp set sal=newsal where ename=name end

Function annual_incom(name varchar)return number Return number is Annuan_salary number Begin End 变量类型 标量类型

定义可变长字符串 V_ENAME VARCHAR2(10)定义一个小数 v_sal number(6.2)定义一个小数和初始值 v_sal2 number(9,2)=6.4 定义一个日期类型的数据 v_hiredate date 定义一个布尔变量,不能为空,初始值为false v_valid Boolean not null default false Declare

C_tax_rate number(3,2):=0.03 V_ename varchar2(7,2)V_sal number(7,2)V_tax_sal number(7,2)Begin Select ename,sal into v_ename,v_sal from emp where empno=&no V_tax_sal;=v_sal*v_tax_rate End 标量%tyoe 符合类型

用于存放多个值的变量,主要包括 记录 表 嵌套表 嵌套表 varry 记录 类似与高级语言中的结构体

PL.SQL记录实例 Declare--定义一个PLSQL记录类型

emp_record_typ,类型包括三个数据name ,salary,title

Type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title emp.job%type)--定义一个变量emp_record_typ, Sp_record emp_record_type Begin Select ename,sal,job into sp_record from emp where empno=7788 End PLSQL表

Declare

定义了一个表类型sp-table-type 该类型用于存放EMP,ENAME%TYPE, index by binary_integer标示下标是整数

Tysp sp_table_type is table of emp,ename%type index by binary_integer Sp_table sp_table_type/ Begin

Select ename into sp_tabel(0)from emp where empno=7788 End 参照类型

参照变量是指用于存放数值指针的变量,可以使用游标标量(ref cursor)参照变量-ref cursor 使用游标时,当定义游标时不需要制定相应的select语句 但使用游标时OPEN时需要指定SELECT 语句,这样一个游标就与一个SELECT 语句结合了 编写使用PLSQL编写一个存储过程,可以输入部门号,并显示 Declare 定义游标类型sp_emp_cirsor Type sp_emp_cirsor is ref cursor Test_cursor sp_emp_cirsor:-定义变量

V-ename emp.empno&pyte V_sal emp.sal&type Begin-执行

-把 test_cursor和一个select结合

Open test_cursor for select ename,sal,from emp where deptno=&no =循环取出 Loop

Fet test_cursor into v_ename,v_sal‟-判断是否test_cursor为空

Exit when test_cursor ¬found End loop End

create or replace procedure spr_column is

--定义游标

sp_column_cursor is ref cursor;sp_column sp_column_cursor;

--定义变量

declare

v_table_name user_tab_columns.TABLE_NAME%type v_column_name user_tab_columns.COLUMN_NAME%type v_data_type user_tab_columns.DATA_TYPE%type v_data_length user_tab_columns.DATA_LENGTH%type v_count_table1 number(2000)v_count_table2 number(2000)v_sql varchar2(4000)v_rom_count(100)c_count number;=0 begin

create table user_tab_columns_new as select * from user_tab_columns select t1.*, rownum rn from user_tab_columns_new select count(*)into v_count_table from user_tab_columns_new

select TABLE_NAME INTO V_from(select A1.*,rownum rn from(SELECT * FROM user_tab_columns_new)A1 where rownum=1)end

第三篇:如何学习Oracle

如何学习Oracle-给我的朋友们

很多朋友经常问起学习Oracle的方法,在这里我把写在《Oracle数据库性能优化》一书前面的话贴在这里,供大家参考,希望能对来这里的朋友有所帮助。

-----------------

经常有朋友会问,应该如何学习Oracle,怎样才能快速提高?我把自己的一点心得写在这里,供大家参考。

其实学习任何东西都是一样,没有太多的捷径可走,必须打好了坚实的基础,才有可以在进一步学习中得到快速提高。

王国维在他的《人间词话》中曾经概括了为学的三种境界,我在这里套用一下:

古今之成大事业、大学问者,罔不经过三种之境界。

“昨夜西风凋碧树。独上高楼,望尽天涯路。”此第一境界也。

“衣带渐宽终不悔,为伊消得人憔悴。”此第二境界也。

“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”此第三境界也。

学习Oracle,这也是你必须经历的三种境界。

第一层境界是说,学习的路是漫漫的,你必须做好充分的思想准备,如果半途而废还不如不要开始。

这里,注意一个“尽”字,在开始学习的过程中,你必须充分阅读Oracle的基础文档,概念手册、管理手册、备份恢复手册等(这些你都可以在http://tahiti.oracle.com 上找到);OCP认证的教材也值得仔细阅读。打好基础之后你才具备了进一步提升的能力,万丈高楼都是由地而起。

第二层境界是说,尽管经历挫折、打击、灰心、沮丧,也都要坚持不放弃,具备了基础知识之后,你可以对自己感兴趣或者工作中遇到的问题进行深入的思考,由浅入深从来都不是轻而易举的,甚至很多时候你会感到自己停滞不前了,但是不要动摇,学习及理解上的突破也需要时间。

第三次境界是说,经历了那么多努力以后,你会发现,那苦苦思考的问题,那百思不得其解的算法原理,原来答案就在手边,你的思路豁然开朗,宛如拨云见月。这个时候,学习对你来说,不再是个难题,也许是种享受,也许成为艺术。所以如果你想问我如何速成,那我是没有答案的。

不经一番寒彻骨,哪得梅花扑鼻香。

当然这三种境界在实际中也许是交叉的,在不断的学习中,不断有蓦然回首的收获。我自己在学习的过程中,经常是采用“由点及面法”。

当遇到一个问题后,一定是深入下去,穷究根本,这样你会发现,一个简单的问题也必定会带起一大片的知识点,如果你能对很多问题进行深入思考和研究,那么在深处,你会发现,这些面逐渐接合,慢慢的延伸到oracle的所有层面,逐渐的你就能融会贯通。这时候,你会主动的去尝试全面学习Oracle,扫除你的知识盲点,学习已经成为一种需要。

由实践触发的学习才最有针对性,才更能让你深入的理解书本上的知识,正所谓:

“纸上得来终觉浅,绝知此事要躬行”。实践的经验于我们是至为宝贵的。如果说有,那么这,就是我的捷径。

想想自己,经常是“每有所获,便欣然忘食”,兴趣才是我们最好的老师。

Oracle的优化是一门学问,也是一门艺术,理解透彻了,你会知道,优化不过是在各种条件之下做出的均衡与折中。

内存、外存;CPU、IO...对这一切你都需要有充分的认识和相当的了解,管理数据库所需要的知识并不单纯。

作为一个数据库管理人员,你需要做的就是能够根据自己的知识以及经验在各种复杂情况下做出快速正确的判断。当问题出现时,你需要知道使用怎样的手段发现问题的根本;找到问题之后,你需要运用你的知识找到解决问题的方法。

这当然并不容易,举重若轻还是举轻若重,取决于你具备怎样的基础以及经验积累。在网络上,Howard J.Rogers最近创造了一个新词组:Voodoo Tuning,用以形容那些没有及时更新自己的知识技能的所谓的Oracle技术专家。由于知识的陈旧或者理解的肤浅,他们提供的很多调整建议是错误的、容易使人误解的,甚至是荒诞的。他们提供的某些建议在有些情况下也许是正确的,如果你愿意回到Oracle5版或者6版的年代;但是这些建议在Oracle7.0,8.0 或者 Oracle8i以后往往是完全错误的。

后来基于类似问题触发了互联网内Oracle顶级高手的一系列深入讨论,TOM、Jonathan Lewis、HJR等人都参与其中,在我的网站上()上对这些内容及相关链接作了简要介绍,有兴趣的可以参考。

HJR给我们提了很好的一个提示:对你所需要调整的内容,你必须具有充分的认识,否则你做出的判断就有可能是错误的。

这也是我想给自己和大家的一个建议:学习和研究Oracle,严谨和认真必不可少。当然你还需要勤奋,我所熟悉的在Oracle领域有所成就的技术人员,他们共同的特点就是勤奋。

如果你觉得掌握的东西没有别人多,那么也许就是因为,你不如别人勤奋。

要是你觉得这一切过于复杂了,那我还有一句简单的话送给大家:不积跬步,无以至千里。学习正是在逐渐积累过程中的提高。

现在Itpub给我们提供了很好的交流场所,很多问题都可以在这里找到答案,互相讨论,互相学习。这是我们的幸运,我也因此非常感谢这个网络时代。

Itpub的第二本书即将出版,谨以此祝愿Itpub越来越好,也愿我们的书能给大家带来知识和帮助。

第四篇:ORACLE学习心得体会

表xyz a b c 1 m hj 1 m hjk 1 n jk 2 u we 2 u wert 3 q s 4 a ds 4 a dsaa 怎么删掉第1、5、8条记录?(字段a、b相同的几条记录只留一条,留下字段c较短的一条)delete from lianxi where length(c)not in(select min(length(c))from lianxi group by a, b)oracle数据库常用的命令集锦 今日开始研究oracle,搜索到了一个好东东,拿出来与大家一同分享。

下面是摘抄的部分 :[local]2[/local] oracle相关语法及命令

一、oracle入门

理论知识:

oracle的物理组件有三个:(1)数据文件 数据文件是用于存储数据库数据的文件,如表、索引数据。每个oracle数据库有一个或多个物理数据文件,一个数据文件只能与一个数据库关联。(2)日志文件 用于记录对数据库进行的修改信息,日志文件主要用于在数据库出现故障时实施数据库恢复。(3)控制文件 控制文件是记录数据库物理结构的二进制文件,每个oracle数据库都含有一个控制文件。

oracle的逻辑组件:

表空间(tablespace)表空间是数据库最大的逻辑单位,一个数据库至少包含一个表空间,一个表空间包含一个或多个段等等。

段(segment)段存在于表空间中,分成4类,数据段、索引段、回退段、临时段。区(extent)区是磁盘空间分配最小单位,由连续的数据块组成,一个或多个区构成段,区只能存在于一个数据文件中。

数据块(data block)数据块是数据库中最小的数据组织单位与管理单位,oracle数据库中的数据存储于数据块中,取值范围2k-64k之间。

模式(schema)模式是对用户所创建的数据库对象的总称,又称为用户模式。

概念:

内存 oracle内存结构包含以下两个内存区。

1、系统全局区(sga)实例启动时分配该内存区,是oracle实例的一个基本组件。又称为共享全局区,它用来存储数据库信息,并由多个数据库进程共享。可分为共享池、数据缓冲区及日志缓冲区。(1)共享池 是对sql、plsql程序进行语法分析、编译、执行的内存区域。共享池由库缓存和数据字典缓存组成。其中,库缓存含有最近执行的sql、plsql语句的分析码和执行计划;数据字典缓存含有从数据字典中得到的表、索引、列定义和权限等信息。(2)数据缓冲区 数据缓冲区用于存储从磁盘数据文件中读入的数据,所有用户共享。(3)日志缓冲区 日志记录数据库的所有修改信息,主要用于恢复数据。

2、程序全局区(pga)服务器进程启动时分配该内存区。pga为非共享区,只能单个进程使用,当一个用户会话结束后,pga释放。

用户进程(pga)发送sql语句到共享全局区(sga),先在共享池的库缓存中查询是否存在所需的数据块,如果存在就在数据字典中读取相应的数据块,如果不存在就由服务器进程(dbwr)来io数据库

语法知识:

创建表空间的语法如下:

create tablespace tablespacename datafile d:filename.dbf [size int [kb|mb]] [autoextend [off|on]];tablespacename 是需创建的表空间名称。datafile 指定组成表空间的一个或多个数据文件,当有多个数据文件时使用逗号分隔。

filename 是表空间中数据文件的路径和名称。size 指定文件的大小,用k指定千字节大小,用m指定兆字节大小。autoextend子句用来启用或禁用数据文件的自动扩展。oracle默认用户:

用户名:sys 默认密码:chage_on_install 用来管理拥有oracle数据字典文件 用户名:system 默认密码:manager 用来管理拥有数据字典视图对象 用户名:scott 默认密码:tiger 示例用户,包括emp、dept等表

连接oracle: 在控制台下输入 sqlplus 用户名/密码 回车或 sqlplusw 回车

相关命令:

disconn //退出当前登录 conn 用户名/密码 //连接oracle alter user 用户名 identified by 密码 //修改用户口令 drop user 用户名 cascade;//删除用户 alter user 用户名 account lock;//给某个用户加锁 alter user 用户名 account unlock;//给某个用户解锁 ed 回车: //打开缓冲区

/ 回车: //执行缓冲区中的语句 create user 用户名 identified by 密码 [password expire] [default tablespace 表空间名] [temporary tablespace 临时表空间名];//创建用户

相关权限: grant connect to scott;//connect角色将允许用户创建数据库并在数据库中创建表或其他对象 grant resource to scott;//resource角色将允许用户使用数据库中的空间 grant create sequence to scott;//create sequence权限将允许用户创建序列,此权限包含在connect连接角色中 grant select on emp to scott;//将emp表的查询权限授予用户scott grant update(vencode,venname)on 表名 to scott;//将特定列的更新权限授予用户scott grant 权限 on 表名 to 用户名 with grant option;//接受该权限的用户可以将此权限授予其他用户 revoke select,update on 表名 from 用户名;//收回相应的权限

二、sql查询和sql函数 sql支持如下类别的命令:

数据控制语言: grant(授予)和revoke(回收)命令。

数据类型: char: 长度在1到2000个字节,声明多少字节在内存中就占用多少字节,输入的值小于指定的长度时用空格填充。varchar2: 长度在1到4000个字节,输入的值是多少字节,就占用多少字节。long: 长度在2gb,设置为此类型的列时,要注意:一个表中只有一列可以为long类型,long类型列不能定义为唯一约束或主键约束,不能建立索引,过程或存储过程不能接受long类型的参数。number(p,s): 其中p为精度,表示数字的总位数,在1至38之间。s为范围,表示小数点右边数字的位数,在-84至127之间。date: 日期类型,sysdate为当前系统时间。格式为08-9月-07。timestamp: 用于存储日期的年、月、日以及时间的时、分和秒。其中秒精确到小数点后6位,systimestamp返回当前日期、时间。格式为08-9月-07 04.08.30.000000 下午。raw: 此数据类型用于存储基于字节的数据,如二进制数据或字节串,该类型最多能存储2000个字节,可以建立索引。long raw: 此数据类型用于可变长度的二进制数据,最多能存储2gb。long数据类型的所有限制对long raw数据类型也同样有效。lob又称为大对象数据类型,最多能存储4gb的非结构化信息。包括: clob: clob代表character lob(字符lob),它能存储大量字符数据。如xml文档。blob: blob代表binary lob(二进制lob),它能存储较大的二进制对象,如图形、视频剪辑和声音剪辑。bfile: bfile代表binary file(二进制文件),它能够将二进制文件存储在数据库外部的操作系统文件中。

伪列:

rowid: select rowid,ename, from scott.emp where empno=7900;rownum: select * from scott.emp where rownum<11;//限制查询返回的行数

语法知识:

desc 表名;//查看表结构

alter table 表名 modify(列名 varchar2(25));//修改列 alter table 表名 add(列名 varchar2(12),列名 number(12));//添加列 alter table 表名 drop column 列名;//删除列 truncate table 表名;//中删除记录而不删除结构,不使用事务处理,因此无法回滚

drop table 表名;//删除表及其全部数据 create table 新表名 as select * from 表名 where 1=2;//用现有的表创建一个新表 select deptno*2 new no,dname,loc from dept;//指定一个含有特殊字符(如空格)的列标题

savepoint 标记名;//标记事务点 rollback;//回滚整个事务处理 rollback to [savepoint] 标记名;//回滚到事务中某个特定的保存点

集合操作符: union(联合): 此操作符返回两个查询选定的所有不重复的行。

语法 select orderno from order_master union select orderno from order_detail;union all(联合所有): 此操作符合并两个查询选定的所有行,包括重复的行。

语法:select orderno,ename from order_master union all select orderno,proname from order_detail order by 2;注意:在两个select语句中指定的列名不必相同,但数据类型必须匹配。也可以对联合查询的结果进行排序,使用order by子句时,它必须放在最后

一个select语句之后,而且必须指定列索引来排序,而不是指定列名,列索引是从1开始的整数。上述语法便是以proname的索引排序 intersect(交集): 此操作符只返回两个查询都有的行。

语法:select orderno from order_master intersect select orderno from order_detail;minus(减集): 此操作符中返回由第一个查询选定但是第二个查询中没有选定的行,也就是在第一个查询结果中排除第二个查询结果中出现的行。

语法:select orderno from order_master minus select orderno from order_detail;查询尚未交付的订单

连接(||)操作符:

语法: select(供应商||venname||的地址是||venadd1|| ||venadd2|| ||venadd3)地址 from vendor_master where vencode=v002;将多个字符串合并为一个字符串。sql函数:

1、日期函数: add_months: 此函数返回给指定的日期加上指定的月数后的日期值。语法为add_months(d,n),其中d是日期,n表示月数。

示例:select add_months(sysdate,2)from dual;将当前时间加上2个月后的日期值。

months_between:

此函数返回两个日期之间的月数。语法为months_between(d1,d2),其中d1和d2是日期,如果d1大于d2,则结果为正数;否则为负数。last_day: 此函数返回指定日期当月的最后一天的日期值,语法为last_day(d),其中d表示日期。

示例:select last_day(sysdate)from dual;返回当前日期的月的最后一天,如果是9月就返回30-09月-07 round: 此函数返回日期值,将日期四舍五入为格式模型指定的单位。语法为round(d,[fmt])。其中d是日期,fmt是格式模型。fmt是一个可选项,日期默认舍入为最靠近的那一天。如果指定格式为年year,则舍入到年的开始,即1月1日;如果格式为月month,则舍入到月的第一日;如果格式为周day,则舍入到最靠近的星期日。

示例:select round(sysdate,month)from dual;返回最接近的一个月。next_day: 此函数返回指定的下一个星期几的日期。语法为next_day(d,day)。其中d表示日期,而day指周内任何一天。

示例:select next_day(sysdate,星期日)from dual;返回下一个星期日的日期,也可以用1表示,以此类推,星期一以2表示。trunc: 此函数将指定日期截断为由格式模型指定的单位日期,与round函数不同的是它只舍不入,语法为trunc(d,[fmt]),与round格式相同。

示例:select trunc(sysdate,year)from dual;返回当前年的第一天,也就是1月1日。示例:select trunc(sysdate,day)from dual;返回紧靠前面的星期日。如果为2005年1月27日就会返回2005年1月23日。extract: 此函数提取日期时间类型中的特定部分。语法为extract(fmt from d),其中d是日期时间表达式,fmt是要提取的部分的格式。格式的取值可以是year,month,day,hour,minute,second,注意此处的格式不使用单引号。

示例:select extract(year from sysdate)from dual;返回当前的年份。

2、字符函数: initcap(char): 首字母大写,示例:select initcap(hello)from dual;输出结果:hello。lower(char): 转换为小写,示例:select lower(fun)from dual;输出结果:fun。upper(char): 转换为大写,示例:select upper(sun)from dual;输出结果:sun。ltrim(char,set): 左剪裁,示例:select ltrim(xyzadams,xyz)from dual;输出结果:adams。rtrim(char,set): 右剪裁,示例:select rtrim(xyzadams,ams)from dual;输出结果:xyzad。

translate(char,from,to): 按字符翻译,示例:select translate(jack,abcd,1234)from dual;输出结果:j13k。replace(char,search_str,replace_str): 字符串替换,示例:select replace(jack and jue,j,bl)from dual;输出结果:black and blue。instr(char,substr[,pos1,pos2]): 查找子字串位置。

示例:select instr(vorldwide,d)from dual;输出结果:5。pos1为可选,表示从第几个位置查找。pos2为可选,表示从第几次出现的位置找。substr(char,pos,len): 取子字符串,示例:select substr(abcdefg,3,2)from dual;输出结果:cd。concat(char1,char2): 连接字符串,示例:select concat(hello,world)from dual;输出结果:helloworld。chr: 此函数根据ascii码返回对应的字符,示例:select chr(45788),chr(53671),chr(50167),chr(65)from dual;输出结果:曹 学 明 a。ascii:

此函数返回gbk编码值,示例:select ascii(曹)cao ,ascii(学)xue,ascii(明)ming from dual;输出结果:45788 53671 50167。lpad和rpad:

示例:select lpad(function,15,=)from dual;输出结果:=======function。而rpad则相反,字符串填充在右边。trim: 此函数从字符串的开头或结尾(或开头和结尾)剪裁特定的字符,默认剪裁空格。如果加上leading选项时与ltrim函数相似。指定trailing时和 rtrim函数相似。示例: select trim(9 from 999992598899)from dual;输出结果:25988。

示例: select trim(leading 9 from 999992598899)from dual;输出结果:2598899。示例: select trim(trailing 9 from 999992598899)from dual;输出结果:9999925988。length: 此函数返回字符串的长度,示例:select length(frances)from dual;输出结果:7。decode: 示例:select deptno,dname,decode(loc,new york,纽约,boston,波士顿)from scott.dept;篇二:oracle数据库学习心得 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)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。arch(archiver)进程。每当联机日志文件写满时,该进程将其拷贝到归档存储设备上。另外还包括分布式db中事务恢复进程reco和对服务进程与用户进程进行匹配的dnnn进程等。3.oracle的逻辑结构

构成oracle的数据库的逻辑结构包括:(1)表空间

(2)5种类型的段(segment)

①数据段;②索引段;③回滚(rollbock)段;④临时段;⑤自举(bootstrap)段。段的分配单位叫范围(extent)

表空间(tablespace)一个数据库划分成的若干逻辑部分称为表空间。一个数据库可以有一个或多个表空间,初始的表空间命名为system,每一个逻辑表空间对应于一个或多个物理文件。dba使用表空间做以下工作: 控制数据库对象,如表、索引和临时段的空间分配。为数据库用户设置空间配额。

利用个别表空间的在线或离线,控制数据的可用性。后备或恢复数据。

通过分配空间,以改进性能。

在每个数据库中都存在system表空间,它在建立数据库时自动建立。在该表空间中,包含数据库的数据字典,其中存储全部数据库对象的名字和位置。system表空间总是在线的,像其它表空间一样,可以通过增加新的数据库文件来扩大。一个表空间可包含许多表和索引。但一个表和索引不能跨越表空间,可跨越组成表空间的文件。在db的打开的情况下,dba利用alter tablespace语句,可以实施表空间的在线或离线。system表空间必须在线。表空间离线有下列原因: 一般为了使部分数据库不能使用,而允许正常存取数据库其余部分。执行表空间离线备份。

一个离线的表空间,不能被应用用户读或编辑。

可以增加数据文件扩大已有的表空间,也可增加新的表空间使数据库容量增大,或分配空间给某个应用。使用alfer tablespace add file语句将另一个数据文件加入到已存在表空间中。使用create tablespace语句可建立一个新的表空间。段(segment)表空间中的全部数据存储在以段划分的数据库空间中。一个段是分配给数据库用于数据存储的范围的集合。数据可以是表、索引或rdbms所需要的临时数据。段是表空间的下一个逻辑存储的级别。一个段不能跨越一个表空间,但可跨越表空间内的文件。一个数据库最多需要五种段类型: 数据段 一个包含一个表(或聚集)的全部数据,一个表(或聚集)总有一个单个数据段。

索引段 一个索引段包含对一个表(或聚集)建立的一个索引的全部索引数据。一个表可以有一个、多个或者没有索引段,取决于它所拥有的索引个数。一个聚集必须至少有一个索引段,即在聚集码上 建立聚集索引。

回滚段 每个db有一个或多个回滚段。一个回滚段是db的一部分,它记录在某一情况下被撤消的动作。回滚段用于事务控制和恢复。

临时段 在处理查询时,oracle需要临时工作空间,用于存储语句处理的中间结果,这个区称为临时段。

自举段 自举段在system表空间中,在数据库建立时建立。它包括数据字典定义,在数据库打开时装入。4.用户数据库对象

由用户建立的对象驻留在表空间中,含有真正的数据。数据库对象有表、视图、聚集、索引、伪列和序号生成器。

(1)聚集(cluster)聚集是存储数据的一种可选择的方法。聚集包括存储在一起的一组表,它们共享公共列并经常一起使用。由于内容相关并且物理地存储在一起,存取时间得到改进,存储空间可以减少。聚集是一种优化措施。

聚集对性能的改进,依赖于数据的分布和sql操作的内容。特别是使用聚集对连接非常有利。可以明显地提高连接的速度。建立聚集命令的基本格式: sql>create cluster〈聚集名〉(列定义[,„]);利用聚集建立表命令基本格式: sql>create table〈新表名〉(列定义[,„]cluster〈聚集名〉(聚集列);篇三:oracle学习心得

oracle rac 学习心得 1.概念 rac,全称real application clusters,译为“实时应用集群”,是oracle新版数据库中采用的一项新技术,是高可用性的一种,也是oracle数据库支持网格计算环境的核心技术。

在oracle9i之前,rac的名称是ops(oracle parallel server)。rac 与 ops 之间的一个较大区别是,rac采用了cache fusion(高速缓存合并)技术。在 ops 中,节点间的数据请求需要先将数据写入磁盘,然后发出请求的节点才可以读取该数据。使用cache fusion时,rac的各个节点的数据缓冲区通过高速、低延迟的内部网络进行数据块的传输。2.优缺点

优点:

oracle rac主要支持oracle9i、10g、11g版本,可以支持24 x 7 有效的数据库应用系统,在低成本服务器上构建高可用性数据库系统,并且自由部署应用,无需修改代码。在oracle rac环境下,oracle集成提供了集群软件和存储管理软件,为用户降低了应用成本。当应用规模需要扩充时,用户可以按需扩展系统,以保证系统的性能。(1)多节点负载均衡;(2)提供高可用:故障容错和无缝切换功能,将硬件和软件错误造成的影响最小化;(3)通过并行执行技术提高事务响应时间----通常用于数据分析系

统;(4)通过横向扩展提高每秒交易数和连接数----通常对于联机事务系

统;(5)节约硬件成本,可以用多个廉价pc服务器代替昂贵的小型机或大

型机,同时节约相应维护成本;(6)可扩展性好,可以方便添加删除节点,扩展硬件资源。缺点:(1)相对单机,管理更复杂,要求更高;(2)在系统规划设计较差时性能甚至不如单节点;(3)可能会增加软件成本(如果使用高配置的pc服务器,oracle一般 按照cpu个数收费)。3.rac 特点

每一个节点的linstance都有自己的sga 每一个节点的linstance都有自己的background process 每一个节点的linstance都有自己的redo logs 每一个节点的linstance都有自己的undo表空间

所有节点都共享一份datafiles和controlfiles 4.rac 组件

5.undo和redo读书笔记

1)redo是什么?oracle的redo是如何工作的 redo是重做日志文件,是oracle数据库的日志文件.oracle的重做日志有两种:在线重做日志以及归档重做日志。

在线重做日志:主要用于由于数据库主机掉电等原因导致实例失败,此时oracle采用在线重做日志在数据库启动时将数据库恢复到断电之前的时间点上。

归档重做日志:主要用于介质失败,比如:磁盘受损。此时需要使用对磁盘上的数据备份的归挡重做日志文件将该磁盘上的数据恢复到该归档文件数据所在的时间点上,然后再使用在线重做日志文件将适合的时间点上。

归档重做日志文件实质是被添满的旧的在线重做日志的副本。归档重做日志文件是数据库的历史数据。

在线重做日志在每个数据库中至少有两个重做日志组,每个日志组中至少有一个重做日志文件,这些在线重做日志组是循环使用的,当日志组1被写到最后时,然后自动切换到日志组2;当日志组2也被写满时,再切换到日志组1。2)undo是什么?oracle的undo是如何工作的 undo与redo相反,redo是恢复数据,用于在事务失败时重放事务,undo是撤消一条语句或者一组语句的作用。undo是存储在数据库内部的段或者表空间中(undo如果是手动管理,则使用undo段来管理;如果undo使用aum管理undo,则undo使用表空间来自动管理)。注意:在undo并不是物理的恢复到执行语句之前或者事务之前的样子,只是逻辑的恢复到原来的样子,所有修改只是逻辑的取消,但是数据结构和数据块在回滚之后也大不相同。原因是在多用户系统中,有很多事务是并发进行的,当一个事务修改一个数据并且被回滚,但是该数据在该用户对该数据做过修改之后也有被其他用户修改,这个时候如果是对该事务修改的数据块回滚到原来数据的物理样子,就有可能将后来的事务所做的修改给覆盖掉。所以回滚不是

一个简单的物理的恢复,而是逻辑恢复。3)undo和redo是如何协作工作的 4)6.篇四:oracle数据库学习总结 oracle数据库学习总结

时间过的还真快,不知不觉中就在这里呆了半个月了。这段时间里都在学习oracle数据库的编程,毕竟这是家软件外包公司。像我们这样的新员工也就只能接触到些curd的操作。废话不多说,赶紧来梳理下这半月来学习的知识点.在来公司之前一直都是使用sql server数据库,用sql server也开发了3个小型项目。所以对sql语句以及在数据库中扮演重要作用的存储过程,触发器,视图,主键/外键约束都很熟。但oracle是一个全新的环境,记得刚装上oracle的时候,我都不知道在哪查看自己已经建立好的表格。还好有师傅的帮忙,要不然我还真没这么快就能入门oracle。学习东西就要学习些能改变自己思维的东西,只有这样才能让自己的眼光比别人更独到,思维比别人更深邃,oracle就是这样的东西。当然做这样的事是要很大的驱动力的呀,如果公司不是都采用oracle来写程序的话,我估计也就懒得学啦。对于一位程序员来说并不需要完全掌握oracle的所有知识,毕竟自己不是dba。在日常开发中也用不到那些命令和工具,但是有些知识点我们还是必须得熟练的掌握它们。比如:一些基本的ddl和dml语句,存储过程,函数,视图,触发器,序列,游标,自定义类型和包。

下面我就把这段时间里学习oracle获得的知识点罗列出来,一是为了方便以后查阅,二是为了和搭档交流学习经验。

要适应的一些细节 从sql server转到oracle进行数据库编程,第一道门槛就是语法问题。很多很多的问题都是因为语法而产生的,现将它们统统集合起来并将它们一网打尽之。pl结构。在sql server中,采用的是批处理执行任务的方式,所以可以将多条sql语句选中批量执行,而不用顾忌要在专门的地方声明变量,在专门的地方进行逻辑编码。在oracle中采用的是pl编程方式,必须在专门的地方声明变

循环结构,要达到循环在oracle中有3种方式,各有各的好处,你懂的。它们分别如下: pl结构中的错误处理

就像c#中的try{} catch{}语句块 能捕获错误。写几个例子: helloworld级别的错误抛出例子 record类型

oracle中的record类型类似于c语言中的结构体,主要用来接收select 语句或游标中返回的数据,下面写个例子: ddl语句

这里的ddl语言主要是指能完成如下工作的ddl语言:创建表,创建表的主/外 键及级联效果,dml语句

select语句。oracle中的select语句的使用方法与 sql server差不多,但还是有些不同之处。篇五:oracle学习体会 oracle学习体会

王岩

2015年,为落实重点开展“完善业务系统,加强统计数据汇总分析”的工作要求,根据协会安排,我由政策信息部调整到统计部,在稳步推进业务系统数据库工作的基础上,努力配合做好网络及其他软硬件管理等工作。对于曾经负责信息宣传工作的我来说,计算机技术还是一个全新的领域。

根据协会安排,我从今年的4月到11月利用周末时间学习专业知识,旨在通过参加学习中心的linux系统和oracle数据库等培训课程,承担协会业务系统数据库的开发和管理工作。在参加专业培训机构课程的同时,臧立副主任也会不定期针对协会的业务系统数据库为我们做一些内训。通过这一年来的学习、回顾和梳理,让我对oracle数据库知识以及协会的业务系统数据库框架有了一定的了解,也对协会的数据库管理工作方面有了一些建议。

一份总结和体会 oracle数据库分两个方面,一块是开发,一块是管理。开发主要是写存储过程、触发器之类的编程工作,类似于程序员,需要有较强的逻辑思维能力和创造能力。数据库管理则是需要对oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,而协会的业务系统数据库工作则是同时包含了开发和管理的内容。

在有一定的oracle专业知识之后,我开始接手了辽宁省协会和 广东省协会的业务数据分入处理工作。其中,根据每期不同的业务数据,需要对数据导入的操作脚本进行修改,遇到有问题的数据,需要根据错误进行逻辑分析,创建新的脚本来筛选出错误数据,并进行修改整理,最终将正确、完整的业务数据导入到协会业务系统数据库中,为保费结算工作提供了及时可靠的数据支持。

做计算机技术工作的人都知道,专业的知识只能称得上打开这项工作大门的一把钥匙,要想真正迈进协会数据库管理工作这项领域,我们还需要学习掌握协会的业务系统数据库框架。协会的数据库里面承载着一百多类表,包含着一千余个列,我们不仅要知道这些表的逻辑结构和数据类型,还要知道各个表之间的关联,从而在数据库中顺利的实现增、删、改、查我们所需要的数据。

一点不足和建议

协会的数据库建设工作无论是逻辑结构方面,还是软件兼容方面,都做的很好,但是在硬件设备管理上,我们可能还有更好的选择。2015年年末,我接手了一项筛查数据的工作,原因是山东数据库服务器机房出现故障,导致丢失了部分业务数据,我的任务就是要将这些丢失的数据文件名查找出来,以便山东协会后期进行补救工作。事后我对这件事进行了思考,事故的主要原因是因为他们的数据库服务器存放在省协会本部没有专业管理的机房中,由于空调故障室温过热,导致硬盘烧毁,在此方面,国家协会目前的做法和省协会一样,都将服务器存放在本部没有专业管理的机房。2015年7月,由于协会网络供应商硬件设备出现严重故障,导

致我会办公网络以及业务系统全面瘫痪,虽然我部已在第一时间查明原因,但却束手无策,只能敦促网络供应商尽快修复。

根据以上两次实际案例,为了避免这类事故再次发生,我建议尽快将协会数据库迁移至更加专业的托管机房,确保业务系统数据库服务器统一管理、规范管理,还有就是要进一步加强协会机房和大兴托管机房的巡检工作,避免硬件设备出现故障,进而确保业务系统高效、安全运行。

第五篇:oracle学习日志

2010年10月2日星期六

1.sql语句的执行过程

连接----安全检查----解析----绑定----执行----返回。2.SGA和PGA的区别

2010年10月3日星期日

1.

ORACLE学习日记
TOP