Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303610
  • 博文数量: 69
  • 博客积分: 3093
  • 博客等级: 中校
  • 技术积分: 626
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-17 13:48
文章分类

全部博文(69)

文章存档

2011年(27)

2010年(11)

2009年(31)

分类: Oracle

2009-10-29 16:22:36

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;
阅读(1490) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~