Oracle复习笔记

外面登录 sqlplus / as sysdba
数据库里切换用户 conn / as sysdba

用户账户解锁 alter user hr account unlock;
修改用户密码 password hr 密码设置成abc ,conn hr/abc
查看数据库所有的用户(dba_users )
desc dba_users select…
(select * from dba_users)
set pagesize 25 linesize 120
set sqlprompt _user"@"_connect_identifier>

1、 以SYS身份登录
sqlplus / as sysdba
2、 以scott用户登录
conn sys/admin123 as sysdba
@D:\app\oracle\product\1830\rdbms\admin\scott.sql;
或者
alter user scott account unlock;
password scott tiger
alter user scott identified by tiger;
登录后只用执行这一句即可:conn scott/tiger
3. 以HR用户登录
alter user hr account unlock;
password hr abc
alter user hr identified by abc;
登录后只用执行这一句即可:conn hr/abc

修改显示语言为英文:ALTER SESSION SET NLS_LANGUAGE=american;
界面
一、sqldeveloper
1、
启动监听:lsnrctl start
查看监听:lsnrctl status
停止监听:lsnrctl stop
2、建立连接(连接名,用户名sys,口令admin,主机名,端口号,SID)
二、EM Epresess
Sqlplus / as sysdba
SYS@db18c>desc dbms_xdb_config
Select dbms_xdb_config.GETHTTPPORT from dual;
execute dbms_xdb_config.SETHTTPPORT(8899);
打开浏览器输入(http://hostname:端口号/em)
Eg.: http://LAPTOP-3EBJAP2P:8899/em
用户名:sys
口令:admin
三、启动EMCC(了解)
Oracle体系架构
Oracle服务器
所有服务器有两个部分:
一、intance (例程->例行程序)-> 数据处理
1、内存结构
1)SGA----system global area 系统全局区(可以被系统内的各个会话所共享)
2)PGA----program global area (创建会话时建立,只能被该会话所享用)
2、进程结构
二、database(文件的集合)-> 数据存储
数据处理 +数据存储
集群
Sys、system都是管理员,But
Sys(sysdba)------管理整个oracle服务器,包括instance和database
Sys(sysoper)------只能管instance,管不了database
conn sys/admin as sysoper
System------只能管database,不能管instance

scott.emp
表—表空间—数据文件

Select file_name from dba_data_files
Where tablespace_name = (select tablespace_name
from dba_tables
Where table_name = ‘EMP’);

表(table)的全称:堆表(heap table)
经验-----直接经验
Ø 代码
Ø 数据(用户数据+系统数据)
- SQL(Structured Query Language)—结构化查询语言
- 4GL 描述性语句
- 解析
- 共享池
1、库缓存(SQL区,PL/SQL区)—存放代码的地方
2、数据字典缓存
- 数据字典
1、动态性能视图(指向内存,控制文件)— 动态
v$
2、数据字典视图(指向数据文件)— 静态
dictionary----dict
desc dictionary 等价于 desc dict
user_ ---- 当前用户是所有者(desc user_tables)
all_ ---- 当前用户有权限的能够访问的对象(desc all_tables)
dba_ ---- dba能够访问到的表(会更多,因为dba权限更大)
- RBO—基于规则优化器(Rule Based Optimizer)
- CBO—基于开销优化器(Cost Based Optimizer)
- DLL
Ø 用户

1、redo log 恢复日志

do
undo —撤销,对冲,回滚
redo —重做,恢复,前滚
日志:记录事务
事务:事情,任务
2、ACID—指数据库事务正确执行的四个基本要素的缩写
包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
3、store
backup
restore:还原
recover:
4、数据库里的数据放在表里,表放在表空间(逻辑概念)里,表空间由数据文件组成(数组文件的大小决定了表空间的大小)

表----表空间----数据文件
失败:
create tablespace demo datafile’D:\app\oracle183c\oradata\DB18C\demo0.DBF’ size 10m;(10m表示10兆空间大小)
create table sys.st(id int, name varchar(20)) tablespace demo;

insert into sys.st values(1,‘Tom’);
insert into sys.st values(2,‘Jerry’);
select * from sys.st;
alter tablespace demo offline;
又一次失败:
create tablespace demo2 datafile’D:\app\oracle183c\oradata\DB18C\demo02.DBF’ size 10m;(10m表示10兆空间大小)
create table test(id int, name varchar(20)) tablespace demo2;

insert into test values(1,‘Tom’);
insert into test values(2,‘Jerry’);
commit;
select * from test;

alter tablespace demo2 offline;

