- 浏览: 50579 次
- 性别:
- 来自: 合肥
文章分类
最新评论
1.oracle 安装完成后,会默认生成三个用户角色
sys 用户:超级管理员 权限最高 他的角色 dba 密码:chane-on-install (本人的已经改为pass)
system 用户:是系统管理员 权限也很高 她的角色是 dbaoper 密码:manager (本人该为pass)
scott 用户:普通用户 密码:tiger (本人改为woai5jia)
sys 与system
sys 有create database 的权限 而system 没有 其他相似
在日常对oracle管理过程中,使用system 就够了
权限 分为系统权限 和 对象权限;
系统权限:用户对数据库的相关权限
对象权限:用户对其他用户的数据对象操作的权限(比如表,视图,过程。。)
xiaoming 密码:m123;
xiaohong 密码:m1234;
在删除用户时,注意:如果要删除用户,已经创建了表,那么久需要在删除的时候带一个参数 cascade即把该用户及该用户创建的表删除(级联删除)
创建一个用户xiaoming 这个用户是没有任何权限的。比如登录 建表;
这时可以使用system 来赋予它这样的权限
如:grant connect to xiaoming
grant resource to xiaoming
还有比如实现xiaoing 对scott 中表的操作;
这时除了system sys 。scott 可以授权如:
查看emp表 如grant select on emp to xiaoming;
查看/增加/删除/修改 emp表 如grant all on emp to xiaoming;()
scott 收回xiaoming 对emp表的操作;
revoke select on emp from xiaoming:
虽然赋予了xiaomingselect的权限 但是在连接xiaoming 后使用select * from emp;还是查询不到
可以使用select * from scott.emp;这里就涉及到了“方案”的概念;
这里有desc 表名:是查看表结构;
//对权限的维护:如:希望xiaoming 用户可以去查询scott的emp表,还希望
xiaoming 可以把这个权限给别人
----如果是对象权限,就加入with grant option;
grant select on emp to xiaoming with grant option;
?如果scott 把xiaoming的select 权限回收了,那么xiaohong 的权限还在嘛:
答:同时被回收了
使用profile管理用户口令:
profile是口令限制,资源限制的命令集合。数据库建立时;oracle会自动建立名称为default的profile 。当建立用户没有指定profile选项。那么oracle会将defalt分配给用户
(1)账户锁定;
指定该账户登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天),一般用dba 的身份去执行该命令。
如:
sql>create profile lockaaa limit failed_login_attempts 3 password_lock_time 2;
sql>alter user xiaoming profile lockaaa;
(2)给账户解锁
sql>alter user xiaoming account unlock;
(3)终结口令
为了让用户定期的修改密码可以使用终止口令的指令来完成。同样这个命令也需要dba身份来操作
如:给前面的创建的用户xiaoming创建一个profile文件,要求该用户每隔10天
要修改自家登录的密码,宽限期为2天
sql>create profile bbb1 limit password_life_time 10 password_grace_time 2;
sql>alter user xiaoming profile bbb1;
----口令历史
如果希望用户在修改密码时。不能使用以前使用过的密码。可使用口令历史,这样oracle就会将口令修改的信息存放在数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码不一样时。就提示用户重新输入密码、
如:sql>create profile ccc1 limit password_life_time
10 password_grace_time 2 password_reuse_time 10;
//password_reuse_time 指定口令可重用时间即10天后就可以重用
赋给某个用户
删除profile
sql>drop profile ccc[cascade]
-----oracle 表的管理:
1.必须以字母开头
2.数据类型
a.字符型:char 定长 最大2000字符//如果知道该字段经常被
查询并且是知道大概有多长这样使用char更好,效率更快 如:身份证号
b.varchar2() 变长 最大4000字符
c.clob ()最大字符达4G
3.数字型
number 可以表示整数 也可以表示小数
number(m,n)表示一个小数有m位有效数 n位小数
number(m) 表示一个m位整数
4.日期类型
date 包括年月日时分秒
timestamp 是对date类型的扩展
5 图片 视频等
blob 二进制数据 ,一般我们在数据库中只放视频图片的路径。如果需要安全的
考虑则可以考虑把他们放在数据库中
--建表
create table student(
stuId number(5),
stuName varchar2(10),
sal number(7,2)
);
添加字段
sql>alter table student add(classId number(2));
修改字段
sql>alter table student modify (stuId varchar2(10))
删除字段
sql>alter table student drop column sal;
删除表:
sql>drop table student;
注意:一般我们不做修改字段和删除字段的操作
添加数据
insert into student values(1,'小明','男','01-3月-1997',489.4,12);
在oracle中默认的日期格式是:dd-mm-yy ,月份后要加上“月”
如果要修改默认格式:
SQL> alter session set nls_date_format ='yyyy-MM-dd';
SQL> insert into student values(2,'小红','女','1988-7-6',489.4,12);
插入部分字段:insert into student (xh,xm,sex)values('','','');
空字段的增加和查询------
SQL> insert into student (xh,xm,sex,birthday) values(3,'aa','女',null);
select * from student where birthday is null;
修改一个字段
update student set sal = sal/2 where sex ='男'
修改多个字段;
update student set sex='男',birthday='1999-3-3' where xh = '0A';
删除数据:======
delete from student;//删除所有记录,表结构还在,写日志可以恢复数据,速度慢
一般情况下 我们开始会使用savepoint 保存点名 然后出现错误操作可以使用
rollback to 保存点名 来恢复到原来的位置。在不做处理的情况下,保存点就一个,再赋予一个就会覆盖前面的那个;
drop table student; //删除表的结构和数据
truncate table student;删除表中所有记录。表结构还在 不写日志无法找回删除的记录,但速度很快;
--------//clear 清屏命令;
数据库要求查询效率。所以在数据库中我们常常使用
insert into student (字段1,字段2.。。) select * from student
来实现一个数量巨大的表供我们进行测试;
表单查询------
取消重复行:使用distinct关键字
select 语句中对于传入的内容是区分大小写的;
select ename,joB,sAl from emp where ename ='SMITH';
对于null值的处理;-------
SQL> select ename,13*sal+13*comm,comm from emp;//oracle中规定当某个字段中的值为null时,使用该值计算的结果也为null;
为了避免上上面的发生:可以使用nvl()函数
如:SQL> select ename,13*sal+13*nvl(comm,0) "年薪",comm from emp;
即当comm为null时会使用0代替,不为null 使用本身计算
注意在查询日期的时候,不要忘了oracle本身默认时间的格式:
SQL> select ename,hiredate from emp where hiredate >'3-3月-1983';
group by和having 使用;
//group by 用于对查询的结果分组统计
//having 子句用户限制分组显示结果
SQL> select min(sal),avg(sal),max(sal), deptno from emp group by deptno;
MIN(SAL) AVG(SAL) MAX(SAL) DEPTNO
---------- ---------- ---------- ------
1300 2916.66666 5000 10
800 2175 3000 20
950 1566.66666 2850 30
-------------------------------------
SQL> select min(sal),avg(sal),max(sal), deptno from emp group by deptno having avg(sal)>2000;
MIN(SAL) AVG(SAL) MAX(SAL) DEPTNO
---------- ---------- ---------- ------
1300 2916.66666 5000 10
800 2175 3000 20
数据分组总结:
1.分组函数只能出现在选择列表 having order by 子句中。
2.如果在select 语句中同时包含有group by ,having,order by 那么他们的顺序
一定是group by ,having, order by
如:SQL> select min(sal),avg(sal),max(sal), deptno from emp group by deptno having avg(sal)>2000 order by avg(sal);
MIN(SAL) AVG(SAL) MAX(SAL) DEPTNO
---------- ---------- ---------- ------
800 2175 3000 20
1300 2916.66666 5000 10
3.在选择列中如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则会出错;
多表查询:
1.查询匹配的多列子查询
与simth的工作岗位,部门号都相同的所有员工!
select * from emp where(deptno,job)=(select deptno,job from emp where ename='SMITH');
2.查询比自己部门平均工资高的员工信息。
逻辑要很清晰
i.查询出所有部门的平均工资
select deptno,avg(sal) from emp group by deptno;
在这里我们有一个需要特别注意的就是可以把上面得出的结果看做是一张子表
ii。查询得出结果!
select a1.ename,a1.sal,a2.mysal from emp a1,(select deptno,avg(sal) mysal from emp group by deptno) a2 where a1.deptno=a2.deptno and a1.sal>a2.mysal;
3.接下来讲到oracle中的重点:分页技术,一共有三种方式(见图)
i.rownum分页
(select * from emp)
ii.显示rownum 【注意这里的rownum是oracle分配的,并且只能识别一次】
select a1.*,rownum rn from(select * from emp) a1;
比如查询前十行记录:select a1.*,rownum rn from(select * from emp) a1 where rownum<=10;
但是这样写就会查不出来:
select a1.*,rownum rn from(select * from emp) a1 where rownum<=10 and rownum>=6(原因上面说了,oracle规定rownum 只能在一个条件中使用一次)
如果做过项目的知道。在分页中,我们经常使用到:pageNow pageSize pageCount
rowCount
所以在oracle 中我们也向其他查询一样
把10换成【pageNow*pageSize】
把6换成【((pageNow-1)*pageSize+1)】
所以要完成上面的功能还需要第三次子查询;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
----- ---------- --------- ----- ----------- --------- --------- ------ ----------
7369 SMITH CLERK 7902 1980-12-17 800.00 20 1
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 2
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 3
7566 JONES MANAGER 7839 1981-4-2 2975.00 20 4
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 5
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30 6
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10 7
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20 8
7839 KING PRESIDENT 1981-11-17 5000.00 10 9
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30 10
iii.select * from(select a1.*,rownum rn from(select * from emp) a1 where rownum<=10) a1 where rn>=6 ;(注前面前十行查出来了后,rownum字段是rn,所以在第三步中的查询条件要使用rn)
4.几个条件的变化(都是修改最底层的select 子句)
a.需要查询的字段
select * from(select a1.*,rownum rn from(select ename,empno,deptno from emp) a1 where rownum<=10) a1 where rn>=6;
b.排序
select * from(select a1.*,rownum rn from(select ename,empno,sal from emp order by sal) a1 where rownum<=10) a1 where rn>=6;
4.用查询的结果创建一个新表;
create table mytable (id,name,sal) as select empno,ename,sal from emp;
复杂查询:合并查询
有时候,在实际应用中,为了合并多个select语句查询的结果,可以使用集合操作符
union , all union,insersect,minus
a.union 该操作符是用于取得两个操作集的并集,使用该操作符会自动去掉结果集中的重复行;
select ename,sal,job from emp where sal>2500 union
select ename,sal,job from emp where job='MANAGER';
b.union all 和上面的union相似,只是不消除重复行
c.insersect 指的是取得两个结果集的交集
d.minus 指的是两个集合的差集;
下面介绍几个小技巧:
to_date函数:当插入一个日期时,我们知道oracle默认是:dd-mm月-yyyy;
为了方便插入格式匹配,我们可以是该函数;
当然使用默认插入也是可以自动转化成yyyy-MM-dd的格式
但是还在这里说下该函数的使用方法。
insert into emp values(3,'邓言诚','manager',7782,to_date('1988/2/18','yyyy/MM/dd/'),789,77,10);
我试了一下,yyyy年MM月dd日的格式好像不可以!
一次插入多行记录:
a.上面我提到了一种方法感觉很好
create table mytable (id,name,sal) as select empno,ename,sal from emp;
b.下面的这种方法其实和上面的差不多;
create table mytable1(id number(5),name varchar2(10),job varchar2(20));
先创建后在给表赋值
insert into mytable1(id,name,job) select empno,ename,job from emp where deptno=10;
更新多列数据:
其实上面也有讲过类似的方法:
更新表中SMITH的工资,职位,奖金和SCOTT 一样;
update emp set (sal,job,comm)=(select sal,job,comm from emp where ename='SMITH') where ename='SCOTT';
事务处理:
前面也提到过保存点(savepoint),一般我们在进入数据库操作时,都会设置一个保存点。
a.提交事务,当执行使用commit语句可以提交事务。执行commit语句之后,会确认失事务的变化,结束事务,删除保存点,释放锁。当使用commit语句结束事务后,其他会话将可以查看到事务变化后的新数据。当然不手动的提交事务,使用exit会自动提交,所以建议大家养成手动提交事务的习惯。
那么,我写个小程序,使用java来提交事务(自己导入包,打开服务端口)
package com.demon;
import java.sql.*;
public class TestTransaction {
public static void main(String[] args) {
Connection ct=null;
Statement sm =null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
ct =DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","woai5jia");
sm = ct.createStatement();
System.out.println("0...");
//从scott中减去100
//加入事务处理
ct.setAutoCommit(false);
sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
System.out.println("1...");
int i = 4/0;//当然这里只是举个列子,出现异常有很多种
//从smith中加上100
sm.executeUpdate("update emp set sal=sal-100 where ename='SMITH'");
//提交事务
ct.commit();
sm.close();
ct.close();
} catch (Exception e) {
try {
//出现异常等 回滚事务
ct.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
}
}
b.只读事务; set transaction read only;
定义不是很好理解,我就用日常事务来说明一下它的用途:比如春节买火车票,售票管理员每隔一段时间就会查看售票情况。假如是每天18:00 统计售票情况,但是在此时,售票还在一直进行,不可能管理员统计就停止售票,所以这时使用只读事务的意义就显现出来了,但管理员在18:00这个时刻设置了只读事务,而售票人员还在进行售票。这时候,管理员查看的只是18:00之前的售票情况。
下面就以oracle自带的 system 和scott 来演示一下:
比如此时system 进入数据库 设置了只读事务:
然后,scott也进入数据库进行数据的操作
操作完成后,scott可以查看到自己操作后的结果,如:scott插入了几个雇员
而system 查找emp 表时却看不到该表被scott操作后的结果;
(select * from scott.emp 注意system查询时使用该形式,因为它要查询的是scott中的emp 表 这个我有时也容易忽略)
oracle 中sql 函数:
1.字符函数(把emp中的ename 转化成第一个小写剩余字母大写的形式)
select lower(substr(ename,1,1))|| substr(ename,2,length(ename)-1) from emp;
这里我就不多说了,试下就行了,这里的“ || ”是合并两个字符串。
还有很多replace 如:select replace(ename,'A','我是邓言诚') from emp;
2.数学函数
round(n,[m])该函数是四舍五入 m省略则得到整数
trunc(n,[m])截取一个数,省略m 则忽略小数
mod(n,m) 求余;
这里给出一个虚拟表 dual ,用于函数测试;
如:SQL> select mod(10,2) from dual;
MOD(10,2)
----------
0
--------------------------------------------------
floor(m),得到一个比m小的最大整数 如:floor(33.3)--->33
ceil(m),得到一个比m大的最小整数 如:ceil(44.2)--->45
还有其他数学函数 abs(),sin(),cos() power()......
3.日期函数
a.当期日期
SQL> select sysdate from dual;
SYSDATE
-----------
2011-6-19 0
b.addmouths(d,n);指d 加上n个月后的日期
如:得出从受雇距今超过30年的员工信息
select * from emp where sysdate>add_months(hiredate,30*12);
c.在oracle中可以利用时间想减得到天数:但因为小时的关系,可以忽略
select floor(sysdate-hiredate),ename from emp;
d.last_day(d);得到这个日期下,该月的最后一天。
SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-----------------
2011-6-30 0:17:57
如:各月倒数第3天入职的员工信息;
select * from emp where hiredate=last_day(hiredate)-2;
4.转换函数
虽然oracle中有自动转化功能,但有时候有的还是需要进行转化;
这里我说下to_char();该函数功能很广泛,可用于日期也可以用于薪水;
insert into emp values(100,'邓言诚','MANAGER',7566,sysdate,3232,324,10);
然后查询:SQL> select ename,to_char(hiredate,'yyyy-MM-dd HH24:mi:ss') "入职时间",to_char(sal,'L99,999.99') "薪资" from emp where empno=100;
ENAME 入职时间 薪资
---------- ------------------- --------------------
邓言诚 2011-06-19 00:44:01 ¥3,232.00
这里注意下:当使用别名时,使用中文要使用“”括起来,''不行。
就查询语句中的日期格式我就不说了,我来说下薪资的格式
L ---》表示当地的货币类型;
99,999.99---》小数点前表示整数,小数点后表示小数。至于前面的<,> 大家取钱都见过这种格式吧!还有就是数据要根据你创建表示的格式而定,如该emp表:sal number(7,2);
如果要使用国际货币则使用“$”....(把L换成相应的国际货币符号就可以了)
5.系统函数
a.terminal:当前会话客户所对应的终端的标示符
b.language :语言
c.db_name:当前数据库名称
d.nls_date_format;当前会话客户对应的日期格式
e.session_user:会话客户所对应的数据库用户名
f.current_schema:当前会话客户对应的默认方案名?
g.host:返回数据库所在主句名称
select sys_context('userenv','db_name') from dual;这里的userenv是用户所处环境
数据库管理员:
1.管理数据库的用户主要是sys 和system,他们的主要区别是:
(1)最重要的区别:存储的数据的重要性不同。
sys:所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行至关重要。由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba,sysdba,sysoper角色或权限,是oracle权限最高的用户。
system:用于存放次级的内部数据;如oracle的一些特性或工具管理信息。system用户拥有dba,sysdab角色或系统权限。
(2)其次区别:权限不同。
sys用户必须以as sysdba 或as syspoer形式登陆,不能以normal方式登陆数据库
system如果正常登陆。它其实就是一个普通的dba用户,但是如果以as sysdba登陆,其结果实际上它是作为sys用户登录的。(见附图)
2.数据库的逻辑备份(到出)和恢复(导入)【注意在导入和导出要在oracle安装目录的BIN 下进行】
导出表:
a.导出自己的表:(见附图)
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=scott/woai5jia@ORCL tables=(emp) fi
le=d:\emp1.dmp
b.导出其他方案的表:在这个提下方案,一个用户的创建就会生成对应一个和用户名相同的方案;
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=system/pass@ORCL tables=(scott.emp) fi
le=d:\emp2.dmp
c.导出表结构
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=scott/woai5jia@ORCL tables=(emp) fi
le=d:\emp3.dmp rows=n
d.直接导出方式,这种方式导入速度快,当数据量很大的时候可以考虑使用该方式
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=scott/woai5jia@ORCL tables=(emp) fi
le=d:\emp4.dmp direct=y
导出方案:
a.导出自己方案
exp userid=scott/woai5jia@ORCL owner=scott file=d:\emp5.dmp
b.导出其他方案
exp userid=system/pass@ORCL owner=(system,scott) file=d:\emp6.dmp[这里表示用system用户导出自己的方案并导出scott方案]
导出数据库:【要求该用户具有dba权限或是exp_full_datebase权限】
exp userid=scott/woai5jia@ORCL full=y inctype=complete file=d:\emp7.dmp(inctype 表示增量备份)
导入表 和上面的对应
a.导入自己的表
imp userid=scott/woai5jia@ORCL tables=(emp) file=d:\emp.dmp;
b.导入表到其他用户
imp userid=system/pass@ORCL tables=(emp) file=d:\xx.dmp touser=scott;
c.导入表结构,只导入结构不导入数据
imp userid=scott/woai5jia@ORCL tables=(emp) file=d:\emp1.dmp rows=n;
d.导入数据:如果对象(如表)已经存在,则只导入数据
imp userid=scott/woai5jia@ORCL tables=(emp) file=d:\xxx.dmp ignore=y;
导入方案:
a.导入自身方案
imp userid=scott/woai5jia@ORCL file=d:\emp4.dmp;
b.导入其他方案【还是需要拥有dba身份】
imp userid=system/pass@ORCL file=d:\emp4.dmp fromuser=system touser=scott;
导入数据库
imp userid=system/pass full=y file=d:\xxxx.dmp;
--------------------------------------------------------------------------
* 注意以上的导入导出要对应相应的.dmp 我在这里只是把功能列出来,没有具体对应。应为我当时建的时候
没有标记dmp所对应的表
------------------------------------------------------------------------
前面介绍了当创建一个用户就会生成一个与之名称相对应得方案,其中方案中就包含下面的数据字典和动态性能视图。。。。。
数据字典 和动态性能视图
数据字典:在oracle中提供了数据库的一些系统信息,是静态的数据
动态性能视图: 记载了例程启动后的相关信息,是动态数据
数据字典视图:
(1)user_tables;用于显示当前用户所拥有的所有表,它只返回所对应方案的所有表
select table_name from user_tables;
(2)all_tables :用于显示当前用户可以访问的所有表,不仅返回当前用户方案表,还可以返回当前用户可以访问的其他方案表 select table_name from all_tables;
(3) dba_tables 它显示所有方案所有的数据库表,但是查询这种数据库字典
视图。要求用户必须是dba角色或是select any table 系统权限
SQL> conn system/pass;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as system
SQL> select table_name from dba_tables;
重要查询:
//通过dba_users可以显示所有数据库用户的消息信息
select username,password from dba_users;
//通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限
SQL> desc dba_role_privs;
Name Type Nullable Default Comments
------------ ------------ -------- ------- -------------------------------------------------
GRANTEE VARCHAR2(30) Y Grantee Name, User or Role receiving the grant
GRANTED_ROLE VARCHAR2(30) Granted role name
ADMIN_OPTION VARCHAR2(3) Y Grant was with the ADMIN option
DEFAULT_ROLE VARCHAR2(3) Y Role is designated as a DEFAULT ROLE for the user
SQL> select * from dba_role_privs where GRANTEE='SCOTT';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
SCOTT CONNECT NO YES
SCOTT RESOURCE NO YES
//通过查询数据库字典dba_role_privs 可以显示用户所具有的角色
select * from dba_role_privs;
//如何查询一个角色包括的权限?
a.一个角色包含系统权限
select * from dba_sys_privs where grantee= 'CONNECT';
另外也可这样查看
SQL> conn system/pass as sysdba;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as SYS
SQL> select * from role_sys_privs where role='CONNECT';
ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
CONNECT CREATE VIEW NO
CONNECT CREATE TABLE NO
CONNECT ALTER SESSION NO
CONNECT CREATE CLUSTER NO
CONNECT CREATE SESSION NO
CONNECT CREATE SYNONYM NO
CONNECT CREATE SEQUENCE NO
CONNECT CREATE DATABASE LINK NO
b.一个角色包含党的对象权限
select * from dba_tab_privs where grantee='CONNECT';
//查询某个用户具有怎样的角色
select * from dba_role_privs where grantee='SCOTT';
//查询oracle中所有的系统权限。一般是dba
select * from system_privilege_map order by name;
//查询oracle中所有的角色,一般是dba
select * from dba_roles;
//查询oracle中所有对象权限,一般是dba
select distinct privilege from dba_tab_privs;
//查询数据库的表空间
select tablespace_name from dba_tablespaces;
//查看当前数据库
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORCL
下面总结下:一个用户拥有多个角色,一个角色是多个权限的集合;
管理表空间和数据文件*****
表空间是数据库的逻辑组成部分,从物理上讲,数据库数据(如表等)存放在数据文件中,从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成(见附图),所以我们通过操作表空间来操作表文件!
表空间:表空间用于逻辑上组织数据库的数据,数据库逻辑上是有一个或是多个表空间组成。通过表空间可以达到以下作用a.控制数据库占用的磁盘空间b.dba 可以将不同数据类型部署到不同的位置,这样有利于提高I/O性能,同时利于备份和恢复等管理操作。
sys 用户:超级管理员 权限最高 他的角色 dba 密码:chane-on-install (本人的已经改为pass)
system 用户:是系统管理员 权限也很高 她的角色是 dbaoper 密码:manager (本人该为pass)
scott 用户:普通用户 密码:tiger (本人改为woai5jia)
sys 与system
sys 有create database 的权限 而system 没有 其他相似
在日常对oracle管理过程中,使用system 就够了
权限 分为系统权限 和 对象权限;
系统权限:用户对数据库的相关权限
对象权限:用户对其他用户的数据对象操作的权限(比如表,视图,过程。。)
xiaoming 密码:m123;
xiaohong 密码:m1234;
在删除用户时,注意:如果要删除用户,已经创建了表,那么久需要在删除的时候带一个参数 cascade即把该用户及该用户创建的表删除(级联删除)
创建一个用户xiaoming 这个用户是没有任何权限的。比如登录 建表;
这时可以使用system 来赋予它这样的权限
如:grant connect to xiaoming
grant resource to xiaoming
还有比如实现xiaoing 对scott 中表的操作;
这时除了system sys 。scott 可以授权如:
查看emp表 如grant select on emp to xiaoming;
查看/增加/删除/修改 emp表 如grant all on emp to xiaoming;()
scott 收回xiaoming 对emp表的操作;
revoke select on emp from xiaoming:
虽然赋予了xiaomingselect的权限 但是在连接xiaoming 后使用select * from emp;还是查询不到
可以使用select * from scott.emp;这里就涉及到了“方案”的概念;
这里有desc 表名:是查看表结构;
//对权限的维护:如:希望xiaoming 用户可以去查询scott的emp表,还希望
xiaoming 可以把这个权限给别人
----如果是对象权限,就加入with grant option;
grant select on emp to xiaoming with grant option;
?如果scott 把xiaoming的select 权限回收了,那么xiaohong 的权限还在嘛:
答:同时被回收了
使用profile管理用户口令:
profile是口令限制,资源限制的命令集合。数据库建立时;oracle会自动建立名称为default的profile 。当建立用户没有指定profile选项。那么oracle会将defalt分配给用户
(1)账户锁定;
指定该账户登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天),一般用dba 的身份去执行该命令。
如:
sql>create profile lockaaa limit failed_login_attempts 3 password_lock_time 2;
sql>alter user xiaoming profile lockaaa;
(2)给账户解锁
sql>alter user xiaoming account unlock;
(3)终结口令
为了让用户定期的修改密码可以使用终止口令的指令来完成。同样这个命令也需要dba身份来操作
如:给前面的创建的用户xiaoming创建一个profile文件,要求该用户每隔10天
要修改自家登录的密码,宽限期为2天
sql>create profile bbb1 limit password_life_time 10 password_grace_time 2;
sql>alter user xiaoming profile bbb1;
----口令历史
如果希望用户在修改密码时。不能使用以前使用过的密码。可使用口令历史,这样oracle就会将口令修改的信息存放在数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码不一样时。就提示用户重新输入密码、
如:sql>create profile ccc1 limit password_life_time
10 password_grace_time 2 password_reuse_time 10;
//password_reuse_time 指定口令可重用时间即10天后就可以重用
赋给某个用户
删除profile
sql>drop profile ccc[cascade]
-----oracle 表的管理:
1.必须以字母开头
2.数据类型
a.字符型:char 定长 最大2000字符//如果知道该字段经常被
查询并且是知道大概有多长这样使用char更好,效率更快 如:身份证号
b.varchar2() 变长 最大4000字符
c.clob ()最大字符达4G
3.数字型
number 可以表示整数 也可以表示小数
number(m,n)表示一个小数有m位有效数 n位小数
number(m) 表示一个m位整数
4.日期类型
date 包括年月日时分秒
timestamp 是对date类型的扩展
5 图片 视频等
blob 二进制数据 ,一般我们在数据库中只放视频图片的路径。如果需要安全的
考虑则可以考虑把他们放在数据库中
--建表
create table student(
stuId number(5),
stuName varchar2(10),
sal number(7,2)
);
添加字段
sql>alter table student add(classId number(2));
修改字段
sql>alter table student modify (stuId varchar2(10))
删除字段
sql>alter table student drop column sal;
删除表:
sql>drop table student;
注意:一般我们不做修改字段和删除字段的操作
添加数据
insert into student values(1,'小明','男','01-3月-1997',489.4,12);
在oracle中默认的日期格式是:dd-mm-yy ,月份后要加上“月”
如果要修改默认格式:
SQL> alter session set nls_date_format ='yyyy-MM-dd';
SQL> insert into student values(2,'小红','女','1988-7-6',489.4,12);
插入部分字段:insert into student (xh,xm,sex)values('','','');
空字段的增加和查询------
SQL> insert into student (xh,xm,sex,birthday) values(3,'aa','女',null);
select * from student where birthday is null;
修改一个字段
update student set sal = sal/2 where sex ='男'
修改多个字段;
update student set sex='男',birthday='1999-3-3' where xh = '0A';
删除数据:======
delete from student;//删除所有记录,表结构还在,写日志可以恢复数据,速度慢
一般情况下 我们开始会使用savepoint 保存点名 然后出现错误操作可以使用
rollback to 保存点名 来恢复到原来的位置。在不做处理的情况下,保存点就一个,再赋予一个就会覆盖前面的那个;
drop table student; //删除表的结构和数据
truncate table student;删除表中所有记录。表结构还在 不写日志无法找回删除的记录,但速度很快;
--------//clear 清屏命令;
数据库要求查询效率。所以在数据库中我们常常使用
insert into student (字段1,字段2.。。) select * from student
来实现一个数量巨大的表供我们进行测试;
表单查询------
取消重复行:使用distinct关键字
select 语句中对于传入的内容是区分大小写的;
select ename,joB,sAl from emp where ename ='SMITH';
对于null值的处理;-------
SQL> select ename,13*sal+13*comm,comm from emp;//oracle中规定当某个字段中的值为null时,使用该值计算的结果也为null;
为了避免上上面的发生:可以使用nvl()函数
如:SQL> select ename,13*sal+13*nvl(comm,0) "年薪",comm from emp;
即当comm为null时会使用0代替,不为null 使用本身计算
注意在查询日期的时候,不要忘了oracle本身默认时间的格式:
SQL> select ename,hiredate from emp where hiredate >'3-3月-1983';
group by和having 使用;
//group by 用于对查询的结果分组统计
//having 子句用户限制分组显示结果
SQL> select min(sal),avg(sal),max(sal), deptno from emp group by deptno;
MIN(SAL) AVG(SAL) MAX(SAL) DEPTNO
---------- ---------- ---------- ------
1300 2916.66666 5000 10
800 2175 3000 20
950 1566.66666 2850 30
-------------------------------------
SQL> select min(sal),avg(sal),max(sal), deptno from emp group by deptno having avg(sal)>2000;
MIN(SAL) AVG(SAL) MAX(SAL) DEPTNO
---------- ---------- ---------- ------
1300 2916.66666 5000 10
800 2175 3000 20
数据分组总结:
1.分组函数只能出现在选择列表 having order by 子句中。
2.如果在select 语句中同时包含有group by ,having,order by 那么他们的顺序
一定是group by ,having, order by
如:SQL> select min(sal),avg(sal),max(sal), deptno from emp group by deptno having avg(sal)>2000 order by avg(sal);
MIN(SAL) AVG(SAL) MAX(SAL) DEPTNO
---------- ---------- ---------- ------
800 2175 3000 20
1300 2916.66666 5000 10
3.在选择列中如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则会出错;
多表查询:
1.查询匹配的多列子查询
与simth的工作岗位,部门号都相同的所有员工!
select * from emp where(deptno,job)=(select deptno,job from emp where ename='SMITH');
2.查询比自己部门平均工资高的员工信息。
逻辑要很清晰
i.查询出所有部门的平均工资
select deptno,avg(sal) from emp group by deptno;
在这里我们有一个需要特别注意的就是可以把上面得出的结果看做是一张子表
ii。查询得出结果!
select a1.ename,a1.sal,a2.mysal from emp a1,(select deptno,avg(sal) mysal from emp group by deptno) a2 where a1.deptno=a2.deptno and a1.sal>a2.mysal;
3.接下来讲到oracle中的重点:分页技术,一共有三种方式(见图)
i.rownum分页
(select * from emp)
ii.显示rownum 【注意这里的rownum是oracle分配的,并且只能识别一次】
select a1.*,rownum rn from(select * from emp) a1;
比如查询前十行记录:select a1.*,rownum rn from(select * from emp) a1 where rownum<=10;
但是这样写就会查不出来:
select a1.*,rownum rn from(select * from emp) a1 where rownum<=10 and rownum>=6(原因上面说了,oracle规定rownum 只能在一个条件中使用一次)
如果做过项目的知道。在分页中,我们经常使用到:pageNow pageSize pageCount
rowCount
所以在oracle 中我们也向其他查询一样
把10换成【pageNow*pageSize】
把6换成【((pageNow-1)*pageSize+1)】
所以要完成上面的功能还需要第三次子查询;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO RN
----- ---------- --------- ----- ----------- --------- --------- ------ ----------
7369 SMITH CLERK 7902 1980-12-17 800.00 20 1
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 2
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 3
7566 JONES MANAGER 7839 1981-4-2 2975.00 20 4
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 5
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30 6
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10 7
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20 8
7839 KING PRESIDENT 1981-11-17 5000.00 10 9
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30 10
iii.select * from(select a1.*,rownum rn from(select * from emp) a1 where rownum<=10) a1 where rn>=6 ;(注前面前十行查出来了后,rownum字段是rn,所以在第三步中的查询条件要使用rn)
4.几个条件的变化(都是修改最底层的select 子句)
a.需要查询的字段
select * from(select a1.*,rownum rn from(select ename,empno,deptno from emp) a1 where rownum<=10) a1 where rn>=6;
b.排序
select * from(select a1.*,rownum rn from(select ename,empno,sal from emp order by sal) a1 where rownum<=10) a1 where rn>=6;
4.用查询的结果创建一个新表;
create table mytable (id,name,sal) as select empno,ename,sal from emp;
复杂查询:合并查询
有时候,在实际应用中,为了合并多个select语句查询的结果,可以使用集合操作符
union , all union,insersect,minus
a.union 该操作符是用于取得两个操作集的并集,使用该操作符会自动去掉结果集中的重复行;
select ename,sal,job from emp where sal>2500 union
select ename,sal,job from emp where job='MANAGER';
b.union all 和上面的union相似,只是不消除重复行
c.insersect 指的是取得两个结果集的交集
d.minus 指的是两个集合的差集;
下面介绍几个小技巧:
to_date函数:当插入一个日期时,我们知道oracle默认是:dd-mm月-yyyy;
为了方便插入格式匹配,我们可以是该函数;
当然使用默认插入也是可以自动转化成yyyy-MM-dd的格式
但是还在这里说下该函数的使用方法。
insert into emp values(3,'邓言诚','manager',7782,to_date('1988/2/18','yyyy/MM/dd/'),789,77,10);
我试了一下,yyyy年MM月dd日的格式好像不可以!
一次插入多行记录:
a.上面我提到了一种方法感觉很好
create table mytable (id,name,sal) as select empno,ename,sal from emp;
b.下面的这种方法其实和上面的差不多;
create table mytable1(id number(5),name varchar2(10),job varchar2(20));
先创建后在给表赋值
insert into mytable1(id,name,job) select empno,ename,job from emp where deptno=10;
更新多列数据:
其实上面也有讲过类似的方法:
更新表中SMITH的工资,职位,奖金和SCOTT 一样;
update emp set (sal,job,comm)=(select sal,job,comm from emp where ename='SMITH') where ename='SCOTT';
事务处理:
前面也提到过保存点(savepoint),一般我们在进入数据库操作时,都会设置一个保存点。
a.提交事务,当执行使用commit语句可以提交事务。执行commit语句之后,会确认失事务的变化,结束事务,删除保存点,释放锁。当使用commit语句结束事务后,其他会话将可以查看到事务变化后的新数据。当然不手动的提交事务,使用exit会自动提交,所以建议大家养成手动提交事务的习惯。
那么,我写个小程序,使用java来提交事务(自己导入包,打开服务端口)
package com.demon;
import java.sql.*;
public class TestTransaction {
public static void main(String[] args) {
Connection ct=null;
Statement sm =null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
ct =DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","woai5jia");
sm = ct.createStatement();
System.out.println("0...");
//从scott中减去100
//加入事务处理
ct.setAutoCommit(false);
sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
System.out.println("1...");
int i = 4/0;//当然这里只是举个列子,出现异常有很多种
//从smith中加上100
sm.executeUpdate("update emp set sal=sal-100 where ename='SMITH'");
//提交事务
ct.commit();
sm.close();
ct.close();
} catch (Exception e) {
try {
//出现异常等 回滚事务
ct.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
}
}
b.只读事务; set transaction read only;
定义不是很好理解,我就用日常事务来说明一下它的用途:比如春节买火车票,售票管理员每隔一段时间就会查看售票情况。假如是每天18:00 统计售票情况,但是在此时,售票还在一直进行,不可能管理员统计就停止售票,所以这时使用只读事务的意义就显现出来了,但管理员在18:00这个时刻设置了只读事务,而售票人员还在进行售票。这时候,管理员查看的只是18:00之前的售票情况。
下面就以oracle自带的 system 和scott 来演示一下:
比如此时system 进入数据库 设置了只读事务:
然后,scott也进入数据库进行数据的操作
操作完成后,scott可以查看到自己操作后的结果,如:scott插入了几个雇员
而system 查找emp 表时却看不到该表被scott操作后的结果;
(select * from scott.emp 注意system查询时使用该形式,因为它要查询的是scott中的emp 表 这个我有时也容易忽略)
oracle 中sql 函数:
1.字符函数(把emp中的ename 转化成第一个小写剩余字母大写的形式)
select lower(substr(ename,1,1))|| substr(ename,2,length(ename)-1) from emp;
这里我就不多说了,试下就行了,这里的“ || ”是合并两个字符串。
还有很多replace 如:select replace(ename,'A','我是邓言诚') from emp;
2.数学函数
round(n,[m])该函数是四舍五入 m省略则得到整数
trunc(n,[m])截取一个数,省略m 则忽略小数
mod(n,m) 求余;
这里给出一个虚拟表 dual ,用于函数测试;
如:SQL> select mod(10,2) from dual;
MOD(10,2)
----------
0
--------------------------------------------------
floor(m),得到一个比m小的最大整数 如:floor(33.3)--->33
ceil(m),得到一个比m大的最小整数 如:ceil(44.2)--->45
还有其他数学函数 abs(),sin(),cos() power()......
3.日期函数
a.当期日期
SQL> select sysdate from dual;
SYSDATE
-----------
2011-6-19 0
b.addmouths(d,n);指d 加上n个月后的日期
如:得出从受雇距今超过30年的员工信息
select * from emp where sysdate>add_months(hiredate,30*12);
c.在oracle中可以利用时间想减得到天数:但因为小时的关系,可以忽略
select floor(sysdate-hiredate),ename from emp;
d.last_day(d);得到这个日期下,该月的最后一天。
SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-----------------
2011-6-30 0:17:57
如:各月倒数第3天入职的员工信息;
select * from emp where hiredate=last_day(hiredate)-2;
4.转换函数
虽然oracle中有自动转化功能,但有时候有的还是需要进行转化;
这里我说下to_char();该函数功能很广泛,可用于日期也可以用于薪水;
insert into emp values(100,'邓言诚','MANAGER',7566,sysdate,3232,324,10);
然后查询:SQL> select ename,to_char(hiredate,'yyyy-MM-dd HH24:mi:ss') "入职时间",to_char(sal,'L99,999.99') "薪资" from emp where empno=100;
ENAME 入职时间 薪资
---------- ------------------- --------------------
邓言诚 2011-06-19 00:44:01 ¥3,232.00
这里注意下:当使用别名时,使用中文要使用“”括起来,''不行。
就查询语句中的日期格式我就不说了,我来说下薪资的格式
L ---》表示当地的货币类型;
99,999.99---》小数点前表示整数,小数点后表示小数。至于前面的<,> 大家取钱都见过这种格式吧!还有就是数据要根据你创建表示的格式而定,如该emp表:sal number(7,2);
如果要使用国际货币则使用“$”....(把L换成相应的国际货币符号就可以了)
5.系统函数
a.terminal:当前会话客户所对应的终端的标示符
b.language :语言
c.db_name:当前数据库名称
d.nls_date_format;当前会话客户对应的日期格式
e.session_user:会话客户所对应的数据库用户名
f.current_schema:当前会话客户对应的默认方案名?
g.host:返回数据库所在主句名称
select sys_context('userenv','db_name') from dual;这里的userenv是用户所处环境
数据库管理员:
1.管理数据库的用户主要是sys 和system,他们的主要区别是:
(1)最重要的区别:存储的数据的重要性不同。
sys:所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行至关重要。由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba,sysdba,sysoper角色或权限,是oracle权限最高的用户。
system:用于存放次级的内部数据;如oracle的一些特性或工具管理信息。system用户拥有dba,sysdab角色或系统权限。
(2)其次区别:权限不同。
sys用户必须以as sysdba 或as syspoer形式登陆,不能以normal方式登陆数据库
system如果正常登陆。它其实就是一个普通的dba用户,但是如果以as sysdba登陆,其结果实际上它是作为sys用户登录的。(见附图)
2.数据库的逻辑备份(到出)和恢复(导入)【注意在导入和导出要在oracle安装目录的BIN 下进行】
导出表:
a.导出自己的表:(见附图)
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=scott/woai5jia@ORCL tables=(emp) fi
le=d:\emp1.dmp
b.导出其他方案的表:在这个提下方案,一个用户的创建就会生成对应一个和用户名相同的方案;
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=system/pass@ORCL tables=(scott.emp) fi
le=d:\emp2.dmp
c.导出表结构
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=scott/woai5jia@ORCL tables=(emp) fi
le=d:\emp3.dmp rows=n
d.直接导出方式,这种方式导入速度快,当数据量很大的时候可以考虑使用该方式
E:\oracle\product\10.1.0\Db_1\BIN>exp userid=scott/woai5jia@ORCL tables=(emp) fi
le=d:\emp4.dmp direct=y
导出方案:
a.导出自己方案
exp userid=scott/woai5jia@ORCL owner=scott file=d:\emp5.dmp
b.导出其他方案
exp userid=system/pass@ORCL owner=(system,scott) file=d:\emp6.dmp[这里表示用system用户导出自己的方案并导出scott方案]
导出数据库:【要求该用户具有dba权限或是exp_full_datebase权限】
exp userid=scott/woai5jia@ORCL full=y inctype=complete file=d:\emp7.dmp(inctype 表示增量备份)
导入表 和上面的对应
a.导入自己的表
imp userid=scott/woai5jia@ORCL tables=(emp) file=d:\emp.dmp;
b.导入表到其他用户
imp userid=system/pass@ORCL tables=(emp) file=d:\xx.dmp touser=scott;
c.导入表结构,只导入结构不导入数据
imp userid=scott/woai5jia@ORCL tables=(emp) file=d:\emp1.dmp rows=n;
d.导入数据:如果对象(如表)已经存在,则只导入数据
imp userid=scott/woai5jia@ORCL tables=(emp) file=d:\xxx.dmp ignore=y;
导入方案:
a.导入自身方案
imp userid=scott/woai5jia@ORCL file=d:\emp4.dmp;
b.导入其他方案【还是需要拥有dba身份】
imp userid=system/pass@ORCL file=d:\emp4.dmp fromuser=system touser=scott;
导入数据库
imp userid=system/pass full=y file=d:\xxxx.dmp;
--------------------------------------------------------------------------
* 注意以上的导入导出要对应相应的.dmp 我在这里只是把功能列出来,没有具体对应。应为我当时建的时候
没有标记dmp所对应的表
------------------------------------------------------------------------
前面介绍了当创建一个用户就会生成一个与之名称相对应得方案,其中方案中就包含下面的数据字典和动态性能视图。。。。。
数据字典 和动态性能视图
数据字典:在oracle中提供了数据库的一些系统信息,是静态的数据
动态性能视图: 记载了例程启动后的相关信息,是动态数据
数据字典视图:
(1)user_tables;用于显示当前用户所拥有的所有表,它只返回所对应方案的所有表
select table_name from user_tables;
(2)all_tables :用于显示当前用户可以访问的所有表,不仅返回当前用户方案表,还可以返回当前用户可以访问的其他方案表 select table_name from all_tables;
(3) dba_tables 它显示所有方案所有的数据库表,但是查询这种数据库字典
视图。要求用户必须是dba角色或是select any table 系统权限
SQL> conn system/pass;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as system
SQL> select table_name from dba_tables;
重要查询:
//通过dba_users可以显示所有数据库用户的消息信息
select username,password from dba_users;
//通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限
SQL> desc dba_role_privs;
Name Type Nullable Default Comments
------------ ------------ -------- ------- -------------------------------------------------
GRANTEE VARCHAR2(30) Y Grantee Name, User or Role receiving the grant
GRANTED_ROLE VARCHAR2(30) Granted role name
ADMIN_OPTION VARCHAR2(3) Y Grant was with the ADMIN option
DEFAULT_ROLE VARCHAR2(3) Y Role is designated as a DEFAULT ROLE for the user
SQL> select * from dba_role_privs where GRANTEE='SCOTT';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
SCOTT CONNECT NO YES
SCOTT RESOURCE NO YES
//通过查询数据库字典dba_role_privs 可以显示用户所具有的角色
select * from dba_role_privs;
//如何查询一个角色包括的权限?
a.一个角色包含系统权限
select * from dba_sys_privs where grantee= 'CONNECT';
另外也可这样查看
SQL> conn system/pass as sysdba;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as SYS
SQL> select * from role_sys_privs where role='CONNECT';
ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
CONNECT CREATE VIEW NO
CONNECT CREATE TABLE NO
CONNECT ALTER SESSION NO
CONNECT CREATE CLUSTER NO
CONNECT CREATE SESSION NO
CONNECT CREATE SYNONYM NO
CONNECT CREATE SEQUENCE NO
CONNECT CREATE DATABASE LINK NO
b.一个角色包含党的对象权限
select * from dba_tab_privs where grantee='CONNECT';
//查询某个用户具有怎样的角色
select * from dba_role_privs where grantee='SCOTT';
//查询oracle中所有的系统权限。一般是dba
select * from system_privilege_map order by name;
//查询oracle中所有的角色,一般是dba
select * from dba_roles;
//查询oracle中所有对象权限,一般是dba
select distinct privilege from dba_tab_privs;
//查询数据库的表空间
select tablespace_name from dba_tablespaces;
//查看当前数据库
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORCL
下面总结下:一个用户拥有多个角色,一个角色是多个权限的集合;
管理表空间和数据文件*****
表空间是数据库的逻辑组成部分,从物理上讲,数据库数据(如表等)存放在数据文件中,从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成(见附图),所以我们通过操作表空间来操作表文件!
表空间:表空间用于逻辑上组织数据库的数据,数据库逻辑上是有一个或是多个表空间组成。通过表空间可以达到以下作用a.控制数据库占用的磁盘空间b.dba 可以将不同数据类型部署到不同的位置,这样有利于提高I/O性能,同时利于备份和恢复等管理操作。
- 附件.rar (1.2 MB)
- 下载次数: 3
发表评论
-
oracle 笔记下
2011-07-06 18:17 790建立表空间:建立表空 ... -
jquery 对select中的option操作
2011-06-15 16:28 6264Jquery的功能很强大,下面 ... -
MySQL实现分页技术
2011-06-09 08:29 907先给出servlet package com.ourchr.s ... -
servlet cookie jsp
2011-05-19 18:21 915首先是登陆界面,其中有mes_zh等国际化 这个不重要 < ... -
java学习日记(线程)
2011-05-18 18:38 815java学习日记(线程) 一 ... -
Java Servlet和JSP 处理Cookie
2011-05-18 13:28 19559.1 Cookie概述 Cookie是服务器发送给浏 ... -
简单的qq实现
2011-05-17 18:42 744很好用 简洁 -
简单的日历控件
2011-05-17 18:40 800package Exception; import java ... -
完整的JDBC 简单列子
2011-05-17 18:38 690package dao; import java.sql.Co ... -
jsp jstl 标签3
2011-05-13 17:38 702<c:import> 作用:导入一个url的资源, ... -
jsp jstl 标签2
2011-05-13 17:38 743c:forEach 用于循环的<c:forEach&g ... -
jsp jstl 标签1
2011-05-13 17:36 1195一、引入包: jstl.jar (1 ... -
js 中this用发小结
2011-03-09 09:19 705js中this的总结 在面向对 ... -
js 正则表达式
2011-02-24 15:12 632js正则表达式 exec 方法 用正则表达式模式在字符串中运 ... -
WEB innerHTML中div 和span
2011-02-24 13:58 1246使用innerHTML属性来控制DIV和SPAN<$lo ... -
Myeclipse 快捷键打总结
2011-01-08 13:01 728xml、jsp、jsf、js等等,我们没有必要全部都去自动校验 ... -
java基础知识
2011-01-07 17:35 711 -
java文件夹之间的复制
2011-01-06 14:58 657package Exception; import java. ...
相关推荐
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...
Oracle学习笔记 Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接...
Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...
在Oracle学习笔记中,对安装卸载和配置的详尽讲解,不仅为学习者提供了操作指导,而且还涉及到了数据库管理的一些基础知识点。这些内容对于数据库管理员和开发人员来说都是十分重要的,因为它们是操作Oracle数据库的...
根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。
Oracle DBA 学习笔记 标题:Oracle DBA 学习笔记 描述:学习使用维护 Oracle 数据库数年,对认为值得记录的 Oracle 维护脚本进行记录总结,存起来,虽然今后开源是方向,但不可否认 Oracle 仍然非常有水平的,在...
以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...
资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...
超详细Oracle学习笔记,详细记录了oracle的学习过程中遇到的各种问题及基础知识,适合初中级oracle使用人员学习参考。
### ORACLE经典学习笔记知识点概览 #### 第一章 ORACLE 命令 本章节主要介绍了Oracle数据库中常用的命令及其使用方法。 1. **查看参数文件**: `Desc v$parameter` - 这个命令用于查看Oracle的参数文件信息,通过...
在“MSDN Oracle学习笔记”中,我们可以期待找到关于Oracle数据库的详细讲解和实践指导。 首先,Oracle数据库的基础知识是必不可少的。这通常涵盖数据库系统的基本概念,如SQL(结构化查询语言)的使用,数据类型,...
Oracle学习笔记Linux版
Oracle10g学习笔记,Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记
Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...