当前位置:文档之家› Oracle经典笔记

Oracle经典笔记

Oracle经典笔记
Oracle经典笔记

Oracle数据库常用命令

sqlplus scott/tiger as sysdba:将scott账户当作dba登录进来

alter user scott account unlock; 用户解锁

|-账户解锁

1.conn / as sysdba

2.alter user scott account unlock;

3.alter user scott identified by tiger;

|-数据类型

1. binary_integer:整数,主要用来计数而不是用来表示字段类型

2. number:数字类型

3. char:定长字符串

4. varchar2:变长字符串

5. date:日期

6 long:长字符串,最长2GB

7 boolean:布尔,可取true false null

Number:

NUMBER (precision,scale)

precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。

scale表示数字小数点右边的位数,scale默认设置为0.

P是精度,s是刻度

精度代表所要存的位数,s是指小数点后保留几位

例如存储1234567.89序定义number(9,2)

Char和varchar2 的区别

CHAR的长度是固定的,而VARCHAR2的长度是可以变化的,比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。CHAR的效率比VARCHAR2的效率稍高。

|-数据库的启动

sqlplus / as sysdba

shutdown immediate

sql> startup nomount

sql> alter database mount

sql> alter database open

1.在Dos窗口中: rman target / nocatalog

2.关闭数据库: shutdown immediate

3.启动数据库到第二阶段:startup mount

4.启动数据库到第三阶段:alter database open

|-创建表空间

create tablespace ts1 datafile 'c:\ts1.dbf' size 10M;

|-新建用户并授权

1.新建用户并制定密码create user user1 identified by abc;

2.指定用户所在的表空间alter user user1 default tablespace ts1;

3.授予连接和资源的权限grant connect,resource to user1;

·显示当前用户show user;

·授予最大权限grant connect,dba to user1;

|-备份数据库

|-远程连接数据库

sqlplus sim/sim@ORCLCLCSKY101

sim/sim: 用户名/密码

ORCLCLCSKY101: 配置的监听

|-ORACLE默认表

desc 表名:查看表结构

·desc emp 员工表

·desc dept 部门表

·desc salgrade 薪水等级表

·desc dual 空表,一般用于计算,例如:select 2*3 from dual; Scott账户的默认表

Emp:员工表

EMPNO(员工编号)

ENAME(员工姓名)

JOB(职位)

MGR(经理人编号)

HIREDATE(入职时间)

SAL(薪水)

COMM(津贴)

DEPTNO(部门编号)

Dept:部门表

Salgrade:等级表

Select语句

|-数学表达式

·select ename,sal*12 from emp; 薪水*12,年薪

·select ename,sal*12 year_sal from emp; 起别名

·select ename,sal*12 "year_sal" from emp; 加双引号保持字段的大小写原型·select ename,sal*12+comm from emp; 所有人的年薪,薪水*12+津贴

|-sysdate

·select sysdate from dual; 当前系统时间

|-字符串连接符||

·SQL> select sal||'ksks' from emp; ||字符串连接符,字符串用单引号引起SAL||'KSKS'

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

800ksks

1600ksks

1250ksks

2975ksks

1250ksks

2850ksks

2450ksks

3000ksks

5000ksks

1500ksks

1100ksks

|-去掉重复信息distinct

·select distinct deptno from emp;去掉deptno字段的重复信息

·select distinct deptno,job from emp;去掉deptno,job组合的重复的信息

|-过滤条件where

·数学运算符:< > <> = not and or in

·select * from emp where deptno=10; deptno(部门)等于10的员工信息

·select ename,deptno from emp where deptno<>10;部门不等于10的员工姓名和部门·select ename,sal from emp where sal>=800 and sal<=1500;薪水大于等于800并且小于等于1500

·select ename,sal from emp where sal>1000 and deptno=10;薪水>10并且部门=10的·select ename,sal from emp where sal>1000 or deptno=10;薪水>10or部门=10的都取出来

|-空值处理NULL

·select ename,sal from emp where comm is null; 奖金为空的员工的姓名和工资

·select ename,sal from emp where comm is not null; 奖金不为空的员工的姓名和工资·select ename,sal from emp where sal in (800,1500,3000);薪水是800、1500、3000的人的的姓名和薪水

·巧妙使用函数nvl()

select ename,sal*12+nvl(comm,0) from emp;

如果comm是空值,则用0代替,如果不是null,则就是comm的值

|-模糊查询Like

·%:通配一个或多个字母、_:通配一个字母、\:转义字符

·select ename from emp where ename like '%A%';姓名中带’A’的人

·select ename from emp where ename like '_A%'; 姓名中第二个字母是A的人

·select ename from emp where ename like '%\%%';查询姓名中带%的人,

·select ename from emp where ename like '%$%%' escape '$'; $作为转义字符,查询出姓名中带%的人

|-排序order by asc/desc

·select * from dept order by deptno desc;将部门表按照部门编号降序排列

·select ename,sal from emp order by sal asc;员工表按照薪水升序排列

·select ename,sal from emp where deptno<>10 order by sal asc;

部门不等于10的员工按照薪水升序排列

·select ename,sal,deptno from emp order by deptno asc,sal desc;

先按照部门编号升序排序,在部门编号相同的情况下再按照薪水降序排序

·select ename,sal*12 from emp

where

ename not like '_A%' and sal>100

order by empno desc;

取出来emp的名字、年薪,名字的第二个字母不包含A并且薪水大于100按照员工编号降序排列

|-函数

|-lower(e):转换成小写substr(字段,n,m)将字段从n开始截取,截取到m(包含第m和第n)

|-ascii(a):求a的ascii码chr(97):将ascii转换为字符

|-round(m,s):四舍五入到s位

·select lower(ename) from emp; 将ename转换为小写

·select ename from emp where lower(ename) like '_a%';查询小写的姓名包含a的数据

·select substr(ename,1,3) from emp;将姓名从第一个开始截取,截取到第三个(包含第一个)

·select ascii('a') from dual;求a的ascii码

·select chr(97) from dual; 将ascii转换为字符,本条语句结果为a

·select round(23.567) from dual;四舍五入到个位。结果为24

·select round(23.567,2) from dual; 四舍五入到小数点后两位,结果为23.57

·select round(23.567,-1) from dual;四舍五入到小数点前1位,结果为20

|-to_char(字段a,格式);将字段a转换为想要的格式显示出来

·select to_char(sal,'$99,999.9999') from emp;