*.dbf —.bak
alter database create datafile 5;(看select的报错)
参考: http://blog.sina.com.cn/s/blog_ad65556101017r7g.html
5、进程结构
1----用户进程
UI: 提供访问oracle的一个界面
名称解析
端口
协议(一种约定)
TCP(位于传输层,OSI模型第四层)
监听
2----服务器进程
用户进程的代理
1)专用服务器进程 <200
2)共享服务器进程 200-3000
3----后台进程
PMON:进程监视器进程
SMON:系统监视器进程
DBWR:数据库书写器进程
LGWR:日志书写器进程(从日志缓存写到日志文件)
CKPT:检查点进程

scn system change number
checkpoint_change#
select current_scn,checkpoint_change# from v$database;

alter system checkpoint;

检查点的作用:
1. 同步所有的数据文件
2. 同步所有的控制文件
3. 发送信号通知DBWR写盘

show parameter mttr
fast_start_mttr_target 默认为0
alter system set fast_start_mttr_target = 100; 修改

select name,checkpoint_change# from vKaTeX parse error: Expected 'EOF', got '#' at position 40: …eckpoint_change#̲ from vdatabase;
连接
回话
6、SQL
1. QL(select)
2. DML(insert,update,delete,merge)
3. DDL(create,alter,drop,truncate(清空),rename,comment)
4. DCL(grant(赋予权限),revoke(收回权限))
5. TCL(commit,rollback,savepoint(保存标记))

SELECT
1、返回表的所有数据
select * from tablename;
2、投影
3、选择
4、排序

实现top功能
select empno,ename,sal from emp order by sal desc;
offset 3 rows fetch first 3 rows only;

1) FETCH FIRST n ROWS ONLY; 只取前n个
2) offset n rows fetch first n rows only;
3) FETCH FIRST n ROWS WITH TIES;

sql命令不允许缩写
但sqlplus的命令在不产生歧义的情况下是可以缩写的

显示所有的sqlplus命令: help index

NULL 三值现象
单引号
双引号

1、(Oracle)查询时
与用户交互:提交变量
1—&
2—define
3—&&

进入scott.sql
sqlplus / as sysdba
@D:\app\oracle\product\1830\rdbms\admin\scott.sql;

select empno,ename,sal from emp where empno = 7499;
select empno,ename,sal from emp where empno = &工号;
select empno,ename,sal from emp where ename =upper( ‘&xm’);
由于姓名属性为字符串类型,所以在原有基础上加上单引号’ ',
由于姓名在表中为大写,所以用upper()将用户输入转化为大写

define 预先给变量定义一个值,方便后面引用以及后续修改
undefine 取消定义

select empno,ename,&c3 from emp order by &c3;
&表示只接受用户 键盘输入,所以需要输入多次
select empno,ename,&&c3 from emp order by &c3;
&&表示接受用户接受用户键盘输入并define

2、sqlplus配置
1—查看配置----show
show all—查看所有的配置
show linesize—查看行大小
show pagesize—查看页大小
2—设置----set

3、函数:
eg、lower()、avg()
inicap()—首字母大写
concat()—合并字符串(参数有2个)
substr()—取子串(important)

