sys用户是超级用户默认密码是manager,具有sysdba角色
system用户是管理操作员,sysoper角色,默认密码是change_on_install
数据库维护用system用户即可
oracle实例,数据对象(存储过程 表 。。。)
不同用户登录数据库权限不一样,访问权限也不一样
登录listenner和数据库实例
windows下oracle卸载:注册表
oracle管理工具的使用:
1. 自带的pl/sql,主要用于执行sql语句
oracle sql plus 主机字符串是实例的名称
show user;显示当前用户
cmd运行sqlplusw
2. sqlplus dos下操作oracle
3. oracle的企业管理器oracle oraclehome90->enterprise manager console
方案
4. pl/sql developer属于第三方软件,主要用于开发,测试,优化oracle pl/sql的存储过程比如:触发器,此软件oracle不带 需要独立安装。
sql plus常用命令:
连接命令:
conn [etc]
用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]
当用特权用户身份连接时,必须带上as sysdba或是as sysoper
例子:conn system/密码; //输错的话直接退出oracle,未登录任何用户
disc [connect]
说明:用来断开与当前数据库的连接
passwd [password]
说明:该命令用来修改用户的密码,如果要想修改其他用户的密码,需要用sys/system登录
例子:passwd
输入旧密码
输入新密码
确认新密码
文件操作命令:
start和@
说明:运行sql脚本
例子:
sql>@ d:\a.sql 或者sql>start d:\a.sql
edit
说明:该命令可以编辑指定的sql脚本
例子:sql> edit d:\a.sql
spool
说明:该命令可以将sql*plus屏幕上的内容输入到指定的文件中去。
例子:sql> spool d:\b.sql 并输入sql> spool off
交互式命令:
&
说明:可以替代变量,而该变量在执行时,需要用户输入
例子:select * from emp where job='&job';
显示和设置环境变量:
概述:可以用来控制输出的各种格式,set show如果希望永久的保存相关的设置,可以去修改glogin.sql脚本
1. linesize
说明:设置显示行的宽度,默认是80个字符
sql> show linesize;
sql> set linesize 90;
2. pagesize
说明:设置每页显示的行数目,默认是14
用法和linesize一样
oracle用户管理:(oracle下创建用户需要用到create user语句,一般具有dba权限的才能使用)
例子:create user xiaoming identified by m1234;//密码必须以字母开头
conn system/manager;
给用户修改密码:(system)
例子:passwd xiaomin;
删除用户:(一般使用dba/system用户进行删除)
例子:drop user 用户名;
删除用户时注意:如果删除的用户已经创建了表,那么就需要带参数cascade
创建的用户是不存在任何权限的,需要手动去指定权限,管理员登录。
/*************************************
系统权限:
1. 系统权限指用户对数据库的相关权限(create session)
2. 对象权限指用户对其他用户的数据对象(用户创建的表,存储器,触发器,存储过程,函数,包,角色,同义词,视图,视图等等)
角色:事先定义一些角色(权限的批量)
1. 角色分两种一种叫预定义角色
2. 角色第二种叫自定义角色
访问的权限(connect,dba(包括所有的权限),resource(表空间))
例子:
grant connect to xiaoming;
conn xiaoming/m1234;
/******************************************
/**********************************
对象权限:
新创建的用户是空的,什么都没有。
建表:
create table test(userid varchar2(20),username varchar2(30));
conn system/manager;
设置权限:
grant resource to xiaoming;
conn xiaoming/m1234;
create table test(userid varchar2(30),username varchar2(30));
select * from test;
desc test;//查看表结构
对对象权限的控制,将一个用户的表给其他用户
对象权限可以划分为:
1. select
2. insert
3. init
4. all
5. create/delete
6. index ...
例子:希望xiaoming用户可以去查询user2的emp表
grant select on emp to xiaoming;
//sys/system/user2 可以授权
conn user2/m1234;
select * from user2.emp; //要查找的表在user2上
//user2.emp引出方案,简称方案
回收权限:revoke(收回)
conn user2/manager;
例子:
revoke select on emp from xiaoming;
conn xiaoming/m1234;
select * from user2.emp;
权限的传递:
//对权限的维护:
。希望xiaoming用户可以去查询scott的emp表/还希望xiaoming可以把这个权限交给别人
--如果是对象权限,就加入with grant option
grant select on emp to xiaoming with grant option
例子:conn scott/m123;
grant select on emp to xiaoming with grant option;//表明xiaoming可以继续授权这个权限给其他用户
conn system/manager;
creat user xiaohong identified by m123;
grant connect to xiaohong;--xiaohong连接数据库
conn xiaoming/m123;
grant select on scott.emp to xiaohong;
--如果是系统权限。--系统权限授权如下:
system给xiaoming权限connect时:
grant connect to xiaoming with admin option;
--如果scoot把对emp表的select权限回收,那么xiaohong会怎样?
scoot->xiaoming->xiaohong;scoot收回xiaoming权限,xiaohong则不拥有此权限
例子:conn scott/m123;
revoke select on emp from xiaoming;//撤销select权限
conn xiaohong/m123;
select * from scott.emp;//提示表或视图不存在.
oracle用户的管理:
使用profile管理用户口令:
profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default的profile。
当建立用户没有指定profile选项,那oracle就会将default分配给用户。
帐户锁定:
概述:制定该帐户(用户)登陆时最多可以输入密码的次数,也可以指定用户锁定的时间(天)一般用dba的身份去执行该命令
例子:指定tea这个用户最多只能尝试3次登陆,锁定时间为2天,让我们看看怎么实现。
--创建profile文件(一般由dba来操作)
sql>create profile (固定) lock_account (创建规则的名称,可以改变) limit failed_login_attempts (代表锁定多少次) 3 password_lock_time (代表锁定多少天) 2;
sql>alter user tea profile lock_account;
例子:conn system/manager;
create profile aaa1 limit failed_login_attempts 3 password_lock_time 2;
alter user xiaoming profile aaa1;
给帐户(用户)解锁:
sql>alter user (不可以修改) tea (修改的用户名字) account unlock (不可以修改);
sql>alter user xiaoming account unlock;
--已经解锁
终止口令:
为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要dba身份来操作。
例子:sql>create profile myprofile limit password.life_time (多少天) 10 password_grace_time (宽限期) 2;
sql>alter user tea profile myprofile;
口令历史:
概述:如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,这样oracle就会将口令修改的信息存放到数据字典中,这样当用户修改时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。
例子:
1> 建立profile
sql> create profile [password_history] limit password_life_time [10] password_grace_time [2] password_reuse_time [10]
password_reuse_time --指定口令可重用时间即10天后就可以重用
删除profile:
概述:当不需要某个profile文件时,可以删除文件,删除文件之后所有约束即将消失。
sql> drop profile [password_history] [[cascade]]
第二天:
1. 掌握oracle表的管理(创建/维护)
2. 掌握对oracle表的各种查询技巧
3. 学会创建新的oracle数据库
oracle表明与列名的命名规则:
1. 必须已字母打头
2. 长度不能超过30个字符
3. 不能使用oracle的保留字
4. 只能使用如下字符:A-Z,a-z,0-9,$,#等等
oracle支持的数据类型:
字符型:
char 字长 最大2000字符。
varchar(20) 变长 最大4000字符。
clob(character large object) 字符
例子:创建表:
create table users (username char(2000)//最大2000, 为够2000剩余由空格填充
如果有一个字段知道字长多少而且经常被查询则定义为char,效率高(char用定长上来就整个匹配),浪费空间,varchar2节省空间效率低 clob是针对大对象 最大4G
数字型:
number范围-(10的38次方),10的38次方
可以表示整数,也可以表示小数。
number(5,2);
表示一个小数有5位有效数,2位小数
范围-999.99 ---999.99
number(5);
表示一个五位整数
范围:-99999----99999
日期类型:
date 包含年月日和十分秒
timestamp这是oracle9i对date数据类型的扩展(时间戳)
图片类型:
blob 二进制数据 可以存放图片/声音 4G
(需要安全性考虑的可以放到数据库中,普通图片和声音的放到文件夹下,数据库中存放一个路径即可)
建表:
--学生表
sql>create table student (--表明
xh number(4), --学号
xm varchar2(20), --姓名
*** char(2), --性别/一般来讲非男即女
birthday date, --出生日期
sal number(3,2) --奖学金
);
例子:drop table users;
create table student(xh number(4),xm varchar2(20),*** char(2),birthday date,sal number(3,2));
表空间:假设数据库中有一张表,表最终存放在一个文件里,表存在一个磁盘上,表存在数据库中的某一块儿,称之为表空间--存放表的那部分空间
建表:
班级表:
sql>create table classes(
classid number(2),
classname varchar2(40));
修改表:
添加一个字段:
sql>alter table [student] add ([classid] number(2));
sql>desc student;
修改字段的长度:
sql>alter table student modify (xm varchar2(30));
修改字段的类型/或是名字(不能有数据)
sql>alter table student modify (xm char(30));
//表为空表可以按照上述操作,表中存在数据不要进行修改
删除一个字段:
sql>alter table student drop column sal;
//删字段不要轻易使用
修改表的名字:
sql>rename student to stu;
删除表:
sql>drop table student;
添加数据:
所有字段插入:
sql>insert into student values ('A001','张三','男','01-5月-2005',10); //日月年必须带汉字
oracle中默认的日期格式'dd-mon-yy',该日期的默认格式:
alter session set nls_date_format = 'yyyy-mm-dd';
修改后,可以用我们熟悉的格式添加日期类型:
sql>insert into student values ('A002','MIKE','男','1905-05-06',10);
插入部分字段:
insert into student (xh,xm,***) values ('A003','jone','女');
插入空值:
insert into student(xh,xm,***,birthday)
values ('A004','MARTIN','男',null);
块结构示意图:
pl/sql块由三个部分构成:定义部分,执行部分,例外处理部分。
如下所示:
declare
/*定义部分--定义常量,变量,游标,例外,复杂数据类型*/
begin
/*执行部分--要执行的pl/sql语句和sql语句*/
exception
/*例外处理部分--处理运行的各种错误*/
end;
注意:定义部分是可选的
执行部分是必须的
例外部分也是可选的
简单的存储过程:
create or replace procedure sp_proc2 as
begin
delete from mytest where name='tt';
end;
/
简单的块例子:
declare
v_stuname varchar2(20);
v_stu*** char(2);
begin
select stuname,stu*** into v_stuname,v_stu*** from xs where stuid=&学号;
dbms_output.put_line('学生姓名: '||v_stuname||' 学生性别: '||v_stu***);
exception
when no_data_found then
dbms_output.put_line('朋友,你的学号输错了);
end;
declare
v_stuname varchar2(20);
v_stu*** char(2);
v_StuGrade number(3);
begin
select xskc.StuGrade into v_stugrade from xs,xskc where stuname=&name;
dbms_output.put_line('学生成绩: '||v_stugrade);
exception
when no_data_found then
dbms_output.put_line('朋友,你的学号输错了);
end;
存储过程实例:
set serveroutput on
create or replace procedure proc5(spName varchar2,spclaname varchar2,spstugrade out number) as
cursor cur1 is
-- select xskc.StuGrade from xs,kc,xskc where stuname=spName and claname=spclaname;
select * from xs,kc,xskc where stuname=spName;
-- spstugrade := xskc.stugrade;
begin
open cur1;
fetch cur1 into stuname;
dbms_output.put_line('学生姓名 '||spName||' 学生课程名字 '||spclaname||' 学生成绩'||spstugrade);
close cur1;
end;
create or replace procedure sp_proc3(spName varchar2) as
begin
--执行部分,根据用户名去修改工资
select stu*** into spName from xs where stuname=spName;
dbms_output.put_line('学生成绩: '||spName);
end;