·select to_char(sal,'L99,999.9999') from emp;

·select to_char(sal,'L00,000.0000') from emp; L:本地货币

|-to_date 将字符串转换为日期

·select ename,hiredate from emp where hiredate>to_date('1981-2-20 12:34:56',

'YYYY-MM-DD HH-MI-SS');

将1981-2-20 12:34:56转换为日期然后与日期类型的hiredate做比较

|-to_number 将字符串转换为日期

·select ename,sal from emp where sal>to_number('$888.88','$999.99');

将‘$888.88’转换为数字类型然后才能与sal比较

|-组函数max()、min()、avg()、count() 、sum(),把N条数据作为输入,最后产生一个输出

select max(sal) from emp; 求最高工资

select sum(sal) from emp; 求薪水总和

select round(avg(sal),2) from emp; 求平均工资并四舍五入并保留小数点后两位

select to_char(avg(sal),'9999.99') from emp;同上

select count(ename) from emp where deptno=10;部门编号是10的有名字的人有多少select count(distinct deptno) from emp;去除重复的部门编号后显出部门数

|-日期处理

·select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;

·select to_char(sysdate,'YYYY-MM-DD HH:MI:SS') from dual;

·select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; 24表示法

|-分组group by、having

·select avg(sal) from emp group by deptno; 每个部门的平均工资

先按照部门进行分组,然后各组内部再按工资求平均数

·select deptno,max(sal) from emp group by deptno;按部门分组,组内部分别求最大工资

·select avg(sal) from emp group by deptno having avg(sal)>2000;

按照部门进行分组,求各平均工资大于2000的薪水。

·select avg(sal) from emp where sal>1200

group by deptno

having avg(sal)>1500

order by avg(sal) desc;

求薪水大于1200的人的平均薪水,按照部门分组,每个部门平均薪水大于1500,并按照平均薪水倒序排序

·工资高于本部门平均工资的人的姓名和工资

Select avg(sal) from emp group by deptno;

|-子查询:理解子查询的条件:把它当成一张表

·select ename,max(sal) from emp;

求拥有最大工资的人的名字和工资,这句话显然错误,组函数是把N条数据作为输入,最后产生一个输出。很有可能最大工资数‘5000’为多个人共同所有。如果是多个人共同所有,那么就有了N多条记录,这显然和组函数的定义不符,这时就需要我们运用子查询来解决这个问题

·select ename,sal from emp where sal=(select max(sal) from emp);

求拥有最大工资的人的名字和工资

·select ename,sal from emp where sal>(select avg(sal) from emp);

工资高于平均工资的人的姓名和薪水

·select e.ename,e.sal,e.deptno,t.deptno t_deptno,t.avg_sal from emp e join (select deptno,avg(sal) avg_sal from emp group by deptno) t on e.deptno=t.deptno and

e.sal>avg_sal;

工资高于本部门平均工资的人的姓名和薪水

·方法一:> select e.ename,t.ename from emp e join (select empno,ename,mgr from emp) t n e.mgr=t.empno;

方法二:select e.ename,t.ename from emp e,emp t where e.mgr=t.empno;

显示出员工和他的经理人的名字(表的自连接)

·SQL> select e.ename,e.sal,e.deptno from emp e join (select

deptno,max(sal) max_s

al from emp group by deptno) t on e.deptno=t.deptno and

sal=max_sal;

每一个部门里边挣钱最多的哪个人的名字、工资、部门

|-表连接

-1993年的普通连接

-1999年的join on 连接:join 表名on 条件

-十字交叉连接:cross join 表名,结果为笛卡尔乘机

|-等值连接

·select ename,dname from emp,dept where

emp.deptno=dept.deptno;

连接emp,dept,显示出每名员工所属的部门名称1993年原始表连接,将连接条件写在where条件后,这样读起来不方便。

·select ename,dname from emp e join dept d on (d.deptno=e.deptno);

连接emp,dept,显示出每名员工所属的部门名称

1999年join on连接,将连接条件写在on后,这样读起方便。

|-非等值连接

·SQL> select ename,sal,grade,losal,hisal from emp e join salgrade s on (e.sal>s.l

osal and e.sal

连接emp,salgrade,显示出每名员工的薪水等级。当每名员工的薪水大于等级表的最低薪水并且小于薪水表的最高薪水时,则进行连接

·select ename,dname,sal,grade from emp e

join dept d on e.deptno=d.deptno

join salgrade s on (e.sal between s.losal and s.hisal)

where ename not like '_A%';

连接3张表,emp、dept、salgrade,显示出每个员工的姓名、所属部门、工资、工资级别,并且员工姓名的第二个字母不是‘A‘。

·select e1.ename,e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno);

用join on自连接,求出每位员工和其经理人

这时我们发现,左边少了一个人,那就是king,怎么把他也显示出来呢??这时,我们需要用左外连接left join…on…

左外连接的意思就是会把左边这张表(也就是e1)的多余的数据(也就是不能和另外一张表产生连接的数据)显示出来

同理,有左外,也就有右外right join…on…,还有全外连接full join…on…

·select e1.ename,e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);

|-ROWNUM(前几条记录)

|-rownum只能用小于或小于等于来取值

·select ename from emp where rownum<=5;emp表前5条记录的的人的名字

·select rownum r,ename from emp; 给ROWNUM其别名并显示

·select ename from (select rownum r,ename from emp) where r>=10 and r<=12;

取emp第10到第12三条记录,只能用子查询,将select rownum r,ename from emp当成一张表

·SQL> select ename,sal from (select rownum r,ename,sal from emp order by sal desc) where rownum<=5;

取得emp表中工资最高的前五个人。

|-一些sql练习

·select ename from emp where empno in (select mgr from emp);

求哪些人是经理人,经理人就是雇员编号出现在mgr里边的人

·SQL> select sal from emp where sal not in (select distinct e2.sal from emp e1 jo

in emp e2 on e1.sal>e2.sal);

不用组函数,求薪水的最大值

·select deptno,avg_sal from

(select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal=

(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno));

平均薪水最高的部门的部门编号

1.先求出各部门平均工资select avg(sal) avg_sal,deptno from emp group by deptno

2.求各部门的平均工资最高工资是多少

select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno)

3.将各部门平均工资看作一张表,把各部门的平均工资最高工资当作一个值,

·select dname from dept where deptno=

(select deptno from

(select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal=

(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno)));

求平均薪水最高的部门的部门名称