col ename for a20
select lpad(’ ',(n-1)*2)||ename ename from emp;
start with empno = 7839
connect by prior empno = mgr;

col ename for a20
select lpad(’ ',(level-1)*2)||ename ename, level from emp
start with empno = 7839
connect by prior empno = mgr;

sysdate
current_date
nls参数
1—nls_date_format
alter session 只在本对话框内生效
alter session set nls_date_format=‘yyyy-mm-dd hh:mi:ss’;
alter session set nls_date_format=‘yyyy-mm-dd hh:mi:ss am’;

用两位数表示年份时
1—YY格式:和系统日期处于同一个世纪
2—RR格式(默认):距离系统日期近的世纪

处理null值的函数
1----NVL(e1,e2)
select empno,ename,sal,nvl(comm,0) from emp;
select empno,ename,nvl(toChar(mgr),‘Boss’) from emp;
2----NVL2(e1,e2,e3)
select empno,ename,sal,comm,nvl2(comm,sal+comm,sal) as incomefrom emp;
if comm = null, income = sal+comm else income = sal;
3----NULLIF(e1,e2)
4----COALESCE(e1,e2,………en)
找到第一个非空值为止

条件表达式
处理if—then—else逻辑
1----CASE语句
2----DECODE语句

练习:
hr.employees出现
TOTAL 2001 2002 2003
107 1 7 6

select count(*) total,sum(decode(to_char(hire_date,‘yyyy’),2001,1,0)) “2001”,
sum(decode(to_char(hire_date,‘yyyy’),2002,1,0)) “2002”,
sum(decode(to_char(hire_date,‘yyyy’),2003,1,0)) “2003”
from employees;
where: 记录筛选
having:分组筛选

create table st(name varchar(20),subject varchar(20),score int);
利用sqlldr(在命令行下)工具来加载
准备好了控制文件st.ctl
sqlldr hr/hr control = d:\st.ctl

load
infile ‘d:\st.csv’
into table hr.st
fields terminated by ‘,’
(name char,
subject char,
score interger external)

NAME CHINESE MATHS ENGLISH
zhangsan 88 100 96
lisi 92 98 94

行转列
select name,sum(decode(subject,‘chinese’,score,0)) “chinese”,sum(decode(subject,‘maths’,score,0)) “maths”,sum(decode(subject,‘english’,score,0)) “english” from stu group by name;

desc表名;输出表的信息

访问多张表中的数据
a. 连接
i. 内部连接
from t1,t2
后面的表示基准表(驱动表),应该把小表放在后面
ii. 外部连接(左、右、全)
iii. 多表连接
iv. 自连接
v. 交叉连接
select b.buyer_name,s.qty from buyers b sales s;
select b.buyer_name,s.qty from buyers b cross join sales s;
b. 子查询

有关连接的练习
1
职工姓名 汇报经理
解:
select e.first_name||’ ‘||e.last_name as name,
m.first_name||’ '||m.last_name as manager
from employees e, employees m
where e.manager_id = m.employee_id;

外连接
select e.first_name||’ ‘||e.last_name as name,
m.first_name||’ '||m.last_name as manager
from employees e, employees m
where e.manager_id = m.employee_id(+);

2
last_name,salary,department_id,salavg
条件:工资高于其他部门的平均工资
解:
select a.last_name, a.salary, a.department_id, b.salvag
from employees a,
(select department_id,avg(salary) salavg from employees
group by department_id) b
where a.department_id = b.department_id and a.salary > b.salavg;

create table t(id int);
PL/SQL

块类型
1 匿名块
declare(声明部分)
begin(可执行部分开始)
exception(异常处理部分)
end(可执行部分结束)
e.g.1
begin
for i in 1…10 loop
insert into t values(i);
end loop;
end;
/
(;表示语句的结束
当整个程序结束必须加上 / 告诉系统)

2 命名块
e.g.3
create procedure p2
as
begin
for i in 1…10 loop
insert into t values(i);
end loop;
end;
/

e.g.2(查看进程)
desc user_procedures
select object_name,object_type from users_procedures
where object_type = ‘PROCEDURE’;

desc user_source
select text from user_source where name = ‘P2’;

execute p2;(调用p2)
call p2();
truncate t;清空
练习:1、将表t分成两列
Answer1:
select a.id,b.id from t a, t b where a.id + 5 = b.id
1、将表t分成两列(奇数行)
往t插入一条元素
insert into t values(11);
分两列
select a.id,b.id from t a, t b
where a.id = b.id(+) - round((select count() from t)/2)
and a.id <= round((select count(
) from t)/2);
(round 四舍五入)

块结构
1 声明部分(可以没有,可选)
2 可执行部分(必须要有)
3 异常处理部分(可以没有,可选)

循环
1 无条件循环
2 条件循环
3 固定次数循环

子查询
1 嵌套子查询
select empno,ename,sal from emp where sal > (select sal from emp where ename = ‘SMITH’);
2 关联子查询

多行操作符
in
any
all

hr.employees
last_name
条件:普通群众
89个
1、选择领导
select last_name from employees where employee_id in (select manager_id from employees);
2、选择群众
in
select last_name from employees where employee_id not in (select nvl
(manager_id,0) from employees);
exists
1、选择领导
select last_name from employees e where exists (select ‘X’ from employees where e.employee_id = manager_id);
2、选择群众
select last_name from employees e where not exists (select ‘X’ from employees where e.employee_id = manager_id);

last_name,salary,department_id
条件:高于其部门平均工资
select last_name,salary,department_id from employees e where salary > (select avg(salary) from employees where e.department_id = department_id);

处理多个结果集
1 union
2 union all
3 intersect
4 minus

create table emp_hz as select empno,ename,sal from emp where deptno = 30;
create table emp_gz as select * from emp_hz where 1 = 2;
insert into emp_gz values(1234,‘Tom’,2500);
insert into emp_gz values(7900,‘JAMES’,4500);

合并emp_gz和emp_hz
merge into emp_hz h
using emp_gz g
on (h.empno = g.empno)
when matched then
update set
h.ename = g.ename,
h.sal = g.sal
when not matched then
insert values
(g.empno,g.ename,g.sal);
命令行输入:
merge into emp_hz h using emp_gz g on (h.empno = g.empno) when matched then update set h.ename = g.ename, h.sal = g.sal when not matched then insert values (g.empno,g.ename,g.sal);

默认(default)的默认是空(null)

回滚段的三个作用
1 读一致性
2 回滚
3 闪回恢复
rollback(commit后回滚不回来了)
commit后如下语句可恢复
insert into t1 select * from t1 as of timestamp(systimestamp- interval ‘5’ minute);
锁—保证数据库中事务的可串行化操作

v l o c k s e l e c t s i d , b l o c k f r o m v lock select sid, block from v lockselectsid,blockfromvlock where block = 1;
384

vKaTeX parse error: Expected 'EOF', got '#' at position 26: …lect sid,serial#̲,username from …session where sid = 384;
384 6440

alter system kill session ‘384,6440’;

DDL(create,alter,drop,truncate,rename,comment)

oracle常用对象
1—表 2—视图 3—序列 4—索引 5—同义词

表名只能以字母开头,只能包括A-Z,a-z,0-9,_,$,#

在sys中分配创建视图的权限给scott:grant create view to scott
创建表:create table 表名(属性名 类型) tablespace 表空间名;
e.g create table emp(id int,name varchar(20)) tablespace st;

用户建表不能与同一个用户下相同名称空间的的对象同名
user_objects
col object_name for a20
col object_type for a15
select object_name,object_type,namespace from user_objects;

oracle创建表的时候不分配空间,在对表进行操作时才分配空间
alter user u1 quota 5m on users;
(这种修改权限的操作必须在system完成。自己是没有权限修改权限的)

在sys中赋予u1为其他任何用户创建表的权限
grant create any table to u1;
在sys中赋予u1在scott用户中表emp中select的权限
grant select scott.emp to u1;

pseudocolumn(伪列)

rowid 物理地址
一种编码 Base 64 code 包含三个部分
1 文件号 2 块号 3 行号

专门处理rowid的包 :dbms_rowid
select empno,dbms_rowid.ROWID_RELATIVE_FNO(rowid) File#,
dbms_rowid.ROWID_BLOCK_NUMBER(rowid) Block#,
dbms_rowid.ROWID_ROW_NUMBER(rowid) Row#
from emp;

char 定长字符型 varchar 变长字符型

nchar&nvarchar

字符集—编码方案
char,varchar来自数据库字符集
nchar,nvarchar来自国家字符集

修改表
1 修改表名:rename buyers to customers;
2 增加字段:alter table c add birthdate data;
3 修改字段
1) 改名:alter table c rename column birthdate to birth_date;
2) 修改类型:alter table c modify birth_date char(8); 要更改数据类型,则要修改的列必须为空
3)修改宽度:alter table c modify buyer_name varchar(30);
4 删除字段
1)直接删除列:alter table c drop column birth_date;
2)首先把要删除的列标记为未使用,然后再删除标记为未使用的列
alter table c set unused column birth_date;
alter table c drop unused column;

