日期:2014-05-16  浏览次数:20549 次

Oracle(五)

如果一个用户a不想看到其他用户b某个点以后更新的数据,如何办到呢?

a可以在这个点设置set transation read only;

此时b执行一个增加,或者修改,或者删除的时候 commit; 这样a就不会看到a点以后所更新的数据啦。

这对于并发量比较大,针对某个时间点的统计就行通啦;

?

SQL函数的使用

处理字符的函数,数学函数(不讲),日期函数,系统函数

lower(char)

upper(char)

length(char)

substr(char,m,n) 截取字符串从m开始,截取n个字符

以首字母大写显示所有员工的名字

select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp;

?

?replace(ename,'A','替换成的内容')

round(sal)默认四舍五入到整数 ?round(sal,1) 四舍五入变成0 到小数点第一位

trunc(sal) 截取数字 trunc(sal,1) 截取到小数点第一位 -1 个位数为0 等?

?

floor(sal) 比sal小1的整数 ,地板向下取整

mod(m,n)

ceil(sal) 比sal大1的整数 , 向上取整

dual做测试的表

?

select mod(2,3) from dual; mod(m,n) 取余数

?

?

日期函数:

sysdate?

select sysdate from dual;

add_mouths(d,n) n为几个月?

八月以前入职的

select * from emp where sysdate > add_mouths(hiredate,8)

?

注意中文别名要双引号

?

入职天数 trunc(sysdate-hiredate)

?

last_day(hiredate) 这个时间当月的最后一天

倒数第三天入职的 last_day(hiredate) - 2 = hiredate

?

转换函数:

create table t1(id int) ?insert into t1 values('1')

create table t2(name varchar2(20)) insert into values(234)

?

select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;

注意添加数据的时候不要忘了把时分秒也指定,否则时分秒默认为:00:00:00

?

薪水数字显示成 RMBXXXX.XX

to_char(sal,'L99999.99') 例 'L99,999.99' 不能显示为空格格式 '$99,999.99' 美金

Oracle 会根据安装的Oracle自动判断前缀,中国为RMB

?

1980 年入职的 ?to_char(hiredate,'yyyy') = 1980

12 月份入职的 ?to_char(hiredate,'mm') = 12

?

系统函数

?

正在使用哪个数据库

select sys_context('usernv','db_name') from dual;

什么语言

select sys_context('usernv','language') from dual;

等等

session_user ?当前操作用户是谁?

current_schema ?方案名 ?方案名和用户名是一样的

?

用户和方案的关系,用户被创建以后,Oracle自动给你创建方案。

名字和用户名一摸一样

?

方案里很多数据对象:表,视图,触发器,存储过程。

用方案的方式存储数据对象

?

?

?

DBA

?

备份和恢复

?

数据字典和动态性能视图

?

管理表空间和数据文件

?

sys和system区别

sys具有最高的权限,sys用户对应一个sys方案,存放了Oracle的基表和视图(对Oarcle运行的很重要)

由数据库维护,其他用户无权修改。sys不能以normal形式登陆。

系统角色dba,sysdba,sysoper

sys用户具有dba,sysdba,sysoper的所有权限

system 具有dba,sysdba的所有权限

system 用于存放次一级的内部数据,如Oracle的一些特性或工具的管理。

system 登陆后其实就是一个普通的dba,但如果以sysdba登陆的话,登陆以sys登陆。

sys 必须 conn sys/change_on_install as sysdba;

system conn system/manager 以sysdba登陆.conn system/manager as sysdba;

sysdba,sysoper 角色可以启动startup;关闭数据库shutdown;,dba不可以

sysdba 可以创建数据库 sysoper不可以等

?

Oracle参数

show ?parameter ;

?

数据库表的逻辑备份和恢复

?

逻辑备份:使用export工具将数据库对象的结构和数据导出到文件的过程

逻辑恢复:指当数据库对象被误操作而损坏后使用工具import利用备份文件把数据对象导入到

数据库的过程。

?

逻辑备份只能在数据库运行的状态下导出,而物理备份可以在数据库关闭的情况下导出数据

?

?

?

导出分为: 导出表 ,导出数据库(导出多个方案),导出方案(导出所有的数据对象)

?

exp ?命令

?

导出表:

导出自己的表

?

exp userid=scott/tiger@myorcl table=(emp[,dept...]) file = D:\dat.dmp

?

首先要进入到Oracle BIN目录下 因为exp命令在BIN下

?

如果用户要导出其他方案的表,需要dba权限或有exp_full_database权限

如system 就可以导出scott表 exp userid=system/manager@myorcl table=(scottemp)

?file = D:\importScottEmp.dmp;

?

导出表结构

exp userid=...... ?rows=n ?行数为NO

?

直接导出,速度快

exp userid=...... ?direct=y ? 对于大表 用direct=y 很快

?

?

导出方案:

导出自己的方案

exp userid=scott/tiger@myorcl owner=scott file=D:\xx.dmp;

导出别人的方案要有exp_full_database权限或者有dba权限

如system导出多个方案exp ... ?owner=(sysyem,scott) ....

?

导出数据库

?

( full=y 全部都导出 inctype=complete 增量备份)

?

exp userid=system/manager@myorcl full=y inctype=complete file = D:\aa.dmp

?

?

导入也有三种 导入表,导入方案,导入库