将上一题目去掉字段avg_sal,当成一个值

--面试题:比较效率

1.select * from emp where deptno = 10 and ename like '%A%';

2.select * from emp where ename like '%A%' and deptno = 10;

哪个效率更高?

理论上来说语句1效率更高,因为deptno=10会将部门编号不为10的数据过滤掉,然后再进行模糊查询,有点短路与的意思。而2语句先执行模糊查询在过滤,效率略低。

实际上来说Oracle可能在内部对sql语句进行优化,很可能后台再执行语句2之后自动将“deptno=10”调到前边去。

Insert、delete、update(增删改)

|-Insert(插入语句)

·insert into dept values ('50','game','beijing');插入一条记录在dept表

rollback;插入后回滚

·insert into dept (deptno,dname) values (50,'lal');插入特定字段deptno,dname字段在dept

·insert into dept2 select * from dept; 复制detp的字段并插入到到dept2

|-update(更新语句)

·update emp2 set sal=sal*2,ename=ename||'--' where deptno=10;

10部门员工薪水提升一倍,姓名后加‘--’

|-delete(删除语句)

·delete from emp2 where deptno=10;

删除10部门员工

事务(Transaction)

|-一个Transaction起源于第一条DML语句(update、insert、delete)

结束于rollback或commit,

·当执行ddl语句(create table)时Transaction自动提交

·当执行dcl语句(grant)时Transaction自动提交

·当数据库正常断开的时候,Transaction自动提交

·当数据库非正常断开(例如停电)的时候,Transaction自动回滚。

|-例子:

一个Transaction起源于第一条DML语句,例子中也就是开始于delete,如果在结尾执行rollback,那么事物全部回滚

表(table)

|-创建表和约束

|-约束类型

·主键约束:主键唯一标识整条记录的叫主键,被列为主键的字段,他的值应该可以标识整条记录,相当于非空唯一约束的组合。

·外键约束:

·唯一约束

·check约束

·非空约束

·字段级约束,将约束写在字段后边

create table stu

(

id number,

name varchar2(20) not null primary key, //不为空,主键约束

sex number(1),

age number(3),

sdate date,

grade number(2) default 1, //默认值为1

class number(4),

email varchar2(50) unique //唯一约束,不能插入重复值,空值除外

)

·表级约束,字段级约束但有一些限制,例如:让class和email的组合不能重复。这就需要表级约束

create table stu

(

id number,

name varchar2(20) not null,

sex number(1),

age number(3),

sdate date,

grade number(2) default 1,

class number(4),

email varchar2(50),

constraint stu_id_key primary key(id),

constraint stu_class_email_uni unique(email,class)

)

|-外键约束

·外键关系是建立在两个字段上,其中一个字段会参考另外一个字段的值,如果另外一个没有这个值则不能设置到当前字段中。

·stu.class是参考字段,class.id是被参考字段,被参考字段必须是主键

学生表:

create table stu

(

id number,

name varchar2(20) not null,

sex number(1),

age number(3),

sdate date,

grade number(2) default 1,

class number(4) references class(id), //参考表class的id字段,只能插入class表中有的email varchar2(50),

constraint stu_id_key primary key(id),

constraint stu_class_email_uni unique(email,class)

)

班级表:

create table class

(

id number(4) primary key,

name varchar2(20) not null

)

也可以写成表级约束的形式

Constraint stu_class_fk foreign key(class)

|-修改表结构

|-数据字典表

当前用户有那些表?当前用户有那些视图?当前用户有那些约束?像这样的数据oracle把它们装在了单独的一张表中,这样的表叫做数据字典表

再oracle中,数据字典表都存放再令一张数据字典表上边,相当于数据字典表的表,这个表dictionary

·查看都有那些数据字典表

select table_name from dictionary;

·当前用户有那些表

select table_name from user_tables;

·当前用户有那些视图

select view_name from user_views;

·当前用户有那些约束

select constraint_name from user_constraints;

·约束都加那些表上边

select constraint_name table_name from user_constraints;

·当前用户有那些索引

select index_name from user_indexes;

|-面试题:

题目:

答案:

https://www.doczj.com/doc/0b11101345.html,pany的主键是id;enployeehired的主键是id和fiscalquarter的组合

2.两张表外键关系,employeehired的id参考company的id

3.select companyname from company join employeehired on employeehired.id=

companyname.id where fiscalquarter=’4’;

4.select companyname from company where id not in

(

select distinct id from employeehired where fiscalquarter in (1, 2, 3, 4)

);

5.select companyname,sum_num from company join

(

select sum(numhired) sum_num, id from employeehired group by id ) t

on (t.id = company.id

);

数据库三范式

数据库设计的三范式

范式就是数据库设计的规则,而这些规则是姓范的兄弟给制定的。设计数据库时应该遵循的规则。

设计数据库相当的复杂,三范式虽然很有用,但想用三条规则来统计数据库设计显然是不现实的,所以三范式虽然很有用,该打破三范式就要打破三范式。你要指望有一条规律把全天下的归责全部总结,那这门科学就完蛋了。你追求永动机,追求银弹,可以解决所有问题的一种东西,那就没意思了,不能向前发展了。

第一范式的第一要求:

要有主键,所有的表都要有自己的主键。

第二要求:列不可分

每个字段只存放一个信息,例如:

Create table stu

(

Id number,

Name varchar(20),

Age number

)

/

Insert into stu values(‘1’,’yu’,21)

Create stu2

(

Inf varchar2(100)

)

/

Insert into stu2 values (‘1_yu_21’);

虽然stu2表达的效果和stu1一样,但是很显然stu1的的方法更好查询数据更方便。

但有时也需要打破这个规则,例如存储汽车地盘生产序号:车号,生产时间,规格等等

第二范式

不能存在部分依赖

第二范式讲的是多张表时应该遵循的东西

例如:

学生表:

学号学生姓名教师编号教师姓名

0001 张三01 张老师

0001 张三02 李老师

0002 李四02 李老师

学号和教师编号作为组合主键

当一张表中有多个字段作为主键,非主键的字段不能够依赖于部分主键,及老师姓名依赖于老师编号,学生姓名依赖于学生编号,不满足第二范式

不能存在部分依赖

学生姓名依赖于学号,学号是主键的一部分。

这种情况

第一张表:学生表

第二张表:老师表

第三张表:学生和老师的关系表

下边这种设计比上边的设计冗余设计少很多。

第三范式