col table_name for a20
select * from user_unused_col_tables;

5 截断表:truncate table c;
6 修改表为只读:alter table c read only;
7 修改表为读写
alter table c read write;
col read_only for a20
select table_name,read_only from user_tables;
8 删除表
drop table c;
drop table c purge;
9 给表加注释
comment on table product is ‘This is a test table!’;
select comments from user_tab_comments where table_name = ‘PRODUCT’;

数字字典 desc
comment on column product.prod_id is ‘水果编号’;
select comments from user_col_comments
where table_name = ‘PRODUCT’
and column_name = ‘PROD’;

  1. QL(select)
  2. DML(insert,update,delete,merge)
  3. DDL(create,alter,drop,truncate(清空),rename,comment)
  4. DCL(grant(赋予权限),revoke(收回权限))
  5. TCL(commit,rollback,savepoint(保存标记))

数据完整性(三种方式实现)
1 代码
2 触发器
3 约束
数据+规则------> 保证数据是有效的,合理的
约束类型
1 not null2 unique3 primary key4 foreign key5 check
表级别约束—列级别约束—约束信息—user_constraints
col constraint_name for a20
col constraint_type for a16
select constraint_name,constraint_type,table_name from user_constraints
where table_name = ‘EMP’;

select column_name from user_cons_columns
where constraint_name = ‘PK_EMP’;

定义约束的书写顺序
1 表级别的约束
关键字,约束名称,约束名称,字段名
1. create table test(id int,name varchar(20));
2. insert into test values(1,‘aaa’);
3. insert into test values(3,‘bbb’);
4. alter table test add constraint uni_name unique(name);
5. insert into test values(2,‘aaa’);------error
6. alter table test disable constraint uni_name;
7. insert into test values(2,‘aaa’);(COMMIT)
8. desc exceptions
9. @?/rdbms/admin/utlexcpt.sql
ALTER TABLE test
ENABLE CONSTRAINT uni_name
EXCEPTIONS INTO exceptions;
(报错)
视图
虚表----不是存储结构,只是语句的定义
表----存储结构

