- 浏览: 126951 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
关于anroid设置webview背景方法探讨 -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android ScrollView 与listView共存冲突问题解决方法(附图) -
zhangyang5023637:
讲的挺明白的。
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
android中的webview 加载html,并可以实现ja ...
关于anroid设置webview背景方法探讨
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性能,同时利于备份和恢复等管理操作。
**建立表空间:建立表空间使用create tablespace 命令
还有一半等整理好再发布!
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性能,同时利于备份和恢复等管理操作。
**建立表空间:建立表空间使用create tablespace 命令
还有一半等整理好再发布!
- 附件.rar (1.2 MB)
- 下载次数: 2
相关推荐
本文中主要介绍了传统数据库没有物联网的速度基因,时序数据库的数据存储设计,时序数据库编程语言之争,时序数据库整合趋势明显等相关内容。本文来自csdn,由火龙果软件Anna编辑、推荐。而且“增删改查”是传统...
N11数据库管理工具是一款专为Windows 10操作系统设计的高效、易用的数据库管理应用,它提供了全面的功能,帮助用户轻松管理和操作各种类型的数据库。N11数据库工具不仅适用于初学者,也适合有一定数据库管理经验的...
Excel VBA与数据库整合应用范例精讲(范例文件代码) 内容简介 《Excel VBA 数据库整合应用范例精讲》用180个实例介绍了利用Excel VBA来操作数据库(包括Access、SQL Server和FoxPro)的实用方法和技巧。 全书共11章...
tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份...
Oracle数据库课程设计医院系统数据库源代码。包含Java代码和SQL语句。源码中默认使用的数据库为运行的Oracle数据库 如需修改,在java源码/database.propertie中修改即可!Oracle数据库课程设计医院系统数据库源代码...
数据库迁移 3.0 迁移准备 注意:本地网络必须能正常连接到瀚高数据库 有2种方式: 本机和服务器网络 互通,可以直接连接到上文中安装的服务器端的瀚高数据库; 本机和服务器网络 不互通,则需要在本地安装瀚高数据库...
网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档以及相关报表网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关...
腾讯云数据库mysql产品认证答案涵盖了mysql数据库、腾讯云、云数据库、mysql数据库认证和腾讯云云数据库产品等方面的知识点,是一份非常重要的认证考试答案,能够帮助考生更好地掌握mysql数据库管理和维护知识。
Activiti 适配达梦数据库教程 activiti 是一个开源的 Workflow 和 BPM system,它提供了强大的工作流引擎和业务流程管理功能。然而,activiti 默认支持的数据库只有 MySQL、 PostgreSQL、Oracle 等少数几种,而达梦...
python系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库.zippython系统源码+数据库....
KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具KingbaseDTS数据库迁移工具...
Access 2010数据库引擎是Microsoft Office 2010套装中的一部分,它提供了对多种数据库格式的支持,包括但不限于Access数据库(.mdb和.accdb)以及通用的OLE DB和ODBC数据源。这个数据库引擎被称为Jet或者ACE(Access...
汽车品牌车系车型sql数据库.zip汽车品牌车系车型sql数据库.zip汽车品牌车系车型sql数据库.zip汽车品牌车系车型sql数据库.zip汽车品牌车系车型sql数据库.zip汽车品牌车系车型sql数据库.zip汽车品牌车系车型sql数据库....
"国家开放大学 MySQL数据库应用实验训练1 在MySQL中创建数据库和表" 本实验训练旨在让学生掌握 MySQL 中的数据库和表的创建过程。 MySQL 是一种关系型数据库管理系统,广泛应用于各种领域。为提高学生的实践能力,...
在IT行业中,数据库管理系统(DBMS)的选择对任何应用程序的性能和稳定性至关重要。Nacos作为一个流行的微服务管理和配置中心,通常会与常见的数据库如MySQL、Oracle等进行集成。然而,对于国内用户,尤其是那些需要...
软件数据库设计文档模板 software database design report document" 在软件开发项目中,数据库设计是非常重要的一步骤,它直接影响到软件系统的性能、安全性和可维护性。本文档提供了一份软件数据库设计文档模板...
在C# WinForm开发中,数据可视化是至关重要的部分,特别是当涉及到用户界面与数据库之间的交互时。`DataGridView`和`TreeView`控件是.NET Framework提供的两种强大的UI元素,它们可以方便地展示和操作数据。本教程将...
根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签中的信息,对可能涉及的关键知识点进行归纳总结。 ### 数据库设计的...
通过这份福州大学数据库期末考卷,我们可以看到数据库系统原理、数据库查询语言、数据库设计、数据库安全、数据库应用、数据库管理、数据库技术、数据库应用场景等几个方面的知识点,涵盖了数据库的基本概念、数据库...