不能存在传递依赖

如果有一张表有以下字段(学号,姓名,班级号,班级名称、班级位置),其中学号为主键,则班级号依赖于学号,每个学生应该有相应的班级号,但是班级名称,班级位置是依赖于班级号,即通过班级号传递于学号,不满足第三范式

数据库对象

|-索引(index)

·某个字段加主键约束或加唯一约束时,oracl会自动建立对应字段的索引

好处:创建索引会增加搜索效率,读的效率

坏处:但降低插入修改效率,写的效率

·创建索引

create index idx_stu_email on stu(email);

·删除索引

drop index idx_stu_email

|-视图(view)

·视图就相当于一个子查询,可以帮助我们简化查询

·Oracle中视图的名字以v$开头

·修改表会同时联动视图,创建视图会增加维护成本

·视图可以更新数据,但我们很少这么用

·创建视图create view v$_emp as select ename,sal from emp;

|-序列(sequence)

·产生一个唯一的序列序列是一个对象,可以使用序列的nextval属性查看下一个值·创建序列

create sequence seq;

·查看下一个值

select seq.nextval from dual;

·比如有一张表yg,字段为ID和NAME,向表中插入数据,使用序列自动生成ID insert into stu (id,name) values (seq.nextval,'dfd');

·删除序列drop sequence seq;

|-游标

PLSQL

Pl语言是为了补充sql语言的

--常用的变量类型

1. binary_integer:整数,主要用来计数而不是用来表示字段类型

2. number:数字类型

3. char:定长字符串

4. varchar2:变长字符串

5. date:日期

6 long:长字符串,最长2GB

7 boolean:布尔,可取true false null

set serveroutput on 开启在orace sqlplus中的输出功能

/例一/-- 输出HelloWorld

set serveroutput on

begin

dbms_output.put_line('HelloWorld');

end;

/

//默认为关闭,要想再oraclez中输出,需开启

//dbms_output.put_line相当于System.out.println

/例二/-- 定义变量输出mingge

declare v_name varc har2(20);

begin

v_name := 'mingge';

dbms_output.put_line(v_name);

end;

/

//‘:=’为赋值的意思,相当于‘=’

//变量名必须以v_开头

/例三/-- 语句块组成

declare v_num number := 0;

begin

v_num := 2/v_num;

dbms_output.put_line(v_num);

exception

when others then

dbms_output.put_line('error');

end;

/

//exception when other then代表当有其他异常情况出现时,应该执行什么..再本程序中,2/0会出异常,报错,exception捕获了异常,然后打印error;

/例四/-- 变量赋值

declare

v_temp number(1);

v_conut binary_integer := 0;

v_sal number(7,2) := 4000.00;

v_pi constant number(3,2) := 3.14;

v_valid boolean := false;

v_name varchar2(30) not null := 'MyName';

begin

dbms_output.put_line('v_temp value:' || v_temp);

end;

/

v_temp value:

PL/SQL 过程已成功完成。

//constant 相当于java中的final,常量

//not null:不为空

/例五/-- 关键字%type

declare

v_empno number(4);

v_empno2 emp.empno%type;

v_empno3 v_empno2%type;

begin

dbms_output.put_line('Test');

end;

/

注:v_empno2 emp.empno%type:表示变量v_empno2的类型参考emp表empno字段的类型

v_empno3 v_empno2%type:表示变量v_empno3的类型参考v_empno2字段的类型/例六/-- record变量类型

declare

type type_record_dept is record

(

deptno dept.deptno%type,

dname dept.dname%type,

loc dept.loc%type

);

v_temp type_record_dept;

begin

v_temp.deptno := 50;

v_temp.dname := 'aaaa';

v_temp.loc := 'bj';

dbms_output.put_line(v_temp.deptno || ' ' || v_temp.dname);

end;

(Oracle数据库管理)玩转实战教程学习笔记最全版

(O管理)玩转实战教程(韩顺平)学习笔记

韩顺平—玩转oracle视频教程笔记 一:Oracle认证,与其它数据库比较,安装 oracle的卸载 1.停止所有与ORACLE相关的服务。 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件。 “开始”->“程序”->“Oracle-OraDb110g_home1|Oracle installation product|Universal installer. 3.删除注册表内容。运行regedit命令,删除下面内容:HKEY_LOCAL_MACHINE|SOFTWARE|ORACLE注册表键,删除此键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services,删除Services键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services|Eventlog|Application,删除此键下所有以oracle为首的键。 HKEY_CLASSES_ROOT,删除此键下所有以Ora,Oracle,Orcl,EnumOra 为前缀的键。 HKEY_CURRENT_USER|Software| Microsoft|Windows|CurrentVersion|Explorer|MenuOrder|Start Menu|Programs,删除此键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SOFTWARE|ODBC|ODBCINST.INI注册表键,删除了

oracle笔记(3)

1.用insert语句进行行数据的迁移 Insert into 表名(列,列) select 列,列from emp where 条件 2.用update更新数据(使用子查询):希望员工scott的岗位,工资,补助与smith员工一样? update emp set (job,sal,comm)=(select job,sal,comm. From emp where ename=?SMITH?) where ename=?SCOTT?; 3.事务 (1)锁 (2)提交事务 (3)回退事务(一开始就做保存点(savepoint)) (4)事务的几个重要操作 1)设置保存点:savepoint a 2)取消部分事务:rollback to a 3)取消全部事务:rollback (5)只读事务:set transaction read only(当前用户能看到之前的操作,若其他用户进行更 新,该用户之后的操作都不能看到更新) (6)字符函数 (1)lower(char):将字符串转化为小写的格式 (2)upper(char): 将字符串转化为大写的格式 (3)length(char):返回字符串的长度 (4)substr(char,m,n):取字符串的子串,从m开始取,取n个 (5)例:以首字符大写的方式显示所有的员工的姓名: (1)完成首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写:select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并:select upper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1)) from emp; (6)replace(char1,search_string,replace_string) (7)instr(char1,char2,[,n[,m]])—取子串在字符串的位置 (8)例:显示所有员工的姓名,用”我是A”替换所有”A”:select replace(ename,?A?,? 我是A?) from emp; (7)数学函数 (1)round(n,[m]):用于四舍五入 (2)trunc(n,[m]):用于截取数字 (3)mod(m,n):取模 (4)floor(n):返回<=n的最大整数 (5)ceil(n):返回>=n的最小整数 (6)例:显示在一个月为30天的情况所有员工的日薪金,忽略余数:select floor(sal/30),ename from emp; (8)日期函数 (1)sysdate (2)add_months(d,n) (3)last_day(d):返回指定日期所在月份的最后一天 例:返回在八个月前雇佣的员工(已经入职8个月多的员工):select * from emp where sysdate>add_months(hiredate,300); 例:对于每个员工,显示其加入公司的天数:select trunk(sysdate-hiredate) “入职天