视图的作用
1—收集感兴趣的数据
2—简化查询
3—屏蔽敏感数据
4—简化权限的管理

视图的分类
1—简单视图
2—复杂视图

创建视图
create view emp_info as select empno,ename,sal from emp;
修改视图(就是修改表)
create or replace view emp_info as select empno,ename,sal from emp;
强制创建或修改视图
create or replace force view emp_info as select empno,ename,sal from emp;
(报编译错误)
create or replace force view emp_info as select empno,ename,sal,deptno from abc
where deptno = 30
with check option;

select rownum, ename from(select rownum as aa,emp,* from emp) where aa >= 10;

删除视图(表仍然存在)
drop view emp_info;

(sql语句部分已经结束)

管理例程
一 、关闭例程(4种模式)
1—正常关闭(normal)(默认)(等待会话结束)shutdown = shutdown normal
2—事务性关闭(transactional)(等待事务结束)
3—立即关闭(immediate)(啥都不等,直接关闭)
4—中止退出(abort)

二、启动(3个阶段)
1—例程启动(nomount)
startuo nomount
条件:需要正确初始化参数文件
只可以访问一部分的动态性能视图(内容来自内存的)
select status from v$instance;

2—加载数据库(mount)
条件:需要访问控制文件
alter database mount;(可以访问所有的动态性能视图)

3—打开数据库(open)
条件:需要访问联机重做日志文件和数据文件
alter database open;
alter database open read only;
alter database open read write;
1)以只读方式打开数据库
select name,open_mode from v d a t a b a s e ; 2 ) 以 受 限 模 式 打 开 数 据 库 s t a r t u p r e s t r i c t ; s e l e c t I N S T A N C E N A M E , L O G I N S f r o m v database; 2)以受限模式打开数据库 startup restrict; select INSTANCE_NAME, LOGINS from v database;2startuprestrictselectINSTANCENAME,LOGINSfromvinstance;

graint RESTRICTED SESSION to scott;(给维护人员scott打开数据库的权限)

alter system disable RESTRICTED SESSION;
alter system enable RESTRICTED SESSION;

配置例程
初始化参数文件
1—文本文件 pfile init.ora ------initdb18c.ora
2—二进制文件 spfile spfile.ora -----spfiledb18c.ora

1—查看初始化参数
show parameter
show parameter shared_pool_size
show parameter share

2—修改初始化参数
alter system set
eg. alter system set shared_pool_size = 128m;
v$parameter
scope=

1—memory
2—spfile
3—both

134217728
134217728
sga_max_size = 5242880000

3—将初始化参数还原成默认值
4—修复错误的初始化参数
5—根据spfile创建pfile
6—根据pfile创建spfile
7—启动时选择初始化参数文件的顺序
1)spfile.ora
2)spfile.ora
3)init.ora
8—利用指定的初始化参数文件启动
startup pfile = d:\a\a.ora

手工创建数据库(demo)
1—创建oracle服务oracleservicedemo
oradim -new -sid demo
2—将当前例程设为demo
set oracle_sid=demo
3—创建/编辑初始化参数文件(initdemo.ora)
create pfile from spfile;
startup pfile=‘D:\app\oracle\product\1830\database\INITDEMO.ORA’;
4—创建相应的目录结构
5—启动例程(demo)
startup nomount
6—执行创建数据库的语句
create database demo
datafile ‘D:\APP\ORACLE\ORADATA\DEMO\SYSTEM01.DBF’ size 400m
sysaux datafile ‘D:\APP\ORACLE\ORADATA\DEMO\SYSAUX01.DBF’ size 400m
undo tablespace UNDOTBS1 datafile ‘D:\APP\ORACLE\ORADATA\DEMO\undotbs01.DBF’ size 50m
default temporary tablespace temp tempfile ‘D:\APP\ORACLE\ORADATA\DEMO\temp01.DBF’ size 20m
logfile
group1(‘D:\APP\ORACLE\ORADATA\DEMO\redo01.log’) size 10m,
group2(‘D:\APP\ORACLE\ORADATA\DEMO\redo02.log’) size 10m,
group3(‘D:\APP\ORACLE\ORADATA\DEMO\redo03.log’) size 10m;

7—创建数据字典视图
SYS@demo>@?/rdbms/admin/catalog
8—创建spfile
create spfile from pfile;
9—创建口令验证文件
C:>orapwd file = D:\app\oracle\product\1830\database\PWDdemo.ora
password=admin1#3
10—创建oracle内部包
SYS@demo>@?/rdbms/admin/catproc
11—创建scott方案
SYS@demo>@?/rdbms/admin/scott
SCOTT@demo>alter user scott identified by tiger;
12—加载产品用户概要文件信息
SYSTEM@demo>@?/sqlplus/admin/PUPBLD.SQL
13—配置监听器和服务名
14—配置em empress
select dbms_xdb.gethttpport from dual;
execute dbms_xdbsethttpport(8888);
select dbms_xdb.gethttpport from dual;

