----oracle 入门
---------oracle 原理流程
用户进程→服务进程(PGA)
SGA
↑
→内存结构
→共享池 :用来对SQL语句,PLSQL语句进行解析,执行的内存区域,其大小直接影响数据库性能,库缓寸和数据字典缓寸组成
→数据缓冲区 :用于在内存中保存从磁盘中读取的数据,所有用户共享,其大小直接影响数据库读取数据的速度.
→日志缓冲 :在内存中用来记录数据库数据修改的记录,如果数据量过大,后台进程会将其写入日志文件当中.
→后台进程
→PMON :清理故障进程,释放当前挂起的锁,释放故障进程所占用的资源.
→SMON :在实列启动失败后,重新打开数据库将自动恢复,整理数据文件,将相临近的区域结合起来,释放不在使用的临时段
→DBWR :管理数据缓冲区,将最近使用的的块保留到内存当中,将修改后的数据写入数据文件当中.
→LGWR :将日志缓冲区的日志写入日志文件当中,多个日志文件 则以循环形式进行.
→其他
↓ ↓ ↓
数据文件 控制文件 日志文件 →归档日志文件
参数文件←
口令文件←
PGA:程序全局区
→单个服务器进程所需的数据和控制信息.
→PGA是在用户进程连接到数据库并创建一个会话时自动分配的,保存每个与Oracle 数据库连接的用户进程所需的信息
→PGA为非共享区,只能单个进程使用,当一个用户会话结束,PGA释放
SGA:系统全局区
→内存结构
oracle 数据库服务器: oracle数据库和 oracle数据库实例 组成的.
oracle 实例 :主要指 管理数据库后台的进程 和 内存 结构 的 集合 .
oralce 启动便会 分配系统全局区(内存)和启动 后台进程.
oralce 物理结构: 数据文件 控制文件 日志文件
oralce 逻辑结构: 段,区,数据块,模式
段: 数据段、索引段、回退段和临时段。构成表空间的逻辑存储结构,段由一组区组成.
区: 由连续的数据块组成,区不能跨数据文件存在,只能存在于一个数据文件中.
数据块: 是Oracle服务器所能分配、读取或写入的最小存储单元,Oracle服务器以数据块为单位管理数据文件的存储空间.
模式: 对用户所创建的数据库对象,包括表、视图、索引、同义词、序列、过程和程序包等.
---表空间
----uniform本地表空间
----SIZE为每个区的大小,默认为1MB。此表空间区的大小相同
create tablespace dragchong1
datafile '/oracle9i/dragchong/test1.dbf' size 10M
extend management local uniform size 256k;
----autoalllocate本地表空间
---本地表空间的默认类型,区的大小由系统自动分配
create tablespace dragchong2
datafile '/oracle9i/dragchong/test2.dbf' size 10M
extend management local authoalllocate;
---回滚表空间
create undo tablespace dragchong3
datafile '/oralce9i/dragchong/test3.dbf' size 10M;
---临时表空间
---一般不要使用,除了特殊需要
---由于表空间不段分配空间和 删除数据容易产生大量磁盘碎片
create temporary tablespace dragchongtemp
tempfile '/oralce9i/dragchong/test4.dbf' size 10M;
---修改表空间大小
---增加表空间大小,追加了一个数据文件
alter tablespace dragchong2
add datafile '/oralce9i/dragchong/test5.dbf' size 10M;
---改变表空间大小
alter tablespace dragchong2
modify datafile '/oralce9i/dragchong/test5.dbf' resize 15M;
---移动数据文件
---------数据文件脱机
alter tablepace dragchong2 offline;
---------使用以下命令
alter tablespace dragchong2 datafile '/oralce9i/dragchong/test5.dbf'
to '/oralce9i/chenchong/test5.dbf'
---------然后 在操作系统上进行手动的物理上的移动数据文件
copy===past
---------再将数据文件改为在线
alter tablespace dragchong2 online;
---给指定表空间 给定指定的用户
create user dragchong
identified by 123456
default tablespace dragchong2
--temporary tablespace dragchongtemp
--quota 15m On dragchong2
--password expire;
--修改用户密码
alter user dragchong2 identified by 111111;
--修改用户默认表空间
alter user dragchong2 default tablespace dragchong2;
--给用户 加锁 /解锁
alter user dragchong2 lock;
alter user dragchong2 unlock;
---删除用户
---在线用户不能被删除
---如果用户创建了实列,则必须要cascade
drop user dragchong2 cascade;
----权限
--------赋予权限
grant create any table to dragchong2;
--------回收权限
revoke create any table from dragchong2;
----角色
connection ,resource
----操作权限
select, update ,all
---------------------------------------------SQL--语法----------------------------------------------------------------
----创建表
create table emp(userid varchar2(10));
create table smp(userid varchar2(10),constraint O_USERID primary key (USERID));
create table smp as select *from smp;
alter table emp add(username varchar2(10)); ---增加字段
alter table emp add constraint K_USERID primary key (USERID) ---增加主键
alter table emp modify(username varchar2(20)); ---修改字段 大小
alter table emp add constraint f_USERID foreign key (USERID) reference smp(userid); ---增加主键
----给表分区 缺
create table T_PBH_PROBLEMPROCESSHIS
(
SERIALNO VARCHAR2(20) not null,
SRID VARCHAR2(20),
SRTYPEID VARCHAR2(128),
ORIGINALSRTYPEID VARCHAR2(128),
ADVISEDSRTYPEID VARCHAR2(128),
)
TABLESPACE TBS_CSP_WF_HISDAT
PARTITION BY RANGE (SERIALNO)
(
PARTITION P_07_09_1 VALUES LESS THAN ('20070911'),
PARTITION P_MAX_VALUE VALUES LESS THAN ( MAXVALUE )
);
----对表的基本操作
----查
select *from emp;
----改
update emp set userid='1' where userid is null;
----增
insert into emp(userid) values ('2');
----删
delete from emp;
delete *from emp where emp.userid='1';
truncate table emp;
-----创建索引
索引:对存储在磁盘上的数据进行映射,将路径记录下来,用户进行查询操作 会根据索引去找数据,速度很快的
→ 一般上在海量的数据才建立索引的,没有海量的数据,也没必要建立索引,性能消耗
→ 表更新比较频繁,那么在索引中删除标示会越来越多,这时索引的查询效率必然降低,所以应该定期重建索引,来消除索引中这些删除标记
建立索引原则一:
→ 表的主键、外键必须有索引,当PRIMARY KEY和UNIQUE KEY的约束有效时,Oracle自动创建此索引。
→ 经常与其他表进行连接的表,在连接字段上应该建立索引。
→ 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引。
→ 索引应该建在选择性高的字段上,否则即使建了索引也无法被利用。
→ 索引应该建在小字段上,对于大的文本字段甚至超长字段,如LOB、LONG、LONG RAW等类型字段不能建索引。
→ 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替。
→ 频繁进行数据操作的表,不要建立太多的索引。
→ 避免使用位图索引,特别是频繁进行数据操作的表,禁止使用位图索引
建立索引原则二:
→ 对于分区表,除有唯一性要求的字段建全局索引外,其它字段一律建成局部索引。
→ 索引对应SELECT语句来说,是加快了检索的速度,但对于UPDATE、INSERT和DELETE来说,则是减慢了速度。因此对于临时性的大批量数据操作,尽可能先删除索引,事务完成后再重建。
→ 删除无用的索引,避免对执行计划造成负面影响。
→ 频繁进行数据操作的表,需对索引进行周期性重建。
→ SQL语句的WHERE子句中应尽可能将操作移至等式的右边,特别是索引字段的操作,必要时可考虑建函数索引。
→ SQL语句的WHERE子句中操作符两边类型应相同,避免潜在的数据类型转换
自动索引: 表的主键, 会自动产生索引.
手动索引: create index indext_emp on emp(userid)
重建立索引: alter index indext_emp on emp(userid)
-----创建序列
CREATE SEQUENCE toys_seq
START WITH 10
INCREMENT BY 10
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 10;
-----创建触发器
CREATE OR REPLACE TRIGGER del_emp_deptno
BEFORE DELETE ON dept
FOR EACH ROW
BEGIN
DELETE FROM emp WHERE deptno = :OLD.deptno;
END;
------删除触发器
DROP TRIGGER del_emp_deptno on dept;
---------------------------------------------PLSQL--语法----------------------------------------------------------------
基本语法:
----------------------------
--循环语句
loop
x:=x+1;
if(x>10)then
exit;
end loop;
-----------------------------
loop
x:=x+1;
exit when x>10;
end loop;
-----------------------------
X:=100;
FOR v_Counter IN 1..10 LOOP
X := X + 10;
END LOOP;
Y := X;
-----------------------------
--判断语句
if(x>y)then
dbms_output.put_line(x>y);
if
elsif(x<y)then
dbms_output.put_line(x<y);
else
dbms_output.put_line(x=y);
}
----------------------------
----跳转
DECLARE
X NUMBER(3);
Y NUMBER(3);
V_COUNTER NUMBER(2);
BEGIN
X := 100;
FOR V_COUNTER IN 1 .. 10 LOOP
IF V_COUNTER = 4 THEN
GOTO end_of_loop;
END IF;
X := X + 10;
END LOOP;
<<end_of_loop>>
Y := X;
dbms_output.put_line('Y:'||Y);
END;
----------------------------
-----创建存储过程
create or replace procedure testOne
(
userid in varchar2;
username out varchar2
)
as--is
v_sql varchar2(1000);
v_username varchar2(10);
begin
v_sql='select emp.username into '||v_username || 'from emp where emp.id =' '||v_username||';
execute immediate v_sql;
username :=v_username;
end
-----创建函数
-----异常
----------异常处理
begin
x:=x+1
exception
when NO_DATA_FOUND then
dbms_output.put_line(x);
when OTHERS then
dbms_output.put_line(x);
end;
----------自定义异常
declare
salary varchar2(10)
text Exception;
begin
loop
salary :=salary+1;
if salary in('6','7','8')then
raise text;
end if;
end loop;
exception
when text then
dbms_output.put_line('出错了');
end;
-----创建游标
DECLARE
CURSOR
c_emp IS SELECT?ename, salary FROM emp;
R_emp c_emp%ROWTYPE;
[R_emp EMP%ROWTYPE; ]
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO r_emp;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUT.PUT.PUT_LINE('Salary of Employee'||r_emp.ename||
'is'||r_emp.salary);
END LOOP;
CLOSE c_emp;
END;
-----包
------------------创建包头
CREATE PACKAGE test_package IS
--定义变量
man_num NUMBER;
woman_num NUMBER;
--定义游标
CURSOR学生;
--定义函数
CREATE FUNCTION f_count(in sex IN 学生.sex%TYPE)
--定义返回值类型
RETURN NUMBER;
--定义过程
CREATE PROCEDURE p_count(in_sex IN 学生.sex%TYPE, out_num OUT NUMBER);
--包头结束
END test_package;
---------------创建包体
CREATE PACKAGE BODY test_package AS
--游标具体定义
CURSOR 学生IS
SELECT 学号,姓名 FROM 学生 WHERE 学号 < 50;
--函数具体定义
FUNCTION f_count(in_sex IN学生.sex%TYPE)
--定义返回值类型
RETURN NUMBER IS
out_num NUMBER;
--函数体
BEGIN
IF in_sex = '男' THEN
SELECT count(sex) INTO out_num FROM 学生 WHERE性别='男';
ELSE
SELECT count(sex) INTO out_num FROM 学生 WHERE 性别='女';
END IF;
--返回函数值
RETURN(out_num);
--函数定义结束
END f_count;
--过程具体定义
PROCEDURE p_count(in_sex IN学生.sex%TYPE, out_num OUT NUMBER) AS
--过程体
BEGIN
IF in_sex = '男' THEN
SELECT count(sex) INTO out_num FROM 学生 WHERE性别 = '男';
ELSE
SELECT count(sex) INTO out_num FROM 学生 WHERE 性别= '女';
END IF;
--过程定义结束
END P_count;
--包体定义结束
END test_package;
---------------导入 导出
----按用户方式导出数据
exp scott/tiger@accp file=scott_back owner=scott
----按表方式导出数据
exp scott/tiger@accp tables=(emp, dept) file=scott_back_tab
----按表空间方式导出数据
exp system/aptech@accp tablespaces=(users) file=tbs_users
----使用参数文件导出数据
exp system/aptech parfile='C:\parameters.txt'
----将整个文件导入数据库
imp accp/accp@accp file=item_back.dmp ignore=y full=y
----将scott用户的表导入到martin用户
imp system/aptech@accp file=scott_back fromuser=scott touser=martin tables=(emp,dept)
----使用参数文件导入数据
imp system/oracle parfile='C:\parameters.txt'
---常用操作 实战
如果你知道字段的名称,但不知道在哪个表中,可以使用以下语句:
select * from user_tab_cols where COLUMN_NAME like '%STAFF%';
如果你知道表的大概的名称,但又不知道具体的表的名称.可以使用以下语句:
select * from tab where TNAME like '%T_UCP_ME%'
分享到:
相关推荐
oracle基础教程 课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 ORACLE数据库概述 2 1.1 产品概述 2 1.1.1 产品简介 2 1.1.2 基本概念 3 1.2 ORACLE系统结构 4 1.2.2 ORACLE物理结构 4 1.2.3 系统全局区 6 ...
以下是对Oracle基础知识的详细解析: **1. Oracle数据库概述** Oracle数据库是一个关系型数据库管理系统(RDBMS),它以数据表的形式存储和管理数据,每个表由列定义,数据以行的形式存储。Oracle 8i及以上版本还...
对于初学者来说,掌握Oracle基础知识是进入数据库领域的第一步。本文将深入浅出地介绍Oracle数据库的一些核心概念和基本操作,帮助你快速入门。 一、Oracle数据库系统概述 Oracle数据库是由美国Oracle公司开发的,...
oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料
Oracle 基础教程 Oracle 是一款流行的关系型数据库管理系统,由 Oracle 公司开发和维护。作为一个功能强大且广泛应用的数据库管理系统,Oracle 具有强大的数据存储和管理能力,广泛应用于各种 Industries,包括金融...
通过本Oracle基础教程PPT,你将逐步了解并掌握这些概念,为你的Oracle学习之路打下坚实基础。随着对Oracle的理解加深,你还可以进一步探索高级主题,如数据仓库、分布式数据库、RAC集群等。学习Oracle不仅是技术的...
以下将详细讲解Oracle基础知识,包括数据库管理、表的创建与维护、SQL查询技巧、权限管理以及PL/SQL编程等方面。 1. **Oracle数据库优势** Oracle数据库因其高性能、高可用性和安全性而受到青睐。它支持大规模并发...
这个"oracle基础知识考试题_答案.zip"压缩包文件包含了关于Oracle数据库的基础知识学习材料,特别是针对初学者或者准备Oracle相关资格考试的人员。 首先,Oracle数据库的核心概念包括SQL(结构化查询语言)的使用,...
本资料“oracle基础知识回顾与练习.zip”是针对Oracle数据库的基础知识进行整理,采用纯SQL语句的形式,适合初学者及需要巩固基础的用户进行学习和实践。 1. SQL基础 SQL(Structured Query Language)是用于管理...
Oracle基础教程.pdf
ORACLE基础知识及故障定位 学校oracle基础知识,包含所有orcale的数据库知识,以及常见问题解决思路,解决方案,问题怎么定位。
oracle基础创建表,删除表,修改表,查看表的结构和数据,添加数据语法:删除数据语法,更新数据语法:基础查询语法:
《Oracle基础教程》是由James Perry和Gerald Post合著,并由钟鸣、郝玉洁等人翻译的一本教育性书籍,旨在帮助初学者和专业人士理解Oracle数据库的基础知识。源码下载部分提供了书中各章节实例的数据文件,使读者能够...
本文将基于"Oracle基础资料"这一主题,结合提供的压缩包文件"Oracle8i_9i数据库基础.doc",深入探讨Oracle数据库的基础知识,包括其核心概念、数据类型、SQL语句、表的创建以及备份恢复策略。 首先,Oracle数据库的...
oracle基础教程,很适合oracle的学习和数据库的操作练习。同时里面主要是以练习为主。包括了ORACLE的基础操作。
这篇“Oracle基础培训文档”旨在为初学者提供一个全面了解Oracle数据库的平台,帮助大家掌握其基本概念、操作和管理技巧。 首先,我们从基础开始,Oracle数据库的核心是SQL(结构化查询语言),它是用于管理和处理...
"Oracle基础教程.pdf" 提供了丰富的学习资源,共分为21章,涵盖了Oracle数据库的核心概念和技术。 第1章:Oracle简介 本章将介绍Oracle数据库的历史、特点和应用领域,以及它在现代企业级数据管理中的重要地位。你...
以上是Oracle基础训练的主要内容,通过深入学习和实践,你将能熟练掌握Oracle数据库的基础操作和高级特性。"Oracle基礎教程(一).ppt"至"Oracle基礎教程(三).ppt"中的材料将帮助你逐步掌握这些知识,为你的数据库管理...
"Oracle基础知识"涵盖了SQL语言的基本概念以及Oracle 10G版本的相关特性。以下将详细介绍这些知识点。 首先,SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言。SQL基础包括以下几个部分...
Oracle 基础知识点总览 Oracle 基础知识点可以概括为以下几个方面: 1. Oracle 概述 Oracle 是一种对象关系数据库管理系统(ORDBMS),它提供了关系数据库系统和面向对象数据库系统这二者的功能。Oracle 数据库...