ORACLE笔记

1.Oracle 工具:sqlplus Sqlplus / as sysdba Shutdown immediate(关闭数据库) Startup(启动数据库) 注意:数据库开启才可以进行操作 Select username,account_status from dba_users;(查询数据库中所有的用户名称与用户状态) Alter user scott identified by tiger account unlock;(scott用户解锁) Sqlplus scott/tiger(使用SCOTT 密码为tiger登陆ORACLE数据库) Connect scott/tiger (在SQL>中直接使用SCOTT用户连接数据库) Show all;(看所有变量) Set sqlprompt “_user>”(设置sqlplus环境下面的提示符用自身用户显示) 注意:如要变量下次重启生效必须把变量写入 /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql中 Host(回到系统) Help index(查看所有命令) Help+命令(类似于LINUX中的MAN,查看命令的格式与用法) Disconnect(关闭SQLPLUS工具但是不离开数据库) Describe emp(查看EMP表) Define(定义变量,常用与写脚本用) 如:DEFINE _EDITOR =”vi” (CHAR) (定义VI编辑器用于保存最后一条执行的SQL语句) Save /u01/app/oracle/aa.sql (保存SQL语句) Get /u01/app/oracle/aa.sql (调用保存的SQL语句) 2.select(select 查询语句是ORACLE中最常用的语句) DML语句包括(insert 写入,update改变,delect删除,merge两张表同步) 注意:merge常用在ETL(数据仓库)底下 DDL数据定义语句包括(create创建对象,alter修改,drop删除对象,rename改名,truncate 删除整个表) TCL事务处理语句(commit提交立刻生效,rollback回滚,savepoint保存点,savepoint(保存点) DCL权限语句(grant赋予权限,revoke(收回权限) ORACLE的表称之为堆表(keep table) SELECT (1) writing basic SQL select statemanes 1. selecting all columns SCOTT>select * from dept; SCOTT>select dname,deptno,loc from dept; Basic SELECT Statement SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

学习oracle数据库的总结(图文整理)

1、在开发环境中连接到数据库,进行基本的select查询操作; 2、熟悉plsql的使用; 3、熟悉sqlplus相关命令(登录、查询、导入导出等) 登录sqlplus: 第一:使用dos窗口登录sqlplus Sqlplus 用户名/密码@数据库实例名 Sqlplus system/密码@数据库实例名as sysdba 第二:使用oracle自带的一个sqlplus登录,提供界面,显得更简单一些。 显示当前用户名:show user; 创建一个用户:create user 用户名identified by 密码; 给用户赋予登录的权限:grant connect to 用户名;(此时才可以使用这个用户来登录这个数据库。)给其赋予dba的权限。 修改用户的密码:alter user 用户名identified by 新密码; 查询: Select * from t_user; Select id from t_user; Select name from t_user; Select birthday from t_user; Select id,name from t_user; 导入导出: 导出表: (注意,导出表的exp命令不是在sqlplus下使用的,是在dos窗口下使用的命令。) exp userid=test/sa@test tables=(qx) file=d:\e1223.dmp exp userid=test/sa@test tables=(t_user,qx) file=f:\test.dmp 导出方案: Exp userid=test/sa@test owner=test file=f:\test2.dmp 导出数据库: Exp userid=test/sa@test full=y inctype=complete file=f:\all.dmp 导入表: 下面以一个例子来说明: 看下面的图,我的用户名test,密码sa,数据库实例名test,所有的表都在这里 现在我执行导出表JD的操作:exp userid=test/sa@test tables=(jd) file=f:\jd.dmp 在我的f盘下就出现了这么一个.dmp文件

oracle学习笔记

●PLSQL控制台输出语句 SET serveroutput ON; --打开控制台输出服务 dbms_output.put_line('values2='||var_val); --输出语句 ●PLSQL动态变量 var_str := '&input'; ●创建表空间和用户 --创建表空间 CREATE TABLESPACE "BCPBS" LOGGING DATAFILE 'D:\app\E430\oradata\orcl\BCPBS_01.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED, 'D:\app\E430\oradata\orcl\BCPBS_02.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; --建立用户 CREATE USER "BCPBS" PROFILE "DEFAULT" IDENTIFIED BY "bcpbs123" DEFAULT TABLESPACE "BCPBS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; GRANT "CONNECT" TO "BCPBS"; GRANT "DBA" TO "BCPBS"; GRANT "RESOURCE" TO "BCPBS"; ●删除表空间和用户 drop user bcpbs cascade ; drop tablespace BCPBS including contents and datafiles cascade constraints ; ●自定义函数 CREATE OR REPLACE FUNCTION fun_level_value(level_value number) RETURN number IS return_value number:=null; BEGIN CASE level_value WHEN 0 THEN return_value:='0'; WHEN 1 THEN return_value:='1'; WHEN 2 THEN return_value:='2'; WHEN 3 THEN return_value:='3'; WHEN 6 THEN return_value:='8'; ELSE

oracle学习心得体会

oracle学习心得 一、sqlserver的理解 sqlserver服务器就像一栋大楼,大楼里的机房就像服务器的数据库,机房里的电脑如同数据库里的表 1、登录用户可以登录服务器——可以进大楼 2、登录用户成为数据库用户才能进指定的数据库——进入大楼的人给了某个机房的钥匙 才能进入机房 3、登录用户有权限使用表——进入机房的人有电脑的密码才能使用电脑 二、oracle的理解 oracle服务器(全局数据库)就像一个商场,商场的每一家公司是表空间,公司的业务是表 1、数据库由多个表空间组成——商场里有多家公司组成 2、表空间由段组成——公司要有自己的经营业务,可以只有一个业务,就是一个表空 间中只有一个段,可以有多个业务,就是一个表空间有多个段 3、段由区组成——单个业务的细分类别。例如有家公司经营三个业务,卖书,卖家电,

卖衣服,则每个业务就是一个段。而每个业务又有细分,比如卖书的话要进行分类了。计算机区,人文区,小说区等,每一区都要放上书架存放书籍,则书架就是oracle块,存放数据的 三、数据库,表空间,用户(指定默认表空间),表统统由管理员管理 四、在oem中管理数据库的步骤 1、创建 1)存储——表空间——创建表空间(tomspace)(类似于在sql中创建数据库, 通常可以省略,使用默认表空间为users,,临时表空间为temp) 2)首先展开安全性——创建新用户(tom,指定表空间)(类似于在sql中指定 数据库用户) 3)创建表——指定方案(用户)和表空间(列名不要带<>) 4)设置约束 5)输入信息:方案——用户名——表——右击——查看/编辑目录… 2、修改 1)方案——用户名——表 2)修改表结构,添加约束