http://LAPTOP-3EBJAP2P:8888/em
控制文件(创建数据库时会自动创建控制文件)
联机重做日志文件(一个数据库至少需要2个日志文件文件)
数据文件(创建数据库时,至少创建3个表空间system,sysaux,undo tablespace)

管理控制文件
1. 查看控制文件的名称和位置
a. Show parameter control_files
b. Select name from vKaTeX parse error: Expected 'EOF', got '\APP' at position 123: … d. Notepad D:\̲A̲P̲P̲:\ORACLE\diag\r…controlfile;
4.
a. D:\APP:\ORACLE\ORADATA\DEMO\CONTROL01.CTL
b. D:\APP:\ORACLE\FAST_RECOVERY_AREA\DEMO\CONTROL02.CTL
c. D:\NIT\CONTROL03.CTL
5. 重建控制文件
a. Alter database backup controlfile to trace as ‘d:\nit\create_controf.sql’;
b. Shutdown immediate
c. 删除所有的控制文件
d. Startup(ora-00205)
e. 执行创建控制文件的语句
f. Alter database open;
6. 记录整个数据库的状态
a. Select status from vKaTeX parse error: Expected 'EOF', got '\app' at position 168: …oup 4 b. (‘D:\̲a̲p̲p̲\oracle\oradata…log)
a. Select group#,sequence#,status from v l o g ; 6. 查 看 日 志 成 员 信 息 ( v log; 6. 查看日志成员信息(v log;6.vlogfile)
a. Select group#,member from vKaTeX parse error: Expected 'EOF', got '\app' at position 65: …file member ‘D:\̲a̲p̲p̲\oracle\oradata…log;
11. 清除日志文件内容
a. Alter database clear logfile group n;
b. Alter database clear logfile ‘’;
12. 修改数据库日志模式
a. 在mount阶段执行
b. Alter database archivelog;
c. Alter database noarchivelog;
13. 设置归档日志目的地并进行归档
a. Alter system archive log current;
b. 默认归档日志存储在闪回区
c. Alter system set log_archive_dest_1=’location=D:\APP\ARCH1’;
d. Alter system set log_archive_dest_2=’location=D:\APP\ARCH2’;

	a. Archive log list;
	b. Alter system from v$archived_log;
14. 查看归档日志文件信息(v$archived_log)
15. 日志文件的移动或重命名
	a. 允许移动(不正在被使用时)
	b. 利用操作系统命令移动或改名
	c. 更新控制文件
	d. 
 
	a. Alter database open
16. 处理日志丢失
	a. 非当前的日志文件丢失
	b. Alter database clear logfile group 4;
	c. 当前的日志文件丢失
	d. Alter database clear logfile group 1;
	e. Recover database until cancel;
	f. Alter database open resetlogs;

管理表空间和数据文件
1—数据库存储的结构层次
数据库
表空间-------------------数据文件
段(存储结构)
区(oracle最小的空间分配单位)
块(oracle最小的IO单位)

查看表空间:select name from v$tablespace;
2—创建users表空间,并设为数据库默认的表空间
create tablespace users datafile‘D:\APP\ORACLE\ORADATA\DEMO\USERS01.DBF’size 30m;

alter tablespace TEST add datafile 'D:\app\oracle\oradata\DB18C\TEST02.DBF’size 10m;(Test增加数据文件)
alter database datafile 'D:\app\oracle\oradata\DB18C\TEST01.DBF’resize 15m;(将TEST)
alter database default tablespace users;

3—创建一个由2k的块组成的表空间smalltbs
create tablespace smalltbs datafile‘D:\APP\ORACLE\ORADATA\DEMO\small01.DBF’size 10m blocksize = 2k;

4—表空间的空间管理(区的管理)
1)本地管理(有关区可用或不可用的信息存储在数据文件中)—默认
2)数据字典管理(有关区可用或不可用的信息存储在数据字典中)
create tablespace userdata datafile‘D:\APP\ORACLE\ORADATA\DEMO\USERDATA01.DBF’size 10m EXTENT MANAGEMENT DICTIONARY;

select tablespace_name,EXTENT_MANAGEMENT from dba_tablespaces;

5—表空间类型
1)永久(常规)表空间
2)撤销表空间(存放回滚空间)
3)临时表空间(用来排序)
select tablespace_name,contents from dba_tablespaces;

创建撤销表空间undotbs2,并设为数据库当前的撤销表空间
show parameter undo_tablespace
create undo tablespace undotbs2 datafile‘D:\APP\ORACLE\ORADATA\DEMO\UNDOTBS02.DBF’size 20m;