Oracle学习笔记

Oracle的四个主要用户 1.超级管理员sys/change_on_install 2.普通管理员system/manager 3.普通用户scott/tiger 4.大数据用户sh/sh 简单查询 1.查询表结构 DESC 表名 2.简单查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] (1)查询时也可以使用四则运算,如:SELECT (字段*x)+y FROM 表名 (2)可以使用“||”连接字段与字符串,如: select '工作与工资:' || job || sal 工作工资 from emp 执行结果: 3.限定查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] [WHERE 条件(s)] (1)Where字句后可以增加多个条件,最常见的条件就是最基本关系运算:>、<、>=、<=、!=(<>)、BE TWEEN…AND、LIKE、IN(指定范围)、IS NULL(为空)、AND(且)、OR(或)、NOT(非)。 (2)多个条件可以使用AND与OR连接。 例如:select * from emp where sal>1300 and sal<4000 (3)范围判断BE TWEEN…AND:BETWEEN 最小值 AND 最大值(大于等于最小值,小于等于最大值),BE TWEEN…AND 对数字、日期都可以使用!!! 例如:select * from emp where sal between 1300 and 4000 例如:select * from emp where hiredate between '01-1月-1981' and '31-12月-1981' (4)判断为空IS (NOT) NULL 例如:select * from emp where comm is null 例如:select * from emp where comm is not null 例如:select * from emp where not comm is null (5)指定范围的判断(NOT) IN 例如:select * from emp where empno in(7369,7566,7799)

Oracle数据库期末复习知识点整理

基础知识 表3.2 Oracle数据类型

表3.3 XSB的表结构

操作表 创建表 CREATE TABLE [schema.] table_name ( column_namedatatype [DEFAULT expression] [column_constraint][,…n] [,…n] ) [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace_name] [STORGE storage_clause] [CLUSTER cluster_name(cluster_column,…n)] [ENABLE | DISABLE ] [AS subquery] 【例】使用CRETE TABLE命令为XSCJ数据库建立表XSB,表结构参照表3.3。 打开SQL*Plus工具,以system方案连接数据库,输入以下语句: CREATE TABLE XSB ( XH char(6) NOT NULL PRIMARY KEY, XM char(8) NOT NULL, XB char(2) DEFAULT '1' NOT NULL, CSSJ date NOT NULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar2(200) NULL ); 修改表 ALTER TABLE [schema.] table_name [ ADD(column_namedatatype [DEFAULT expression][column_constraint],…n) ] /*增加新列*/ [ MODIFY([ datatype ] [ DEFAULT expression ] [column_constraint],…n) ] /*修改已有列的属性*/ [ STORAGE storage_clause ] *修改存储特征*/ [ DROP drop_clause ] /*删除列或约束条件*/ 【例】使用ALTER TABLE语句修改XSCJ数据库中的表。

oracle数据库学习笔记心得

select* |字段表名 from 表名 where 布尔表达式【条件】 externalcandidate 职员相关信息 contractrecruiter 猎头公司 查看表里所有字段 describe[描述] contractrecruiter select cname,nperecentagecharge from contractrecruiter 不显示原来名字,显示现在名字【用AS】 select cname as "Recruiter Name",nperecentagecharge as "Hire Fees" from contractrecruiter 不显示原来名字,显示现在名字【可不用AS】 select cname "Recruiter Name",nperecentagecharge "Hire Fees" from contractrecruiter 【双引号是否写】 双引号是为了区分大小写 职位表 position select *from position 缺额运算:[想减] select VDESCRIPTION , nbudgetedstrength, NBUDGETEDSTRENGTH -NCURRENTSTRENGTH , NYEAR from position

select VDESCRIPTION "Potion", nbudgetedstrength "Budgeted Strength" , NBUDGETEDSTRENGTH -NCURRENTSTRENGTH "Vacancies", NYEAR "Year" from position 显示非重复运行 查询来源地的人数 describe externalcandidate 查看职员城市名字 select ccity from externalcandidate 查看职员城市名字【名字不重复,插入一个关键字:distinct】select distinct ccity,cstate from externalcandidate 运算符: 两列 select vfirstname,vlastname from externalcandidate 字段拼接 select vfirstname||vlastname from externalcandidate select vfirstname||' '||vlastname from externalcandidate 学校 describe college 查看所有学校 select *from college 查看只是加利福尼亚的学校 select * from college where cstate='California' 一个条件 select vfirstname,vlastname,dbirthdate,ntestscore from externalcandidate where dbirthdate>='01-1月-70'

Oracle知识点总结

Oracle知识点总结 根据阎赫老师讲义整理Zealjiang 1、Oracle数据库的安装和配置 ⑴Oracle Internet级数据库 SQLServer 中小企业级数据库 Access 桌面级数据库 ⑵Oracle的安装 注意:来源和目标的目录不允许有中文或空格 ⑶Oracle数据库启动时必需开启的后台服务 ①OracleOrahome90TNSListener 使第三方的软件或语言访问 ②OracleServiceETC Oracle的实例 CRUD 增删改查 注意:②中的ETC是你起的实例的名字 ⑷Oracle的开发工具 ①DOS界面的开发平台 -> 运行->sqlplus ②Oracle本身基于DOS的平台 ->运行-> sqlplusw ③Oracle Enterprise Manager Console ④PL/SQL Developer7.1.5 ⑸创建一个表的完整流程 ①创建一个数数库 例子:创建一个数据库 ETC , 物理文件放在F:\ ,初始化1m ,自增长开启 create tablespace etc

datafile 'f:\etc.dbf' size 1m autoextend on; 删除表空间 drop tablespace 数据库名称; ②为该数据库创建一个帐号和密码 语法: create user 用户名称 identified by 密码 default tablespace 数据库名称 注意:1、在Oracle中账号和数据库one2one绑定 2、Oracle的密码不允许为纯数字或空 3、需要在system账号完成动作 修改Oracle的账号密码 语法:alter user 用户 identified by 新密码 ③用grant 权限 to 用户为该帐户授权 语法: grant 权限名称 to 用户; 撤销权限 语法:revoke 权限名称 from 用户名; ④在该帐号下创建表

Oracle笔记

数据库基本概念: 数据库:Database ,DB (数据) 数据库管理系统:(Database Management System,DBMS)oracle ,DB2,Sql_server 等 数据库系统:(Database System ,DBS) 关系型数据库:(Relationship Database ,RDB) SQL语言:(Structured Query Language,结构化查询语言) 数据建模: 要将现实世界中客观存在的事物以数据的形式存储到计算机中并进行处理,就需要对其进行分析,抽象,进而确定数据的结构以及数据间的内在联系,这一过程称为数据建模。 数据模型应满足三个方面的要求: 1,能够比较真实地模拟现实世界 2,容易为人所理解; 3,便于计算机实现。 数据模型三要素: 数据结构---描述事物的静态特性; 数据操作---描述事物的动态特性; 完整性约束----描述事物内部和事物间的约束性关系。 现实世界-------认识抽象-------->概念世界-------转换--------->机器世界 概念数据模型(Conceptual Database Model,CDM) CDM从用户的观点出发对信息进行建模,并不依赖于具体的计算机系统或某个DBMS系统,主要用于数据库的概念设计。 CDM以实体--关系(E-R)模型为基础,将现实世界中的客观对象抽象为实体和关系。 到机器世界中,CDM将被转化为特定DBMS所支持的物理数据模型(Physical Database Model ,PDM)。 CDM相关术语: 实体(Entity):客观存在并且可以相互区分开来的事物。 实体集(Entity Set):同一类实体的集合。 属性(Attribute):描述实体的特性。 关系(Relationship):实体集之间的对应关系(现实世界事物之间的相互关联)。 E-R图三要素: 实体:用矩形框表示

Oracle数据库知识总结

AD1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 4. 将显示的内容输出到指定文件 SQL> SPOOL file_name 在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。 5. 关闭spool输出 SQL> SPOOL OFF 只有关闭spool输出,才会在输出文件中看到输出的内容。 7. COL命令: 主要格式化列的显示形式。 1). 改变缺省的列标题 COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ---------- ---------------------------- --------- 10 ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location --------- ---------------------------- ----------- 10 ACCOUNTING NEW YORK 2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上: Sql>select * from emp Department name Salary ---------- ---------- ---------- 10 aaa 11 SQL> COLUMN ENAME HEADING ’Employee|Name’ Sql>select * from emp Employee Department name Salary ---------- ---------- ---------- 10 aaa 11 note: the col heading turn into two lines from one line. 3). 改变列的显示长度: FOR[MAT] format Sql>select empno,ename,job from emp; EMPNO ENAME JOB ---------- ---------- --------- 7369 SMITH CLERK

oracle常用笔记总结

1、用dba权限的用户查看数据库都有哪些锁 select https://www.doczj.com/doc/0b11101345.html,ername,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time; 2、查看有哪些对象被锁了 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id 3、根据sid查找进程id select pro.spid from v$session ses, v$process pro where ses.sid=129 and ses.paddr=pro.addr; select ses.sid from v$session ses, v$process pro where pro.spid=129 and ses.paddr=pro.addr; 4:根据这个spid对应linux下的进程pid linux命令: ps -ef | gre | 'ora' (找到所有ora开头的进程) kill -9 (pid) 5、解决delete后表的高水位的问题 初步判断应该是之前有大量数据,后来delete了,选成高水位,用shrink 清除高水位: alter table t_mobile_client_tp_prov enable row movement; alter table t_mobile_client_tp_prov shrink space; 重新收集统计信息: begin dbms_stats.gather_table_stats(ownname=>'traffic',tabname=>'T_MOBILE_CLIENT_TP_PR end; 6、ORA-02064 distributed operation not supported

oracle GoldenGate学习笔记

Oracle GoldenGate测试文档1.Oracle GoldenGate介绍 GoldenGate TDM(交易数据管理)软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。GoldenGate TDM 软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下: 如上图所示,GoldenGate TDM的数据复制过程如下: 利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate TDM自定义的中间格式存放在队列文件中。再利用传送进程将队列文件通过TCP/IP传送到目标系统。捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点,记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制; 目标系统接受数据变化并缓存到GoldenGate TDM队列当中,队列为一系列临时存储数据变化的文件,等待投递进程读取数据; GoldenGate TDM投递进程从队列中读取数据变化并创建对应的SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。 由此可见,GoldenGate TDM是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。GoldenGate TDM将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达9:1的压缩率对数据进行压缩,可以大大降低带宽需求。在目标端,GoldenGate TDM可以通

oracle学习总结

--在pl/sql中 --将正式库的零售单A部分数据导到测试库的零售单B中,首先要链接两个数据库 -----创建一个DATABASE LINK /*-- Drop existing database link dropdatabaselink TEST; -- Create database link createdatabaselink TEST connectto NEANDS3 using'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.4)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl)))'; */ --然后将A表中的字段插入到B表中: insertinto m_retail(ID,C_STORE_ID,RETAILBILLTYPE,ISACTIVE,DOCNO,STATUS,BILLDATE,TOT_AMT_ACTUAL,CREATION DATE,REFNO,AD_CLIENT_ID ) selectID,C_STORE_ID,RETAILBILLTYPE,ISACTIVE,DOCNO,STATUS,BILLDATE,TOT_AMT_ACTUAL,CREATIONDAT E,REFNO,AD_CLIENT_ID from neands3.m_retail@test where status='2'and billdate='20140823' neands3:用户名 m_retail:表名 @test:链接的名称(已经创建好的) ---定时任务将M_RETAIL里的内容插入到新建的表M_RETAIL_MEN的存储过程: create or replace procedure P_M_RETAIL_MENDIAN(p_pi_id IN NUMBER) AS begin DELETE FROM M_RETAIL_MEN WHERE BILLDATE =TO_CHAR(BILLDATE ,'YYYYMMDD'); commit; insert into M_RETAIL_MEN(id,C_STORE_ID,BILLDATE,AMT_ACTUAL25) select get_sequences('M_RETAIL_MEN'),c_store_id,to_char(sysdate,'yyyymmdd'),sum(TOT_AMT_ACTUAL) from M_RETAIL t where t.billdate=to_char(sysdate,'yyyymmdd') and t.status='2' group by t.C_STORE_ID,t.BILLDATE; UPDATE AD_PInstance SET STATE = 'M', RESULT = 0, ModifiedDate = SYSDATE, ERRORMSG = NULL WHERE id = p_pi_id;---pl/sql存储过程自带的 end P_M_RETAIL_MENDIAN; get_sequences(部门):id自增 正则表达式: 在oracle里正则表达式有四个函数可用,分别是regexp_like、regexp_substr、regexp_instr