alter system set undo_tablespace = undotbs2;

创建临时表空间temp2,并设为数据库默认的临时表空间

create temporary tablespace temp2 datafile‘D:\APP\ORACLE\ORADATA\DEMO\temp02.DBF’size 20m;

alter database default temporary tablespace temp2;

6—表空间状态
1)联机可读写
2)只读
3)脱机
select tablespace_name,status from dba_tablespaces;
alter tablespace smalltbs read only;
alter tablespace smalltbs read write;
不能脱机的表空间
1)system
2)当前的撤销表空间
3)临时表空间

7—删除表空间
drop tablespace smalltbs including contents and datafiles;

8—OMF(oracle管理文件)
初始化参数db_create_file_dest

9—扩展表空间
1)扩展原数据文件大小
a. 自动扩展
b. 手动扩展
2)添加新的数据文件

10—移动或重命名数据文件
alter database move datafile ‘D:\APP\ORACLE\ORADATA\DEMO\USERDATA01.DBF’to
‘d:\app\omf\data01.DBF’;
alter database move datafile ‘D:\APP\ORACLE\ORADATA\DEMO\USERDATA01.DBF’to
‘d:\app\omf\data01.DBF’ keep; 原来的文件还在
1)
alter system set db_4k_cache_size=16m;
create tablespace TEST datafile ‘D:\app\oracle\oradata\DB18C\TEST01.DBF’ size 10m blocksize 4k;
2)
alter tablespace TEST add datafile 'D:\app\oracle\oradata\DB18C\TEST02.DBF’size 10m;
alter database datafile 'D:\app\oracle\oradata\DB18C\TEST01.DBF’resize 15m;
3)
alter database move datafile ‘D:\APP\ORACLE\ORADATA\DB18C\TEST01.DBF’ to ‘D:\APP\data02.DBF’ keep;

之后下课自己写,此处略
oracle安全
安全3A
1—验证
2—授权
3—审核

验证
1—sys
1)操作系统验证
2)口令文件验证
A. sqlplus/as sysdba
B. 检查初始化参数remote_login_passwordfile
a. NONE(禁用口令文件验证)
b. EXCLUSIVE(单例程多用户)(vKaTeX parse error: Expected 'EOF', got '\app' at position 63: … orapwd file=D:\̲a̲p̲p̲\oracle\product…pwfile_users;
I. conn scott/tiger as sysdba;

2—non-sys
1)数据库验证(USER ) c r e a t e u s e r d e m o 1 i d e n t i f i e d b y a d m i n ; 2 ) 操 作 系 统 验 证 A . 检 查 初 始 化 参 数 o s a u t h e n t p r e f i x , 默 认 值 O P S ) create user demo1 identified by admin; 2)操作系统验证 A. 检查初始化参数 os_authent_prefix,默认值OPS createuserdemo1identifiedbyadmin;2A.osauthentprefix,OPS
B. 创建操作系统用户(os1)
C. 创建对应的数据库用户
create user OPS o s 1 i d e n t i f i e d e x t e r n a l l y ; e x t e r n a l l y 表 示 外 部 用 户 验 证 D . 赋 予 用 户 登 录 权 限 g r a n t c r e a t e s e s s i o n t o O P S os1 identified externally; externally 表示外部用户验证 D. 赋予用户登录权限 grant create session to OPS os1identifiedexternally;externallyD.grantcreatesessiontoOPSos1;
E. 修改注册表
F. 以操作系统用户os1登录
runas /user:os1 cmd
G. sqlplus /
授权
1—系统权限
2—对象权限
3—权限传递
1)对象权限是连带的
2)系统权限不连带
4—角色(权限的集合)
1)角色的作用
(1)简化权限管理
(2)动态权限管理(角色处于激活状态时有效)
默认角色在登录时激活
非默认角色用set role命令激活(set role r1;)
带口令激活角色(set role r2 identified by r2;)
2)用户自定义角色
3)预定义角色
4)应用程序角色(不需要指派给用户)
grant execute on scott.setrole to a,b;

问题:
create role r1;
grant create table,select on scott.emp to r1;

SYS:
grant r1 to a;
A:
grant r1 to b;
SYS:
revoke r1 from a;
B:
???
select any table
select on scott.emp

grant create session to a,b;
grant create table to a with admin option;
权力(全局,用户)
权限(局部)
审核
1—默认审核(强制审核)
2—标准数据库审核
1)启动审核(初始化参数)
show parameter audit_trail
2)指定审核选项
(1)审核用户(审核权限)
audit select any table by scott;
(2)对象审核
audit delete on scott.emp;
(3)语句审核
audit create trigger;

审核成功的删除操作:
audit delete on scott.emp whenever successful;审核失败的登录:
audit session whenever not successful;