oracle笔记

Oracle笔记 一、了解oracle 二、Oracle的安装 三、启动oracle: (1)、使用oracle中自带的sql*plus工具进入oracle。 (2)、利用sqlplus和sqlplusw打开oracle。 (3)、使用sql/pl developer进入oracle. (4)、使用oracle企业管理器 四、常用sql*plus命令: (1)、连接数据库: conn (ect) 用户名/密码@网络服务名(数据库名) (as sysdba/sysoper); 例如:conn scott/tiger; (2)、退出:exit; (3)、运行sql脚本: start 脚本地址。 例如:start d:\test.sql; (4)、修改sql脚本: edit 脚本地址。 (5)、截取屏幕代码spool,例如:spool d:\demo.txt…………….spool off; (6)、创建用户(以sysoper以上权限创建):create user 用户名identified by 密码; (7)、删除用户(以sysoper以上权限删除):drop user 用户名; (8)、修改用户密码:passw(ord)或alter user 用户名identified by 密码。 (9)、显示当前用户名:show user; (11)、断开数据库连接:disc(onnect); (12)、行距与每页显示次数:set linesize(pagesize) 数目。 (13)、给予权限: grant connect(连接权限)/resource(在system中创建表权限)/dba(最高权限) to 用户名with admin(系统权限下传)/grant(对象权限下传) option ; (14)、收回权限: revoke conn(连接权限)/resource(在system中创建表权限)/dba(最高权限) from 用户名(15)、使用profile文件管理用户: 限定用户登录次数: Create profile 文件名limit failed_login_attempts 3 password_lock_time 2; Alter user 用户名profile 文件名 用户解锁: Alter user 用户名account unlock;

韩顺平.2011最新版.玩转oracle视频教程(笔记)

韩顺平—玩转ora cle视频教程笔记一:Oracle认证,与其它数据库比较,安装

Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉 也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。 二: Oracle的基本使用--基本命令 sql*plus的常用命令 连接命令 1.conn[ect] 用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect] 说明: 该命令用来断开与当前数据库的连接 3.psssw[ord] 说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用 sys/system登录。 4.show user 说明: 显示当前用户名 5.exit 说明: 该命令会断开与数据库的连接,同时会退出sql*plus 文件操作命令 1.start和@ 说明: 运行sql脚本 案例: sql>@ d:\a.sql或是sql>start d:\a.sql 2.edit 说明: 该命令可以编辑指定的sql脚本 案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开 3.spool 说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 案例: sql>spool d:\b.sql 并输入 sql>spool off 交互式命令 1.& 说明:可以替代变量,而该变量在执行时,需要用户输入。 select * from emp where job='&job'; 2.edit 说明:该命令可以编辑指定的sql脚本 案例:SQL>edit d:\a.sql

Oracle复习题总结

绪论: 1、Oracle,甲骨文,1977年开始研发,总部位于美国加州红木滩市,创始人为Larry Ellison(埃里森) 、 Bob Miner、Ed Oates 2、Oracle服务器=实例+数据库;Oracle实例=内存+后台进程; 第四章:表空间的创建与删除 例4.1 建立名称为data_ts1的数据表空间,大小为50M,区间统一为128KB大小。 SQL> conn system/systempwd@orcl SQL> drop tablespace data _ts1 including conntents; SQL> create tablespace data _ts1 2 tempfile ‘ %oracle_home%\database\data_ts1.dbf ’ SIZE 50M REUSE 3 uniform size 128K; 例4.2 建立名称为temp_ts1的临时表空间,使用temp_ts1.dbf文件存放临时数据。 SQL> conn system/systempwd@orcl SQL> drop tablespace temp_ts1 including conntents; SQL> create temporary tablespace temp_ts1 2 tempfile ‘ %oracle_home%\database\temp_ts1.dbf ’ size 20M reuse 3 uniform size 128k; 例4.3创建10号部门经理用户EMP_MGR10,指定该用户的数据表空间为data_ts1,临时表空间为temp_ts1。授权该用户可以查看SCOTT用户下雇员表中的记录。 SQL> conn system/systempwd@orcl SQL> drop user emp_mgr10 cascade; SQL> create user emp_mgr10 identified by emp_mgr10pwd 2 default tablespace data_ts1 temporary tablespace temp_ts1; SQL> grant connect to emp_mgr10; SQL> conn scott/tiger@orcl 4 tempfile ‘ %oracle_home%\database\temp_ts1.dbf ’ size 20M reuse 5 uniform size 128k; 例4.4 创建和应用撤销表空间。 SQL> conn system/systempwd@orcl SQL> drop tablespace undo_ts1 including conntents; SQL> create undo tablespace undo_ts1 2 datafile ‘ %oracle_home%\database\undo_ts1.dbf ’ size 50M reuse; 例4.5 创建大文件表空间,并指定为SCOTT用户的默认数据表空间。 SQL> conn system/systempwd@orcl SQL> drop tablespace bigfile_ts1 including conntents; SQL> create bigfile tablespace bigfile_ts1 2 datafile ‘ %oracle_home%\database\bigfile_ts1.dbf ’ size 50M reuse; SQL> alter user scott default tablespace bigfile_ts1; 需要注意的是,大文件表空间的段空间管理不能为手工(MANUAL),只能为自动(AUTO)。 例4.6调整数据表空间data_ts1的大小。 SQL> conn system/systempwd@orcl --为表空间data_ts1增加一数据文件,大小为1M。 SQL> alter tablespace data_ts1 2 add datafile ‘ %oracle_home%\database\ data _ts2.dbf ’ size 1M; --重置该数据文件大小为2M。 SQL> alter tablespace 2 datafile ‘ %oracle_home%\database\ data _ts2.dbf ’ siz e 2M;

相关主题
文本预览
相关文档 最新文档