一个会话中相同的操作只审核一次
audit update on scott.emp by session;
操作一次审核一次
audit update on scott.emp by access;

audit select,insert,update,delete on scott.emp by access;

查询审核记录:
dba_audit_trail

alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;

col username for a20
col action_name for a20
select timestamp,username,action_name from dba_audit_trail;

3—基于值的审核
create table sal_change(ENAME VARCHAR2(10),OLD_SAL NUMBER(7,2),NEW_SAL NUMBER(7,2));
通过触发器来记录员工的工资变化情况

4—细粒度审计(FGA)
execute dbms_fga.add_policy(‘SCOTT’,‘EMP’,‘DEMO_FGA’,STATEMENT_TYPES=>‘SELECT,INSERT,DELETE’);
触发器
一段可以自动调用的代码
1—DML触发器
create or replace trigger scott.tr1
after update on scott.emp
begin
insert into scott.tr_test1 values(‘Be Changed!’);
end;
/
create or replace trigger scott.tr1
after update on scott.emp for each row
begin
insert into scott.tr_test1 values(‘Be Changed!’);
end;
/
create or replace trigger scott.tr1
after update on scott.emp referencing old as o new as n for each row(when n.sal> 5000)
begin
insert into scott.tr_test1 values(‘Be Changed!’);
end;
/

select * from tr_test1;
2—系统触发器
create table scott.logon_rec(username varchar(20),logon_time date);
SYS:
grant administer database trigger to scott;

create or replace trigger scott.tr3
after logon on database
begin
insert into scott.logon_rec values(user,sysdate);
end;
/

select * from scott.logon_rec;

销钉存储过程(scott.p1)
execute dbms_shared_pool.keep(‘SCOTT.P1’);
查询被销钉的存储过程
select owner,name,type from v$db_object_cache where owner<>‘SYS’ and type=‘PROCEDURE’ and kept=‘YES’;
查看当前用户下的存储过程
select object_name,object_type from user_procedures where object_type=‘PROCEDURE’;

导入导出
exp/imp
1—交互模式
2—命令模式
3—获取帮助 exp help=y
4—可以导出的对象
1)数据库 full=y
2)表空间 TABLESPACES=users
3)方案(对象的集合) owner=scott
exp scott/tiger file = tables.dmp1 owner = scott
4)表 TABLES=emp,dept
5—导出表的子集
exp scott/tiger file=sal2500.dmp tables=emp query = ‘where “sal>2500”’ ;
6—利用参数文件导出

import
1—IGNORE=y
2—fromuser,touser
练习:
将scott.emp中工资大于2500的记录导出,不导出约束,然后导入到hr.emp
exp scott/tiger file=sal2500.dmp tables=emp query = ‘where “sal>2500”’ constraints=n;
grant imp_full_database to hr;
imp hr/abc file=sal2500.dmp tables=emp fromuser=scott touser=hr;

数据泵
expdp/impdp
1—获取帮助
expdp help=y
2—创建目录对象
create directory expdir as ‘d:\exp’;
3—赋予相应的权限
grant read,write on directory expdir to scott;

REMAP_TABLE=emp:emp1
REMAP_SCHEMA=scott:hr
REMAP_TABLESPACE=tbs1:tbs2

练习:
利用expdp工具导出scott.emp,不导出约束,然后利用impdp工具导入到hr.emp1,并且更换表空间
expdp scott/tiger directory=expdir dumpfile=empdp.dmp tables=emp exclude=constraint;
impdp hr/abc directory=expdir dumpfile=empdp.dmp REMAP_SCHEMA=scott:hr REMAP_TABLE=emp:emp1 REMAP_TABLESPACE=users:sales;

并行
1—大任务
2—足够多的空闲资源

备份和恢复
1—利用LogMiner(日志挖掘器)查询重做日志文件
(1)启用数据库补充日志
select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
alter database add SUPPLEMENTAL LOG DATA;
(2)创建数据字典文件
create directory dict as ‘d:\dict’;
EXECUTE dbms_logmnr_d.build(‘v816dict.ora’,‘DICT’);
(3)开始一个事务

2—RMAN(恢复管理器)
冷备份(MOUNT)
热备份(OPEN)—归档模式下
1)认识RMAN
操作系统下:
shutdown immediate
startup mount
backup as compressed backupset database;

RMAN下的整库备份和恢复
1—创建测试表
create table scott.hotbak(a varchar(30)) tablespace users;
insert into scott.hotbok values(‘Before Backup’);
2—备份前的准备
备份spfile
备份控制文件
备份数据文件
备份归档日志文件
3—开始备份
4—增加新的记录

为了大家可以复习方便,我特地将笔记的图片(超长的)附在?,供大家下载。?
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值