目    录

一. 数据库基础部分

第一章       oracle基础介绍

第二章  数据查询语言(QL)

第三章  数据定义语言(DDL)

第四章  Oracle数据分区表

第五章  PL/SQL程序设计(Procedual Language)

第六章  Oracle权限设置

第七章  存储过程与函数

第八章  动态SQL

二、体系结构/数据库管理

第一章  Oracle9i 体系结构与物理结构管理

第二章  Oracle9i逻辑结构管理

第三章  Oracle9i 内存结构管理

第四章  Oralce9i实例及进程结构

第五章  Oracle9i表空间管理

第六章  Oralce9i数据库用户管理

第七章  Oracle9i数据库备份与恢复

第一部分   数据库基础部分                  回目录

第一章                    oracle基础介绍

1、Oracle9i数据库系统结构与产品组成

67% Oralce

/

Internet

\

9% sql server

中大型网站: Unix + Oracle + jsp

小型网站:   NT + sql server + asp

50% Oralce

/

DBMS --  17% DB2(针对IBM机器)

\

5% sql server

ORALCE应用系统开发工具:

form -> *.form

/

Develop200 --  report -> *.rdf

\

graphics -> *.ogd

oralce application server

用户数: 不会影响并发数,没有限制 ,只有企业版才有用户数概念。

会话数:

进程数: 操作系统的进程数应该是Oracle进程数的两倍

登陆sql*plus

用户:/as sysdba

查询数据库选件产品:

sql > select * from v$option;

sql > set linesize 1000  --设置行宽

sql > set pagesize 100   --设置页宽

sql > Clear scr          --清屏

sql > /                  --重复执行sql

sql > show parameter processes 进程数

1)关于Oracle9i数据库的数据库管理员用户

Sys: 在Oracle9i 9.0.1之前的数据库中,默认口令字为:change_on_install; 在9.2.0中无默认口令字

System: 在Oracle9i 9.0.1之前的数据库中,默认口令字为manager;在9.2.0中无默认口令字

安装结束后,可以更改:

SQL>grant connect to system identified by "1234";

SQL>password --需要原口令

Sys用户登陆数据库方法:

$sqlplus "/as sysdba"        --sys用户无口令字要求(缺省)

$sqlplus "sys/xx@cc as sysdba"  --sys用户有口令要求

操作系统认证 (进入oracle不许要口令字)只限于本地(8i/9i/10g)

/

sys用户口令认证方式:

\

oracle认证 (7i/8)

unix: oinstall (oracle8i/9i)

dba

修改sys用户口令字的方法:

A 修改认证方法。

D:\oracle\ora92\network\admin\sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (NTS)

unix 中要加上这一行。

NTS  - 操作系统认证

NONE  - ORACLE 认证

B 修改口令字

c:\>orapwd file=d:\oracle\oracle\roa92\database\pwdSID.ora password=abcd entries=30   --Windows

$orapwd file=/u01/app/oracle/product/9.2.0/dbs orapwSID password=abcd entries=30      --Unix

C 重新启动oracle服务(Windows)

重新启动数据库(Unix)

tkprof:跟踪文件整理命令,将跟踪文件转换为文本文件

语法:

D:\>tkprof 跟踪文件 文本文件

跟踪文件存贮目录:

D:\>oracle\admin\db_name\udump\*.trc  (trace)

跟踪文件需要定期清理。(bdump 和 udump 目录)

跟踪每一条命令:

sql>alter session set sql_trace=true;|false 立刻生效,当前session生效。

sql>exec dbms_session.set_sql_trace(true);|false   以包的形式执行。

sql>alter system set sql_trace=true scope=spfile; 永久修改,重起生效。

2)分布式数据库 (必须是企业版)

分布式数据库的组成:

全局数据库管理系统:GDBMS

局部数据库管理系统:LDBMS

通讯驱动程序:CM

全局数据库字典:DICITIONARY

SQL*NET 网络驱动程序

sql*net v1.0                oracle 7.3.4

sql*net v2.0                oracle 7.3

net8                        oracle 8    \

net8i                       oracle 8i   - connect pool

oracle net services         oracle 9i   / 断掉后自动重新连接

Oracle 运行的过程

http://www.oracle.com

http://www.oracle.com:234/cgi-hie/gun.go/

/虚拟路径/包名.过程/

3)Oracle的网络配置

协议

/

主机字符串 --  IP地址或服务器

\

\    数据库实例名(oracle7/8)

- /

\

数据库服务名(oracle8i/9i/10g)

8i以上尽可能用数据库服务名。

数据库标准参数

数据库名:db_name

数据库实例名:instance_name

数据库域名:db_domain  区分同名数据库

数据库服务名:service_names

全局数据库名:global_db_name  查询远程表,用在链路上

ORACLE_SID   --操作系统环境变量。

实例名和数据库名是一一对应关系(大部分情况;双机热备系统是一对二关系,共享磁盘阵列)

两个同名数据库不能远程传数据。

数据库名相同时,可以加上域名,来区分数据库。

当数据库名加上域名不相同时,可以进行远程数据传输。

cats.hn.gov.cn

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

|       |

|       |-------db_domain

|

|------db_name

题目:

一个数据库全局数据库名是:prod.us.oracle.com

问:该数据库名:prod

域名:无

服务名:prod

数据字典

查询数据库名:

sql>select name from v$database;

sql>show parameter db_name

查询数据库实例名:

sql>select instance_name from v$instance;

sql>show parameter instance_name

查询数据库域名:

sql>select value from v$parameter where name='db_domain';

sql>show parameter db_domain

查询数据库服务名:

sql>select value from v$parameter where name='service_anmes';

sql>show parameter service_names

查询全局数据库名:

sql>select * from global_name;

v打头的是动态数据字典

Unix 下网络配置工具

$netlasst(Orale8i)

$netca(Oracle9i/10g)

以sys用户连接远程数据库:

$sqlplus "sys/xx@unix01 as sysdba"

启动Net configuration Assistant

选择版本,远端服务名,ip地址,重新设置连接名(在原名后加01等),重新登陆sql*plus. 使用用户名远程登陆。

从sql*plus 进入命令行:host

手工配置:

Oracle网络连接解析文件:tnsnames.ora

D:\oracle\ora92\network\admin\tnsnames.ora                 -windows

/u01/app/oracle/product/9.2.0/network/admin/tnsnames.ora   -unix

Oracle检听进程配置文件:listener.ora

D:\oracle\ora92\network\admin\listener.ora                 -windows

/u01/app/oracle/product/9.2.0/network/admin/listener.ora   -unix

$lsnrctl start    -启动监听进程

$lsnrctl status   -显示监听进程状态

$lsnrctl stop     -停止监听进程

查询当前在先用户

sql>select username,sid,serial#,machine from v$session;

删除用户会话:

sql>alter system kill session 'sid,serial#';

查询用户所使用的sql:

sql>select user_name,sql_text from v$open_cursor;

查询sql区的sql语句:

sql>select sql_text from v$sqlarea;

方便客户端连接。

将主机字符串写入注册表:

regedit.exe->Local Machine->Software->ORACLE->HOMEO

增加关键字:local

键     值:主机字符串

3)、Oracle9i 相关的数据库语言

sql 标准化数据库语言

sql*plus 数据库接口语言

pl/sql 过程化语言

4)、数据分区技术(相对于数据集中)

list分区表-不能比大小

range -可以比大小

LOB数据类型

BLOB:存储二进制数据。例如:图象、声音、视频等、以代替LONG RAW类型(oracle里面已经淘汰)。

CLOB:存储大字符类型数据。例如:网上论坛,个人简历,说明信息等等以代替LONG 类型。

NCLOB:

nls(National Language Support)字符集,oracle中n打头的基本上和国家有关。

A、数据库核心字符集设置参数:

nls_characterset:zhs16cgb231280 (支持版本:oracle7.3以上,不支持繁体字)

zhs16gbk      (支持版本:oracle8.0以上,包括韩文、日文)

zhs32gb18030  (支持版本:oracle9i以上,在上一个上支持蒙文、维吾而文等)

查询核心字符集:

sql>select * from nls_database_parameters;

B、客户端字符集设置参数:

nls_lang:simplified chinese_china.zhs16gbk

Windows下注册表中的NLS_LANG项的键值

Unix下设置字符集方法:

$NLS_LANG="simplified chinese"_china.zhs16gbk

$export NLS_LANG

两个机器的ORACLE核心字符集不同,ORACLE拒绝迁移。

如果本机的ORACLE不是中文,需要设置字符集,再进行迁移。

C、修改数据库核心字符集的方法。

sql>update props$

set value$='ZHS16GBK'

where name='NLS_CHARACTERSET';

sql>commit;

修改后,重新启动数据库即可。

核心字符集和客户端一致的话,也可以显示中文。

BFILE:外部存储,将数据存储在服务器外部磁盘。

只存路径,不管格式。

5)、Oracle9i数据库改变及新增功能。

sql>set com v7      --设置数据库为oracle7.0,临时型设置。不支持V6。

OLTP 数据库和前端交互较多,回退空间较大。

数据仓库,改动较少,回退空间较小。

6)、Oracle9i数据库语言设计:

sql*plus  => sql  、 sql*plus 、 pl/sql

SQL语言:

查询语言(QL):      Query Language

数据操纵语言(DML):Data Manpulation Language

数据控制语言(DCL):Data Control Language

数据定义语言(DDL):Data Definition Language

第二章  数据查询语言(QL)                  回目录

2006-4-5

一、数据字典:

数据字典是一组存储系统信息的表、视图、同义词等,由系统自动维护,用户可以查询。

数据字典分类:

user_xxx: 存储用户创建的数据库实体,例如:user_tables,user_indexes,user_db_links等。

all_xxx:  存储用户可以存取的数据库实体,例如:all_tables,all_indexes,all_links等。

sql>select table_name from all_tables;

dba_xxx:  数据库管理员数据字典。例如:dba_tables,dba_indexes,dba_links等。

sql>select owner,table_name,tablespace_name from dba_tables;

v$xxx:动态数据库字典。例如:v$database,v$session,v$sga(内存数),v$license(最大会话数),v$sgastat(内存使用状况)等。

sql>set timing on  --设置跟踪,显示执行时间。

sql>select * from all_objects;所有的数据字典,大概有3万多个。

二、日历及日期显示格式的设置

1、设置日历显示格式参数:nls_calendar

sql>alter session set nls_calendar="Japaness Imperial";

sql>alter session set nls_calendar="ROC Official";

sql>alter session set nls_calendar="Gregorian";

2、设置日期显示格式参数:nls_date_format

sql>alter session set nls_date_format='格式';

常用日期格式组合方法:

yyyy.mm.dd    yy.mm.dd  yyyy/mm/dd  yy/mm/dd  yyyy-mm-dd   yy-mm-dd

yyyy"年"mm"月"dd"日dy hh24:mi:ss AM" 加AM时24要去掉

周的话加dy --星期

sql>select sysdate+2+2/24+20/1440 from dual;  --过两天两小时20分钟

查询5年11个月之后的时间:

sql>select sysdate+to_yminterval('05-11') from dual;

查询5年11个月之前的时间:

sql>select sysdate+to_yminterval('-05-11') from dual;

查询年度:

sql>select extract(year from sysdate) from dual;

查询月度:

sql>select extract(month from sysdate) from dual;

查询日期:

sql>select extract(day from sysdate) from dual;

3、将日期显示格式写入注册表

Local Machine->Software->ORACLE->HOMEO

增加关键字:nls_date_format

键    值 :日期格式(注意:无单引号)

unix下设置:

$NLS_DATE_FORMAT=“格式”

$export NLS_DATE_FORMAT

也可以将日期格式设置写入ORACLE的登陆自动执行文件:glogin.sql

D:\oracle\ora92\sqlplus\admin\glogin.sql (windows)

/U01/app/oracle/product/9.2.0/sqlplus/admin/glogin.sql  (nuix)

4、时区(Time Zones)

查询当前时区:

sql>select sessiontimezone from dual;

设置时区:

sql>alter session set time_zone='-7:00';

查询当前时间:

sql>select sysdate,current_date from dual;

2006-04-05 2006-04-04

current_date:当地时间。

sysdate:当前时间。

三、谓词

A、 IN(NOT IN):等于或不等于列表中的任意表达式

sql>select * from emp

where deptno in(20,30,40)

B、 (NOT)BETWEEN AND:表示从小到大的一个范围

sql>select * from emp

where sal between 1000 and 2000;

C、(NOT)LIKE :字符型数据匹配查询

sql>select * from emp

where ename like 'S%';

-:表示一个字符;

%:表示任意字符串;

D、伪例

rowid:唯一行标识

rownum:行号

问题:

试查询EMP表中工资最高的5名员工及工资值及序号。

sql>select ename,sal,rownum from(select ename,sal from emp order by sal desc)

where rownum<=5;

http://fh_sw:7778/isqlplus

E、空值(NULL)

判断以下语句是否正确:

sql>select ename,sal,comm,sal+nvl(comm,0) from emp;

nvl(c1,c2)=c1 c1 不是空值,

=c2 c1 是空值。

类似函数:

nvl2(c1,c2,c3)=c2 c1不是空值

=c3 c1是空值

有奖金的加100,没奖金的直接给500

sql>select ename,nvl2(comm,comm+100,500) from emp;

coalesce(c1,c2,c3,,,)=c1                    c1不是空值

=coalesce(c2,c3,c4,,,) c1是空值。返回第一个不为空的值。

sql>select * from emp where comm is null;

case:

sql>select ename,(case when sal<1500 then '低收入'

when sal>=1500 and sal<=3000 then '中等收入'

when sal>3000 then '高收入'

else '收入状况不详'

end) "收入状态",sal

from emp;

decode:

sql>select ename,job,

decode(job,'MANAGER',sal+300,'SALESMAN',sal+200,'CLERK',sal+100,sal) R_sal

from emp;

违法字符用双引号,字符型和日期型用单引号。

四、汇总与统计

常用聚组函数:

sum,max,min,avg,count,count distinct,stddev(标准差)

sql>select count(*),count(comm)

from emp;                      空不记数。

sql>select count(distinct job)

from emp;                      工作岗位有几个。

分组统计:服务对职工工资进行合计。

分部门、

sql>select deptno,job,sum(sal)

from emp

group by deptno,job;

分部门、职务对工资进行合计,并计算工资总合。

sql>select deptno,job,sum(sal)

from emp

group by rollup(deptno,job);

分别按部门、职务对工资进行合计

sql>select deptno,job,sum(sal)

from emp

group by grouping sets(deptno,job);

题目:

分别按年度、部门、职务对工资进行合计。同一个年度的在一起,同一部门的在一起,同一个职务的在一起。

sql>select to_char(hiredate,'yyyy'),deptno,job,sum(sal)

from emp

group by grouping sets(to_char(hiredate,'yyyy'),deptno,job);

五、连接查询(Join)

1、等值连接

问:SMITH在哪里工作?

sql>select ename,loc

from emp,dept

where emp.deptno = dept.deptno and ename='SMITH';

查询出员工姓名、工作地点、所在部门(要求列出公司所有部门)

sql>select ename,loc,dept.deptno

from dept left outer join emp on dept.deptno=emp.deptno;

sql>select ename,loc,dept.deptno

from emp left join dept on dept.deptno=emp.deptno;

sql>select ename,loc,dept.deptno

from emp,dept

where emp.deptno(+)=dept.deptno;

六、子查询(Subqueries)

1、多级子查询

哪些员工的工作与SMITH相同,或者工资比他高?

select * from emp

where ename<>'TURNER'

and (sal > (select sal from emp where ename='TURNER' )

or deptno=(select deptno from emp where ename='TURNER'));

2、哪个员工最早受雇?

sql>select ename

from emp

where hiredate=(select min(hiredate) from emp);

3、当查询结果返回值不止一个时,可以使用all,any,in,not in 等

题目:

查询出其他部门中比部门30中某一个员工工资高员工?

sql>select ename,sal

from emp

where deptno !=30

and sal > any (select sal from emp

where deptno=30); 相当于min(sal)

4、当查询返回结果多个一列时,主查询语句的where可以使用括号括起来。

题目:

查询与FORD具有相同职务与工资的员工?

sql>select ename,job,sal

from emp

where (job,sal)=(select job,sal from emp where ename='FORD');

dml 和 dcl部分暂时不讲。

第三章 数据定义语言 (DDL)            回目录

一、创建基表

语法:

sql>Create table 表名(

列名1 数据类型 约束条件,

列名2 数据类型 约束条件,

,,,,)

sql>Create table product(

p_name varchar2(20) unique,

p_id number(5) primary key,

p_date date not null,

p_loc char(30) default '郑州',

constraint uk_p_name unique(p_name),

constraint pk_i_id primary key(p_id));

/*(constraint nn_p_date not null,)*/

check(p_id>11110 and p_id<99999)

以上sql有点问题

查询表约束:

sql>select * from user_constraints

where table_name='PRODUCT';

查询列的默认值:

sql>select column_name,data_default

from user_tab_columns

where table_name='PRODUCT';

save c:\p1;

get c:\p1;

sql>insert into product(p_name,p_id,p_loc)

values('计算机',12221,sysdate,default)

约束条件的修改:

删除约束:

sql>alter table product drop primary key;           --删除主键约束

sql>alter table product drop unique(p_name);        --删除唯一性约束

sql>alter table product modify(p_date null) ;       --取消非空约束

sql>alter table product modify(p_loc default null); --取消默认值

增加约束条件:

sql>alter table product add primary key(p_id);

sql>alter table product add unique(p_name);

sql>alter table product add modify(p_date not null);

sql>alter table product add modify(p_loc default '河南');

二、数据类型

字符型 varchar2(n)  n<=4000    --空间不满的时候回退空间

char(n)      n<=2000    --占满空间

数字型 number(n)      0-9.99(e125) 最大38位

number(n,d)

int          最大38位数

日期型 date

二进制 long raw

大对象 LOB

BLOB:存储二进制数据

CLOB:存储大字符数据

NCLOB:外部数据

创建含有LOB列的基表:

sql>Create table employee(

name varchar(30),

id   int primary key,

photo blob,

resume clob) lob(photo,resume)

store as(tablespace users chunk 2048 cache);

说明:

Chunk 表示读取LOB列时的数据量。默认2K

经常查询LOB列时可以增加Cache,默认NoCache

2006-4-6

BFILE数据类型的使用方法:

A:创建相应的物理存储路径

B:使用Create directory创建目录与物理路径连接。

C:为用户授予Read on directory 权限

例如:D:\video

sql>Create or Replace directory video as 'd:\video';

sql>grant read on directory video to stud20;

sql>Create table b_video(

bname varchar2(20),

bid int primary key,

bvideo bfile);

sql>Insert into b_video

values('影象资料',1001,bfilename('video','2.bmp'));

查询基表原代码:

sql>select dbms_metadata.get_ddl('TABLE','B_VIDEO') from dual;  --输出SQL;

sql>select dbms_metadata.get_xml('TABLE','PRODUCT') from dual;  --输出SQL;

sql>set long 1000

三、创建临时表(Temporary Table)

sql>Create global temporary table temp_data(

name varchar2(20),

id int,

hdate date)

on commit delete rows 或

on commit preserve rows

其中,on commit delete rows:表示提交后数据被删除

on commit preserve rows:表示会话中断后被删除

sql>set autocommit on 自动提交

sql>set autocommit 5  5次事务

查询是否创建了临时表:

sql>select table_name,temporary from user_tables;

四、创建聚集(Clusters)

几个表有关连,经常做联合查询时,使用Clusters,比较节省空间,增加查询速度。

创建Cluster

sql>Create cluster prod_sales(p_id int);

创建主表,指定Cluster关键字

sql>Create table prod(

p_name varchar2(20),

p_id int primary key) cluster prod_sales(p_id);

创建子表,指定外键及Cluster关键字

sql>Create table sales(

sname varchar2(20),

p_id int,

constraint fk_p_id foreign key(p_id) references

prod(p_id)) cluster prod_sales(p_id);

sql>select extent_id,bytes,blocks,segment_name from user_extents; 查看表的存储空间

五、创建对象类型表(Objects)

创建对象类型:

sql>Create or Replace type emp_other as object(

emp_id number(7),

emp_name varchar2(20),

emp_sal number(7,2));

需要使用'/'来执行。

创建含有对象类型的基表:

sql>Create table e_info(

job varchar2(20),

hdate date,

other emp_other);

数据插入:

sql>Insert into e_info

values('工程师',sysdate,emp_other(1234,'李大力',1500));

数据查询:

sql>select job,hdate,p1.other.emp_name,p1.other.emp_sal

from e_info p1;

六、修改表结构

1、增加新列

sql>alter table product add(

p_list number(7) constraint uk_p_list unique,

p_no int);

2、删除列 (支持版本:Oracle8i以上版本)

sql>alter table product drop(p_list,p_no);

3、修改表名

sql>rename 原名 to 新名;

4、修改列名 (支持版本:Oracle9i 9.2.0以上)

sql>alter table prodctuct rename column p_name

to product_name;

5、修改列宽

sql>alter table product

modify(p_name varchar2(40));

要求整列为空,才可以从大到小修改列宽。

6、回收表中未使用空间

sql>alter table product deallocate unused keep 80k; ----回收表中部分未使用空间。

sql>alter table product deallocate unused; ----回收表中全部未使用空间。

表中未使用空间:delete from emp; 删除后不释放空间。

数据删除后产生未使用空间。

truncate table emp;倾空表,回收空间。

HWM(high water mark 水印)

查询表所占用空间大小:

sql>select sum(bytes),sum(blocks)

from user_extents

where segment_name='EMP';

sql>Create table payment as select ename,sal from emp;

sql>Insert into payment select * from payment;

七、创建序列(Sequences)

创建序列的语法:

sql>Create sequence 序列名

start with 起始编码

increment by 步长

maxvalue 终止编码;

sql>Create sequence id_code

start with 11111

increment by 1

maxvalue 9999999 cycle cache;

cycle 循环,Nocycle不循环

Nocache.

使用序列的方法:

id_code.currval  --取当前值

id_code.nextval  --取下一个值

首次使用时,应使用nextval.

sql>Create table icode(

code int primary key);

sql>Insert into icode values(id_code.nextval);

查询数据库中的序列:

sql>select sequence_name,increment_by,max_value

from user_sequences;

删除序列:

sql>drop sequence id_code;

八、数据库链路(Database Link)

数据库链路是分布式数据库中的一种数据库实体,通过链路可以实现数据的远程传输。

创建数据库链路的语法:

sql>Create database link 链路名 对方数据库的全局数据库名。(同名数据库不能建链路,同名数据库加域名可以建链路)

connect to 用户名 identified by 口令字

using '主机字符串';

sql>Create database link swora.us.oracle.com

connect to stud20 identified by stud20

using 'swora01';

数据库链路的使用:

sql>select * from tab@swora.us.oracle.com;

删除链路:

sql>drop database link swora.us.oracle.com;

查询数据链路:

sql>select db_link,username,password,host from user_db_links;

sql>column db_link format a20

sql>column host format a10

DDL操作不允许使用链路

使用数据库链路实现数据实时传输:

数据插入触发器:

sql>Create or Replace trigger Insert_dept

before insert on dept

for each row

Begin

insert into dept@swora.us.oracle.com

values(:new.deptno,:new.dname,:new.loc);

End Insert_dept;

查询错误:

sql>show error

查询触发器:

sql>select trigger_name from user_triggers;

查询触发器原代码:

sql>select trigger_body from user_triggers

where trigger_name='INSERT_DEPT';

sql>drop trigger 触发器名;

数据更新触发器:

sql>Create or Replace trigger Update_dept

before update on dept

for each row

Begin

update dept@swora.us.oracle.com

set deptno=:new.deptno,dname=:new.dname,loc=:new.loc

where deptno=:old.deptno and

dname=:old.dname   and

loc  =:old.loc;

End Update_dept;

数据删除触发器:

sql>Create or Replace trigger Delete_dept

before delete on dept

for each row

Begin

delete from dept@swora.us.oracle.com

where deptno=:old.deptno;

End Delete_dept;

使用数据库链路实现数据定时传输:

快照是从主节点传向辅节点,两个数据库要分主节点和辅节点。

创建快照(Snapshots)语法:

sql>Create snapshots 快照名

refresh 刷新方式

next    时间间隔

with parmary key

as select 子句:

语法说明:

刷新方式:  complete   ---完全刷新  比较主/副节点的表,不同的话,刷新

fast       ---快速刷新

force      ---强制刷新

时间间隔:  以天为单位

sysdate + 1/24 一小时加一次

Next_Day(trun(sysdate),'星期日')+22/24 每周日的22点

with parmary key: 要求传输的表要有主键

创建快照步骤:

A、授予用户创建快照权限(辅节点)

sql>grant create snapshot to 用户名; 需要系统管理员授权。

B、创建快照(辅节点)

C、创建快照日志(主节点)

sql>Create snapshot log on 表名;

sql>Create snapshot c_dept

refresh force

next sysdate +1/1440

with primary key

as select * from dept@swora.us.oracle.com;

sql>drop snapshot c_dept;

建立、删除日志要单独进行。

查找快照信息(辅节点查询):

sql>select name,master_owner,master,type,next,master_link

from user_snapshots;

其中:name  --快照名

master_owner ---主节点用户名

master       ---主节点表名

type:        --刷新方式

next:        --时间间隔

master_link  ---数据库链路名

创建公共数据库链路:

同名用户的对联。管理员创建,大家使用。

sql>create public database link swora.us.oracle.com

using 'swora01';

查询公共链路:

sql>select owner,db_link,username,host

from all_db_links;

九、创建视图(Views)

1、视图的特点

不存储数据

数据来源于基表

不能数据复制

在同一个表上可以建多个视图

2、创建视图的语法

sql>Create or Replace view 视图名 as select 子句

sql>Create or Replace view manager

as select * from emp

where job='MANAGER';

sql>select text from user_views

where view_name='MANAGER';

3、创建视图时的选项:

with read only      ---创建只读视图

sql>Create or Replace view manager

as select * from emp

where job='MANAGER' with read only;

with check option   ---在通过视图修改数据时,必须满足创建视图时where指出的条件。

sql>Create or Replace view part20

as select empno,ename,hiredate,deptno

from emp

where deptno=20 with check option;

sql>Insert into part20

values(1235,'李大力',sysdate,30);

此语句出错(视图 WITH CHECK OPTION 违反 where 子句)

sql>select * from part20;

4、为视图列取别名

试判断以下语句是否有错误?

sql>create or Replace view pay as

select ename,sal,sal*12 sal_year,sal+nvl(comm,0) sal_month

from emp;

sql>create or Replace view pay(c1,c2,c3,c4) as

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

from emp;

%,#,$,\,/ 非法字符

第四章   Oracle数据分区表         回目录

一、什么是数据分区表

数据分区就是把表划分为多个存储区域。在创建表结构时考虑分区方案,选取表中一个或多个列作为分区关键字,该关键字决定在哪些数据存储在哪些分区,所插入数据自动存储到相应分区。

二、创建分区表

sql>Create table c_employee(

name varchar2(20),

id number(7),

sal number(7,2)) partition by range(sal)

(partition p1 values less than(500) tablespace users,

partition p2 values less than(800) tablespace indx,

partition p3 values less than(1500) tablespace odm,

partition p4 values less than(maxvalue) tablespace tools);

不确定的数据存入p4。

查询表空间信息:

sql>select tablespace_name from dba_tablespaces;

其中,temp,undotbs1不得使用。

使用sql>c/100/200可以替换

三、分区表查询

sql>select * from c_employee;

sql>select * from c_employee partition(p1);

sql>Create table c_part2

as select * from c_employee partition(p2);

查询是否为分区表:

sql>select table_name,partitioned from user_tables;

查看分区表结构:

sql>select partition_name,high_value,tablespace_name

from user_tab_partitions

where table_name='C_EMPLOYEE';

2006-4-7

四、分区表结构的修改

1、删除分区

sql>alter table c_employee drop partition p3;

2、增加分区

如果有maxvalue区,则不能增加区,需要先删除,如果有数据就比较麻烦,所以一般不设置maxvalue区。

必须增加在最后一个区后面

sql>alter table c_employee add partition p3

values less than(1500) tablespace users;

3、分区数据移动:将分区数据从一个表空间移动到另外一个表空间,将结构和数据全部移动。

sql>alter table c_employee move partition p1

tablespace tools;

4、修改分区名称

sql>alter table c_employee rename partition p1 to part1;

5、分区的拆分(Split)在两个区之间增加区。

sql>alter table c_employee split partition p3

at(1000) into (partition p21,partition p31);

6、合并(Merge)必须向高的一方合并。

sql>alter table c_employee merge partitions p21,p31

into partition p3;

五、创建List分区表

用于数据不能比较大小的时候

sql>Create table list_prod(

pname varchar2(20),

pid int,

ploc varchar2(20))partition by list(ploc)

(partition p1 values('广东') tablespace users,

partition p2 values('河南') tablespace tools,

partition p3 values('陕西','河北') tablespace odm,

partition p4 values(null) tablespace indx,

partition p5 values(default) tablespace example);

null 没有产地

default 其它情况

List分区表的使用和上面的一样。

工具介绍

Oracle Management Server(Oracle管理服务器配置) 可以把网上的多个数据库放在Oracle上使用。

服务:机器名:1521:SID

SID实例名

Oracle Enterprise Manager Console

管理员:sysman

口令字:oem_temp (default)

第五章  Oracle权限设置                   回目录

一、Oralce权限分类

系统权限:系统限制用户在数据库中的操作权限(用户)

实体权限:某种权限用户对于其他用户实体的存取权限(实体)

二、系统权限的管理

1、系统权限的分类

DBA:权限组合,拥有全部特权,是系统最高权限,只有DBA才可以创建数据库

RESOURCE:拥有RESOURCE权限的用户可以登陆数据库。可以创建数据库实体,不可以创建数据库结构。

CONNECT:拥有CONNECT权限的用户可以登陆数据库。(会话权),不可以创建数据库实体。

2、系统权限的授权命令

sys/system:

sql>Create user acc01 identified by acc01;

sql>grant connect,resource to acc01;

查询用户拥有的权限:

sql>select * from user_role_privs;

ADM:是否允许权限传递

sql>select * from role_sys_privs;

sql>select * from dba_role_privs;

3、系统权限传递

sys/system:

sql>grant connect,resource to acc01 with admin option;

4、系统权限回收

sql>revoke connect,resource from acc01;

DBA权限不要轻易授权

系统权限之间无级联:授出权限可以跨级收回

实体权限之间有级联:收回一个全部收回,不能跨用户收取权限。

三、实体权限管理

1、实体权限分类

select,update,insert,delete,alter,index,execute,references,all.

2、实体权限授权命令

scott:

sql>grant select,update,delete on product to acc01;

sql>grant select,update,delete on product to public;  --授权给public

acc01:

sql>select * from scott.product;

查询用户创建的基表:

sql>select table_name from user_tables;

查询用户可以存取的基表:

sql>select owner,table_name from user_tables;

查询授出权限的表:

sql>select grantee,owner,table_name,privilege

from user_tab_privs;

3、实体权限传递:with grant option

scott:

sql>grant select,update,delete on emp

to acc01 with grant option;

acc01:

sql>grant select on scott.emp to acc02;

3、实体权限的回收:

scott:

sql>revoke select,update on emp from acc01;

DBA可以管理实体用户

四、同义词(Synonyms)

1、创建私有同义词:

acc01:

sql>select * from scott.emp;

sql>Create synonym emp

for scott.emp;

sql>select * from emp;

创建同义词代替数据链路

sql>select * from dept@swora.us.oracle.com;

sql>Create synonym y_dept

for dept@swora.us.oracle.com;

2、创建公共同义词:

由DBA创建,所有用户共同使用

语法:sql>Create public synonym 公共同义词名 for 代替项;

scott:

sql>Create table e_sal as select ename,sal from emp;

sql>grant select on e_sal to public;

system:

sql>Create public synonym e_sal for scott.e_sal;

查询私有同义词:

sql>select synonym_name ,table_owner,table_name,db_link

from user_synonyms;

sql>column synonym_name format a10;

sql>column db_link format a10;

查询公共同义词:

sql>select synonym_name ,table_owner,table_name,db_link

from dba_synonyms;

sql>column synonym_name format a10;

sql>column db_link format a10;

db_link:远程表

删除公共同义词:

sql>drop public synonym e_sal;   --管理员删除

删除私有同义词:

sql>drop synonym e_sal;          --用户删除

第六章     PL/SQL程序设计(Procedual Language)           回目录

一、PL/SQL概述

ROWTYPE  %rowtype 行类型

用于存储表中的一行记录

Declare

v_empno emp.empno%type:=&empno;

r emp%rowtype;

Begin

select * into r from emp where empno=v_empno;

dbms_output.put_line('姓名:'||r.ename||' |工资:'||r.sal||' |工作时间:'||r.hiredate);

End;

&:表示接收键盘输入。

打开屏幕打印开关:

SQL> set serveroutput on

Rocode:记录类型

Declare

v1 emp.empno%type:=&empno;

type r_record is record(

v1 varchar2(20),

v2 number(7,2),

v3 date);

r r_record;

Begin

select ename,sal,hiredate into r from emp

where empno=v1;

dbms_output.put_line('姓名:'||r.v1||' |工资:'||r.v2||' |工作时间:'||r.v3);

End;

Type: 表类型

Declare

v1 emp.empno%type:=&v1;

type t_emp is table of varchar2(20) index by binary_integer;

t1 t_emp;

v_i integer;

Begin

select 1 into v_i from dual;

select ename,sal into t1(v_i),t1(v_i+1) from emp where empno=v1;

dbms_output.put_line('编码:'||v1||' |姓名:'||t1(v_i)||' |工资:'||t1(v_i+1));

End;

二、条件判断语句

Declare

v1 emp.empno%type:=&empno;

v2 number(7,2);

v3 varchar2(20);

Begin

select sal,ename into v2,v3 from emp

where empno=v1;

if v2<2000 then

Begin

update emp set sal=sal+100

where empno=v1;

dbms_output.put_line('员工:'||v3||' 工资已经增加!');

End;

else dbms_output.put_line('员工:'||v3||' 工资已经超过规定值,不增加!');

end if;

End;

三、循环语句

Declare

i int :=0;

Begin

loop

i:=i+1;

dbms_output.put_line('i的当前值为i='||i);

exit when i=10;

end loop;

End;

Declare

i int :=0;

Begin

while i<10 loop

i:=i+1;

dbms_output.put_line('i的当前值为i='||i);

end loop;

End;

Declare

i int :=0;

Begin

for i in 1..10 loop

dbms_output.put_line('i的当前值为i='||i);

end loop;

End;

四、光标

查询结果一对多(多条记录)的情况,需要光标。

Declare

v1 number(4);

v2 varchar2(20);

v3 number(7,2);

cursor c is select empno,ename,sal from emp;

Begin

open c;

loop

fetch c into v1,v2,v3;

if v3<3000 then

Begin

update emp set sal=sal+100 where empno=v1;

dbms_output.put_line(v2||'工资已经增加!');

End;

end if;

exit when c%notfound;

end loop;

close c;

End;

题目:

请将EMP表中工资最高的前几名员工姓名及工资值查询出来,存储到基表topsal中。要求:

1、基表topsal结构如下

sql>Create table topsal(

name varchar2(20),

sal number(7,2));

2、员工个数由键盘输入确定。

Declare

i  int:=&i;

j  int :=0;

v2 varchar2(20);

v3 number(7,2);

cursor c is select ename,sal from emp order by nvl(sal,0) DESC;

Begin

open c;

loop

j:=j+1;

fetch c into v2,v3;

insert into topsal

values (v2,v3);

exit when (i=j or c%notfound);

end loop;

close c;

End;

空值永远在前面排。

光标变量使用方法:

Declare

type row_cursor is ref cursor;

c row_cursor;

r emp%rowtype;

Begin

open c for select * from emp;

loop

fetch c into r;

dbms_output.put_line(r.ename||'--'||r.sal||'--'||r.hiredate);

if c%notfound then exit;

end if;

end loop;

close c;

End;

用于光标的for循环语句:

Declare

cursor c is select empno,ename,sal from emp;

Begin

for i in c loop

dbms_output.put_line(i.empno||'--'||i.ename||'--'||i.sal);

end loop;

End;

Declare

cursor c is select ename,sal from emp

for update of sal nowait; --锁住

Begin

for i IN c loop

if i.sal<2000 then

Begin

update emp set sal=i.sal +100

where current of c;  --光标当前行

dbms_output.put_line('员工:'||i.ename||'已经增加工资!');

End;

end if;

end loop;

End;

Declare

v_empno emp.empno%type=:=&empno;

Begin

delete from emp

where empno=v_empno;

if sql%NOTFOUND then

dbms_output.put_line('删除失败,无编码为'||v_empno||'的员工!');

else

dbms_output.putline('成功删除编码为'||v_empno||'的员工!');

end if;

End;

2006-4-8

五、例外处理(Exception)

Exception

when NO_DATA_FOUND then

dbms_output.put_line('无这样的员工');

when TOO_MANY_ROWS then

dbms_output.put_line('查询结果出现多行,请定义光标!');

when VALUE_ERRORS then

dbms_output.put_line('员工编码为4位数!');

when INVALID_NUMBER then

dbms_output.put_line('员工位数!');

when OTHERS then

dbms_output.put_line('程序运行出错!');

有例外时,附值要在Begin后。

Declare

v1 emp.empno%type;

v2 number(7,2);

v3 varchar2(20);

Begin

v1:=&empno;

select sal,ename into v2,v3 from emp

where empno=v1;

if v2<2000 then

Begin

update emp set sal=sal+100

where empno=v1;

dbms_output.put_line('员工:'||v3||' 工资已经增加!');

End;

else dbms_output.put_line('员工:'||v3||' 工资已经超过规定值,不增加!');

end if;

Exception

when NO_DATA_FOUND then

dbms_output.put_line('无这样的员工');

when TOO_MANY_ROWS then

dbms_output.put_line('查询结果出现多行,请定义光标!');

when VALUE_ERROR then

dbms_output.put_line('员工编码为4位数!');

when INVALID_NUMBER then

dbms_output.put_line('NUMBER型非法!');

when OTHERS then

dbms_output.put_line('程序运行出错!');

End;

用户自定义例外的使用方法:

A、定义例外

B、使用raise引起

C、作为Exception统一使用

试指出以下语句是否有错误?

错误用法:

Declare

v1 emp.empno%type :=&empno;

Begin

delete from emp where empno=v1;

Exception

when SQL%NOTFOUND then  --SQL%NOTFOUND是属性,不能作为例外,但开始使用用户自定义例外。

dbms_output.put_line('为无编码'||v1||'的员工!');

End;

正确用法:

Declare

v1 emp.empno%type;

if_delete exception;

Begin

v1:=&empno;

delete from emp where empno=v1;

if SQL%NOTFOUND then raise if_delete;

end if;

Exception

when if_delete then

dbms_output.put_line('为无编码'||v1||'的员工!');

when VALUE_ERROR then

dbms_output.put_line('员工编码为4位数!');

when others then

dbms_output.put_line('为无编码'||v1||'的员工!');

End;

第七章  存储过程与函数                        回目录

一、什么存储过程(函数)

存储过程(函数)就是把一个PL/SQL程序块存到数据库中,作为一个数据库实体,可以在其他PL/SQL程序、过程中调用。

二、存储过程的调用:

在SQL*PLUS中调用

sql>exec 过程名;

在PL/SQL及过程中调用

过程名;

三、创建存储过程的语法:

IN

Create or Replace procedure DelEmp(v1 number) is

Begin

delete from emp where empno=v1;

if sql%found then

dbms_output.put_line('编码:'||v1||'的员工成功删除!');

else

dbms_output.put_line('无编码为:'||v1||'的员工!');

end if;

End DelEmp;

在SQL*PLUS中调用存储过程:

sql>exec EdlEmp(7788);

在PL/SQL中调用:

Begin

DelEmp(7923);

DelEmp(7369);

End;

查询存储过程:

sql>select text from user_source

where name='DELEMP';

OUT

Create or Replace Procedure QueryEmp(v1 number,v2 out varchar2,v3 out number)

is

Begin

select ename,sal into v2,v3 from emp

where empno=v1;

Exception

when NO_DATA_FOUND then

dbms_output.put_line('无编码为:'||v1||'的员工!');

End QueryEmp;

调用方法:

Declare

v1 varchar2(20);

v2  number;

Begin

QueryEmp(7369,v1,v2);

dbms_output.put_line(v1||'=='||v2);

End;

IN OUT

Create or Replace Procedure ChangeName(

v_name in out varchar2) is

Begin

v_name:=SubStr(v_name,1,3);

End ChangeName;

调用方法:

Declare

v_name varchar2(20);

Begin

v_name:='SMITH';

ChangeName(v_name);

dbms_output.put_line(v_name);

End;

存储过程权限管理:

sql>grant execute on DelEmp to 用户名; ---使用的时候要加用户名前缀。

删除存储过程:

sql>drop procedure 过程名;

收回权限:

sql>revoke execute on DelEmp from 用户名;

查询存储过程权限:

sql>select owner,name,type

from all_source

where owner='SCOTT'

AND type='PROCEDURE';

四、函数(Function)

Create or Replace Function GetSal(v1 number)

return number

is

v_sal emp.sal%type;

Begin

select sal into v_sal from emp where empno=v1;

return v_sal;

End GetSal;

函数的调用:

sql>select GetSal(7369) from dual;

sql>exec dbms_output.put_line(GetSal(7369));

题目: 试编写一个n!的函数。

Create or Replace Function fn(n number)

return number

is

v_h number;

v_i number;

Begin

v_i:=1;

v_h:=1;

for v_i in 1..n loop

v_h:=v_h*v_i;

end loop;

return v_h;

End A1;

Create or Replace Function fn(n number)

return number

is

Begin

if n=1 then

return 1;

else

return n*fn(n -1);

end if;

End A2;

五、包(Package)

1、什么是包

把一些相关的存储过程、函数、光标、例外等组合在一起形成包,包由包的说明及包体组成,定义在包的说明部分的元素

叫做公共元素,定义在包体部分的元素叫私有元素。

2、包的优点

规范化程序设计

便于过程及函数的管理:整个包的授权只需一次完成

包作为一个整体一次性调入内存,减少I/O

3、创建包的语法

删除包:

sql>drop package 包名;

sql>drop package body 包体;

第八章  动态SQL                       回目录

一、什么是动态SQL

在应用程序中动态创建基表、视图、索引等

动态生成SQL、DML语句

在PL/SQL中使用DDL语句

二、动态SQL应用实例

1、动态创建基表:

Declare

v_table varchar2(20):='&v_table';  --在此加单引号,输入的时候就不用再加了。

stm varchar2(200);

Begin

stm:='Create table '||v_table||'(

id number(7),

name varchar2(20),

sal number(7,2))';

execute immediate stm;

End;

2、动态删除基表

Declare

v_table varchar2(20):='&v_table';

stm varchar2(200);

Begin

stm:='Drop table '||v_table;

execute immediate stm;

dbms_output.put_line('表'||v_table||'已经被删除!');

End;

3、动态生成SQL

Create or Replace procedure TableRows(

table_name varchar2,

wherestr varchar2:=null) is

rownums number;

stm varchar2(200);

Begin

stm:='select count(*) from '||table_name||' where '||nvl(wherestr,'2=2');

execute immediate stm into rownums;

dbms_output.put_line('表'||table_name||'有'||rownums||'行符合要求');

End TableRows;

sql>exec TableRows('EMP')

sql>exec TableRows('EMP','sal>1500')

sql>exec TableRows('EMP','deptno=10')

4、动态生成QL语句

多行查询语句:使用光标

Create or Replace procedure DisEmp(

wherestr varchar2:=null)

is

type c is ref cursor;

r_c c;

v_empno emp.empno%type;

v_ename emp.ename%type;

v_job emp.job%type;

stm varchar2(200);

Begin

stm:='select empno,ename,job from emp where '||nvl(wherestr,'2=2');

open r_c for stm;

loop

fetch r_c into v_empno,v_ename,v_job;

exit when r_c%notfound;

dbms_output.put_line(v_empno||'\'||v_ename||'\'||v_job);

end loop;

close r_c;

End;

sql>exec DisEmp('sal>1500')

sql>exec DisEmp

Create or Replace procedure DisEmp(

wherestr varchar2:=null)

is

type c is ref cursor;

r_c c;

r1 emp%rowtype;

stm varchar2(200);

Begin

stm:='select * from emp where '||nvl(wherestr,'2=2');

open r_c for stm;

loop

fetch r_c into r1;

exit when r_c%notfound;

dbms_output.put_line(r1.empno||'\'||r1.ename||'\'||r1.job);

end loop;

close r_c;

End;

4、动态生成DML语句

Create or Replace Procedure UpdateTable(

table_name in varchar2,

column_name in varchar2,

column_value in varchar2,

wherestr in varchar2:=null) is

stm varchar2(200);

Begin

stm:='update '||table_name||' set '||column_name||'='||column_value||' where '||nvl(wherestr,'1=1');

execute immediate stm;

dbms_output.put_line('更新行数:'||sql%rowcount);

End UpdateTable;

sql>exec UpdateTable('EMP','sal',2000,'sal<1000');

触发器:补充

语句级触发器:只执行一次。 --for each row  --行级

Create or Replace trigger ChangeEmp

before insert or update or delete on emp

Begin

if(to_char(sysdate,'dy') in ('星期六','星期日') or

to_number(to_char(sysdate,'hh24'))

not between 8 and 18)

then

Raise_Application_Error(-20500,'非工作时间,不得更改数据!');

end if;

End ChangeEmp;

Oracle错误代码范围:ORA-20000 至 ORA-2009999;

系统事件触发器:

系统事件指:after logon,before logoff,after startup,before shutdown

sysdba:

sql>Create table log_tab(

user_name varchar2(20),

log date,

log_info varchar2(20));

sql>Create or Replace trigger logon_trigger

after logon on database

Begin

insert into log_tab values(user,sysdate,'成功登陆');

End;

sql>Create or Replace trigger logoff_tirgger

before logoff on database

Begin

insert into log_tab values(user,sysdate,'退出系统');

End;

DDL触发器:

触发事件: Create,Alter,Drop

sql>Create table ddl_tab(

user_name varchar2(20),

ddl_date date,

ddl_info varchar2(20));

sql>Create or Replace trigger Create_trigger

before create on database

begin

insert into ddl_tab values(user,sysdate,'创建基表');

End;

sql>Create or Replace trigger Alter_trigger

before alter on database

begin

insert into ddl_tab values(user,sysdate,'修改基表结构');

End;

sql>Create or Replace trigger Drop_trigger

before Drop on database

begin

insert into ddl_tab values(user,sysdate,'删除基表');

End;

2006-4-9

(DBA)(Database Administrator)

Oracle9i 数据库体系结构

物理结构

逻辑结构

内存结构

进程结构

第二部分  体系结构/数据库管理                   回目录

第一章 Oracle9i 体系结构与物理结构管理

一、数据库物理结构

数据库是由构成数据库的操作文件所组成。

c:\oracle\oradata\db_name\*.*         --windows 安装时的选择

/u01/app/oracle/oradata/db_name/*.*   --unix

每一个数据库物理结构文件包括:数据文件、日志文件、控制文件及参数文件。

二、数据文件管理(Data Files)

存储数据库数据的文件

查询数据文件信息:

sql>select bytes,blocks,file_name

from dba_data_files;

查看临时文件信息:

sql>select bytes,blocks,file_name

from dba_temp_files;

Oracle数据文件不显示数据大小,只显示空间大小。

查看空闲空间大小:

sql>select tablespace_name,sum(bytes)

from dba_free_space

group by rollup(tablespace_name);

查看临时表空间空闲空间

sql>select * from v$temp_space_header;  ---Oracle9i

数据块(Data Blocks):db_block_size=2k~32k

(2k,4k,8k,16k,32k)

默认值如下:

Oracle7,Oracle8,Oracle8i 8.1.5           2k 2048

Oracle8i 8.1.6/8.17                     8k 8192

Oracle9i 9.0.1                         4k 4096

Oracle9i 9.2.0                         8k 8192

Oracle10g                            8k 8192

查询数据块大小:

sql>show parameter db_block_size;

A、修改数据文件大小

sql>alter database datafile '数据文件名及路径'

resize xxM;

$df -k   --unix下看空间大小

sql>alter database datafile 'D:\ORACLE\ORADATA\HF\SYSTEM01.DBF'

resize 500M;

B、数据文件自动扩展属性(Autoextend)

查询数据文件自动扩展属性

sql>select bytes,autoextensible,maxbytes,file_name

from dba_data_files;

修改数据库自动扩展属性

sql>alter database datafile '数据文件名及路径'

autoextend on;   ---打开数据文件自动扩展属性。

sql>alter database datafile '数据文件名及路径'

autoextend off;  ---关闭数据文件自动扩展属性。

设置数据文件每次扩展大小:

sql>alter database datafile "数据文件名及路径'

autoextend on next 100M maxsize 2000m;  --unlimited 无限

sql>select bytes,increment_by,file_name

from dba_data_files;

create table sa(

s1 char(20)) storage(initial 80m) tablespace users; ---空表初始80m.

三、日志文件管理(Redo Log Files)

存储数据库修改前后信息。用于数据库恢复。--必须要有备份和日志。

每个数据库实例至少有两个日志文件组,每组有一个或多个日志成员。

sql>select log_mode from v$database;

sql>archive log list;

查询在线日志信息:

sql>select * from v$log;

查询日志文件信息:

sql>select * from v$logfile;

查询归档日志:

sql>select * from v$archived_log; 在日志切换时,写到磁盘或磁带上的日志。

查询历史日志:

sql>select * from v$log_history;

sql>alter session set nls_date_format='yyyy.mm.dd h24:mi:ss';

日志文件不宜太小,一般几十兆即可。

日志成员最少要有2个,9i里面缺省最多5个。

DBA强制日志切换命令:

sql>alter system switch logfile;

A、增加日志文件组命令:

sql>alter database add logfile group n

('第一个日志成员文件名及路径',

'第二个日志成员文件名及路径',,,) size xxM;

sql>alter database add logfile group 4(

'd:\oracle\oradata\hf\redo41.log',

'd:\oracle\oradata\hf\redo42.log')

size 10m;

B、删除日志文件组:

sql>alter database drop logfile group n;

注意:当前组Current,Active组不得删除

数据库只有两个组时,不得删除

先逻辑删除,后物理删除

sql>select * from v$logfile;

C、增加日志成员文件:

sql>alter database add logfile member

'日志成员文件名及路径','日志成员文件名及路径' to group n;

sql>alter database add logfiel group 1

('日志成员文件名及路径') reuse;     --逻辑文件拿掉了,物理文件未删除。

D、删除日志成员文件:

sql>alter database drop logfile member

'日志成员文件名及路径';

注意:Current组中成员不得删除

组中只有一个成员时,不得删除成员

先逻辑删除,后物理删除。

题目:请将系统默认安装产生的3个日志文件的大小全部由100M改为1M。

四、参数文件

在Oracle9i数据库中,可以使用两个不同类型的参数文件,一个为文本类型Pfile,一个为服务器类型Spfile。

Spfile默认存储路径

d:\oralce\ora92\database\spfileSID.ora  --windows

/u01/app/oracle/product/9.2.0/dbs/spfileSID.ora  ---unix

Spfile修改方式:

sql>alter system set db_cache_size=8m

comment='Changed By TYC,2006.04.09';

Pfile默认存储路径

d:\oralce\admin\db_name\pfile\init.ora        --windows

/u01/app/oracle/admin/db_name/pfile/initSID.ora  --Unix

建立连接关系:

创建initSID.ora

d:\oracle\ora92\database\initSID.ora=>

增加下面一行:

ifile='d:/oracle/admin/db_name/pfile/init.ora'

Nuinx:

/u01/app/oracle/product/9.2.0/dbs/initSID.ora

ln:

/u01/app/oracle/admin/db_name/pfile/initSID.ora

两个参数文件同时存在时,系统启动时,优先使用Spfile,如果未找到Spfile,则以Pfile启动。

查询数据库所使用的参数文件:

sql>show parameter spfile;

两个参数文件可以相互转换

sql>Create spfile from pfile;

sql>Create pfile from spfile;

c:\oradim -startup -sid hf       ---在操作系统中启动数据库

五、控制文件(Control Files)

控制文件用于存储数据库结构

查询警告文件信息,了解修改数据库结构的操作:

D:\oracle\admin\db_name\bdump\alert_SID.log

控制文件的主要信息如下:

数据库名称

数据库创建的时间

数据库中全部日志文件及路径、全部数据文件及路径

数据库恢复时所需同步信息

查询数据文件同步号:

sql>select file#,checkpoint_change#,name

from v$datafile;

查询控制文件同步号:

sql>select checkpoint_change# from v$database;

控制文件镜象方法:

A、关闭数据库

B、复制控制文件

C、改参数文件

D、重启数据库

查看控制文件:

select * from v$controlfile;

2006-4-10     第二章  Oracle9i逻辑结构管理                        回目录

数据库逻辑结构组成:

表空间(Tablespaces)

数据段: 存储基表数据的段 --私有

/

段(Segments)  ------ 索引段: 存储索引数据的段 --私有

\

临时段:用于排序   ---公有

\

回退段:用于事务的回退 --- 公有

区(Extents)

数据块(Data Blocks)

一、表空间(Tablespaces)

控制数据库数据磁盘分配

表空间与数据文件相对应,表空间大小等于构成该表空间的所有数据文件大小和。

查询表空间与数据文件对应关系:

sql>select tablespace_name,bytes,file_name

from dba_data_files;

表空间属性:read only,read write,online,offline

修改表空间:

sql>alter tablespace users read only;

sql>select tablespace_name,status

from dba_tablespaces;

其中:System,Undotbs1,Temp 不得设置为read only,offilne

二、段(Segments)

A、数据段:存储基表数据的段。

查询表与该表的表空间对应关系:

sql>select table_name,tablespace_name

from user_tables;

将表从一个表空间移动到另外一个表空间:

sql>alter table dept move tablespace users;

创建基表时,可以指定表空间:

sql>Create table t_data(

tname varchar2(20),

tdate date) tablespace users;

sql>select username,default_tablespace

from dba_users;

B、索引段:存储索引数据的段。

查询索引与存储该索引表空间对应关系:

sql>select index_name,table_name,tablespace_name

from user_indexes;

在创建索引时,可以指定表空间:

sql>Create index d_dname on dept(dname)

tablespace indx;

C、临时段:用于排序

Oracle9i 后,只能使用临时表空间来排序。

查询临时表空间:

sql>select tablespace_name,contents

from dba_tablespaces;

查询用户所使用的临时表空间:

sql>select username,temporary_tablespace

from dba_users;

D、回退段:用于事务管理

Oracle9i后由Oracle自己管理。

查询回退段信息:

sql>select * from dba_rollback_segs;

oralce 的事务由事务终结来分,Transaction -----> 回退段。 如:

sql>delete from --

sql>update ---

sql>create table ---

sql>insert ---

sql>alter ---

以上有两个事务,设置两个回退段。

SavePoint 点:

….

SavePoint a;

rollback to a;

检控回退段的状态:

sql>select * from v$rollstat;

sql>select * from v$rollname;

三、区(Extents)

区是磁盘空间分配最小单位。一个段包含多个区。

查询段与区的关系:

sql>select extent_id,bytes,blocks

from user_extents

where segment_name='PAYMENT';

区大小设置参数(磁盘存储参数):

Initial:初始区大小  8.0(2k) 8i(5*db_block_size) 9i(64k)

Next:增长区大小     8.0(2k) 8i(5*db_block_size) 9i(64k)

Minextents:区最小个数  1

Maxextents:区最大个数  8.0(121) 8i(505) 9i(unlimit)

Pctincrease:区增长百分比  8.0(50) 8i(50) 9i(0)

sql>Create table sales(

s1 char(20),

s2 char(20));

如果磁盘无限大,这张表能存多少数据?

这个表的缺省参数:Storage(initial       64k,

next           64k,

minextents     1,

maxextents     unlimit,

pctincrease    0);

sql>Create table sales(

s1 char(20),

s2 char(20))storage(initial 200k next 400k minextents 2 maxextents 20000 prtincrrease 0);

查询可以用于以下对象

表空间

回退段

索引

存储参数优先原则:实体级参数>表空间级参数

四、数据块(Data Blocks)

数据块是数据文件存储空间单位,是I/O最小单位

在Oracle9i中,可以使用标准数据块及非标准数据块,其大小为 2k,4k,8k,16k,32k。

标准块大小由参数db_block_size设置,非标准块在创建表空间时,由参数blocksize设置。

标准块用于系统表空间及临时表空间、非标准块数据块用于用户数据表空间。

查询表空间大小:

sql>select tablespace_name,block_size

from dba_tablespaces;

第三章  Oracle9i 内存结构管理                       回目录

一、SGA(System Global Area)系统全局区

1、数据缓冲区(Database Buffer Cache):存储由磁盘数据文件读入的数据,全体用户共同使用。

数据缓冲区的参数:

db_block_buffers (Oracle8i/8/7)

db_cache_size    (Oracle9i/10g)

非标准块缓冲区设置参数:db_nk_cache_size(其中:n=2,4,8,16,32)

在数据库中,可以同时设置多个数据缓冲区。例如:

db_cache_size=128m

db_2k_cache_size=64m

db_2k_cache_size=32m

试判断以下设置是否正确:

...

db_block_size=8k      --标准块设置

db_4k_cache_size=8m

db_cache_size=128m

db_8k_cache_size=16m (x) 和标准块设置重复

db_16k_cache_size=64m

...

oracle资源占用以库为单位,一个库要占用资源50-57%,所以一台机子最好只装一个数据库。

解决方法:同一个数据库,多个表空间。 一个实例相当于一个数据库,oracle的表空间级相当于sqlserver的数据库级。

可以在表空间级定义用户,密码。

2、共享池(Shared Pool)

共享池用于对SQL、PL/SQL程序进行语法分析及编译。

共享池大小设置参数:shared_pool_size

3、日志缓冲区(Redo Log Buffer)

存储数据库修改信息。

在日志缓冲区写满时,由LGWR(日志写入程序)写入磁盘日志文件组。

日志缓冲区大小设置:log_buffer

查询日志缓冲区大小:

sql>show parameter log_buffer

显示SGA区大小:

sql>show sga

sql>show parameter sga_max_size

sql>show parameter db

sql>show parameter log

sql>show parameter

sql>select * from v$sga;

sql>select * from v$sgastat;

二、PGA(rogram Global Area)

程序全局区用于变量及程序设计

程序全局区设置参数:pga_aggregate_target

三、SORT AREA:排序区:

用于order by,group by ,distinct等排序

排序区大小设置参数:sort_area_size

内存使用完后,ORALCE使用磁盘临时空间,会造成临时空间的增长。

四、LARGE POOL大池:

用于Rman数据库备份工具。

大池设置参数:large_pool_size

五、JAVA POOL:

用于Java语言

设置参数:java_pool_size

第四章  Oralce9i实例及进程结构            回目录

一、什么是Oralce实例

每一个运行的数据库都与一个实例相联系。数据库启动时将分配SGA并启动后台数据库进程。该SGA与后台进程合成Instance.

Unix 下设置实例方法:

$CRACLE_SID=HF

$export ORACLE_SID

Windows下设置实例方法:

c:\>set oracle_sid=hf

二、Oracle进程结构

用户进程

/

多进程 - 服务器进程

/       \

Oracle 主要进程           后台进程

\

单进程

查询后台进程信息:

sql>select name,description

from v$bgprocess;

三、用户进程和服务器进程

CBO (Cost_Based optionmizer)基于成本的规划器

/

执行计划

\

RBO (rule_Based optionmizer)基于规则的规划器

Oralce 的优化 -- 减少分析和编译

四、后台进程

A、DBWR 数据写入进程(Database Writer)

将数据由数据缓冲区写入磁盘数据文件。

采取LRU(least Recently Used)最近最少使用原则,将最近数据保留在内存,以减少I/O操作。

DBWR进程设置参数:

db_writer_processes=1~10 (Oracle8i)

=1~20 (Oracle9i/10g)

dbwr_io_salvers

B、LGWR

C、ARCH:归档进程。在日志切换时,将日志信息写入磁盘或磁带,用于数据库恢复。

ARCH进程设置参数:log_archive_start=ture|false

默认:false

sql>show log_archive_start

D、CKPT:检验点进程(checkpoint)

DBA强制产生检验点命令:

sql>alter system checkpoint;

sql>show parameter log_checkpoint_timeout

sql>show parameter log_checkpoint_interval

第五章 Oracle9i表空间管理                     回目录

一、Oracle9i表空间概述

查询数据库中的碎片:

sql>select * from dba_free_space;

二、表空间分类

1、按照表空间中区的管理方式不同,表空间分为数据字典管理类型及本地化管理类型。

查询表空间中区的管理方式:

sql>select tablespace_name,extent_management,allocation_type

from dba_tablespaces;

其中:   UNIFORM --每个区的大小一样。

SYSTEM  --每个区有数据库管理,动态分配。

2006-4-11

2、在数据字典管理表空间中,区的大小由参数initial,next,minextents,maxextents,pctincrease设置。

在本地化管理表空间中区的管理分为uniform及autoallocate两种。

3、数据字典管理表空间主要用于Oracle8i及之前的数据库;本地化管理表空间主要用于Oracle9i及以后版本数据库中。

三、创建数据字典管理表空间(Oracle7/8/8i)

sql>Create tablespace s_date datafile

'd:\oracle\oradata\ora8i\s_data01.dbf' size 100m

default storage (initial 100k

next    100k

minextents 1

maxextens 2000

pctincrease 0);

四、创建本地化管理表空间(Oracle8i/9i/10g)

1、Uniform:区大小一律相同

sql>Create tablespace product datafile

'd:\oracle\oradata\hf\prod01.dbf' size 100m

autoextend on next 100m maxsize 2000m,

'd:\oracle\oradata\hf\prod02.dbf' size 100m

autoextend on next 100m maxsize 2000m

extent management local uniform size 100k;

查询表空间情况:

sql>select tablespace_name,extent_management,allocation_type

from dba_tablespaces;

sql>select tablespace_name,initial_extent,next_extent,min_extents,max_extents,pct_increase

from dba_tablespaces;

删除表空间:

sql>drop tablespace product including contents and datafiles;

如果表是空的可以直接删除:

sql>drop tablespace product including contents;  (Oracle8i只能这样写,并手工删除文件)

2、Autoallocate:表空间中区的大小由系统自动动态分配

sql>Create tablespace account datafile

'd:\oracle\oradata\hf\acc01.dbf' size 100m,

'd:\oracle\oradata\hf\acc02.dbf' size 100m

extent management local autoallocate;

sql>select maxbytes,file_name,bytes,tablespace_name

from dba_data_files;

五、修改表空间:

为表空间增加数据文件

sql>alter tablespace account add datafile

'd:\oracle\oradata\hf\acc03.dbf' size 100m

autoextend on next 100m maxsize 2000m;

数据文件移动:将数据文件从一个磁盘移动到另一个磁盘;

移动步骤:

A、将表空间设置为offline

sql>alter tablespace account offline;

B、物理移动

C、逻辑移动

sql>alter tablespace account rename datafile

'原数据文件名及路径' to '目标数据文件名及路径';

D、将表空间设置为online

sql>alter tablespace account online;

sql>startup restrict  --数据库以限制方式运行

sql>grant restricted session to 指定用户;

注意:System,undotbs1,temp数据文件不得移动

六、创建Undo表空间(撤消表空间)

sql>Create undo tablespace undotbs datafile

'd:\oracle\oradata\hf\undo01.dbf' size 100m

autoextend on next 100m maxsize unlimited

extent management local autoallocate;

设置参数:undo_tablespace=undotbs

重新启动数据库。

第六章   Oralce9i数据库用户管理                  回目录

二、创建资源限制文件(Profile)

sql>alter system set resource_limit=true;

创建资源限制文件:

sql>Create profile acc limit

failed_login_attempts 2

password_lock_time 1

sessions_per_user 2

idle_time 2;

三、创建用户:

sql>Create user acc03 identified by acc03

default tablespace users

temporary tablespace temp

profile acc

quota 50m on users;  --如果不限制,这行不要

sql>grant connect,resource to acc03;

为用户解锁:

sql>alter user acc03 account unlock;

四、修改用户:

修改口令字:

sql>alter user acc03 indentified by '123';

修改用户缺省表空间

sql>alter user acc03 default tablespace example;

取消资源限制:

sql>alter user acc03 profile default;

取消空间使用限制

sql>alter user acc03 quota unlimited on users;

五、删除用户

sql>drop user acc03 | cascade;    --cascade用在此用户有实体。

第七章 Oracle9i数据库备份与恢复                回目录

一、数据库归档模式

二、数据库归档模式的配置

设置参数:

log_archive_start=true

log_archive_dest=目录名

log_archive_format=%t-%s.arc     --日志存储格式%t线程号 %s日志号

log_archive_duplex_dest=镜像目录名

sql>shutodwn immediate

sql>startup mount       --mount只打开控制文件,不打开数据库文件。

sql>alter database archivelog;

sql>alter database open;

sql>select log_mode from v$database;

sql>archive log list

sql>alter system switch logfile

三、物理备份

1、完全数据库脱机备份(ARCHIVELOG/NOARCHIVELOG)

2、联机部分数据库备份(ARCHIVELOG)

A、确认数据库运行在ARCHIVELOG模式

B、设置要备份的表空间为备份状态

sql>alter tablespace 表空间 begin backup;

C、操作系统备份相应的数据文件

D、设表空间结束标志:

sql>alter tablespace 表空间名 end backup;

begin 和 end 为了下次从哪里恢复而做的标记。期间的数据不保存。

sql>Create tablespace account datafile

'd:\oracle\oradata\hf\acc01.dbf' size 10m;

sql>alter tablespace account begin backup;

sql>alter tablespace account end backup;

sql>Create table account(

s1 char(20)) tablespace account;

sql>insert into account values('计算技术');

sql>insert into account select * from account;

数据文件恢复命令:

sql>alter database datafile '数据文件名及路径'; --日志自动读取

sql>recover datafile '数据文件名及路径';  --交互式,可以输路径

sql>alter database open;

基于时间的数据库恢复:

sql>alter database recover database until time '2006-04-11 13:00:00';

将数据库向回倒。

四、逻辑备份

c:\>exp scott/tiger tables=(dept,emp) file=d:1  --表方式卸出

c:\>exp scott/tiger file=d:\f2  --用户方式

c:\>exp system/manager full=y file =d:\f3  --全部数据库方式

其他关键字:

C:\>exp scott/tiger direct=y file =d:\f2  --直接路径卸出,不经过内存,直接从文件卸出,适合大表。

C:\>exp scoot/tiger tables=(emp) query=\"where sal>1500\" file=d:\f2 --条件卸出

C:\>exp system/manager full=y filesize=100m  --限制卸出文件大小

C:\>exp system/manager full=y inctype=complete  --为增量设基准

C:\>exp system/manager full=y inctype=incremental   --增量卸出

实际中以物理备份为好,当需要数据迁移时,用逻辑备份。逻辑备份不许要日志,但速度较慢。

五、Rman恢复管理器

Unix中创建数据库的图形界面工具:

$dbca (Oracle9i/10g)

1、创建恢复目录

创建Rman数据库

创建Rman用户

sql>Create user rman identified by rman

default tablespace users

temporary tablespace temp;

sql>grant connect,resource,recovery_catalog_owner  to rman;

c:\>set oracle_sid=rman  --确定进rman库

因为oracle为rman库默认建立的rman用户,限制太多。

所以删除默认rman用户,自己建立用户。

sql>drop user rman cascade;

创建用户,授权给新用户。

创建恢复目录

c:\>set oracle_sid=rman

c:\>rman catalog rman/rman

RMAN>Create catalog; (删除命令:drop catalog) 在rman中建表,

c:\rman catalog rman/rman

2、将Rman连接到目标数据库

c:\>set oracle_sid=hf

c:\>rman target sys/abcd catalog rman/rman@rman --target表示目标库,catalog表示rman库,@表示连接到rman上

注册数据库:在Rman恢复目录中写入目标库信息。

RMAN>register database;

>report schema;  应该显示目标数据库中的表空间和数据文件,Rman配置成功。

3、使用Rman备份数据库

COPY:复制文件(数据文件和控制文件)只能copy到磁盘。

RMAN>copy datafile 9 to 'c:\oracle\back\9.cf';

显示备份文件信息:

RMAN>list copy of datafile 9;

备份控制文件:

RMAN>copy current controlfile to 'c:\oracle\back\control.cf';

RMAN>list copy of controlfile;

删除备份文件:

RMAN>delete copy of datafile 9;

RMAN>delete copy of controlfile;

复制多个文件:

RMAN>run {

copy

datafile 9 to 'c:\oralce\back\9.cf,

datafile 8 to 'c:\oracle\back\8.cf,

current controlfile to 'c:\oracle\back\control.cf';

}

RMAN>host "cls";

BACKUP:可以备份数据库、表空间、数据文件,可以备份到磁盘和磁带,并对备份文件进行压缩。

RMAN>backup datafile 9,8,7

format='c:\oracle\back\%T_%U';  %T系统当前时间,%U系统唯一型,备份文件不会重复。

显示:

RMAN>list backup of datafile 9;

删除:

RMAN>delete backup of datafile 9;

删除所有文件:

RMAN>delete backup;

备份表空间:

RMAN>backup tablespace users,indx,odm

format='c:\oracle\back\'%T_%U';

全部备份:

RMAN>backup tablespace database

format='c:\oracle\back\'%T_%U';

4、使用RMAN恢复数据库

RMAN>restore |datafile,tablespace,database  --向回考,物理性恢复

RMAN>recover |datafile,tablespace,database  --同步恢复。

5、Rman恢复实例

A、恢复数据文件

RMAN>startup mount

>restore datafile 9;

>recover datafile 9;

>alter database open;

B、恢复表空间

RMAN>startup mount

>restore tablespace users,

>recover tablespace users;

>alter database open;

其它:

在Windows下清除Oracle8i/9i/10g运行环境

1、删除Oracle注册表

regedit.exe->Local Machine->Software->ORACLE

2、删除Oracle服务

regedit.exe->Local Machine->System->CurrentControlSet->Services->ORA*

3、删除Oracle事件日志

regedit.exe->Local Machine->System->CurrentControlSet->Services->Eventlog->Application->ORA*

4、删除NT安装磁盘\Program Files\Oracle目录

5、删除Oracle环境变量

控制面板->系统->高级->环境变量

6、删除Oracle菜单

1

7、重新启动操作系统

8、删除Oracle主目录

注意: oracle用于unix时,长时间不重起,重启一次时间非常长。

《Oracle数据库系统管理》(上、下册)             --清华大学出版社

《Oracle Developer/2000开发实例与应用技术》    --清华大学出版社

《Oracle9i数据库系统管理大全》                 --清华大学出版社

《Oracle10g数据库系统管理》                    --机械工业出版社

转载于:https://www.cnblogs.com/we1700/archive/2012/02/21/2361485.html

oracle 基础1相关推荐

  1. Oracle 基础教程

    oracle基础教程 目录 1.oracle的安装 2.变量和类型 3.控制语句 4.oracle用户及授权管理 5.管理数据表 6.查询数据表 7.操纵数据表 8.SQL内置函数 9.触发器 10. ...

  2. oracle fra空间不足,ORACLE 基础解决方案1_扩大FRA区

    ORACLE 基础解决方案(一) Reviewing the Database Architecture Reviewing the Database Architecture 回顾数据库结构 For ...

  3. Oracle 基础知识——客户端连接oracle数据库服务端的四种方法

    Oracle基础知识 Oracle Database 11g 快捷版 (Oracle Database XE) 是一款基于 Oracle Database 11g 第 2 版代码库的小型入门级数据库, ...

  4. Oracle基础 游标

    原文:Oracle基础 游标 一.游标 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在 ...

  5. oracle:oracle基础知识(一)

    oracle基础知识(一) oracle基础入门学习笔记:视频链接 文章目录 数据库登录角色及表结构 表空间 创建表空间 认识表 管理表 列的增,删.改 表的重命名 删表 向表中插入数值 复制表 表中 ...

  6. oracle:oracle基础知识(二)

    oracle基础知识(二)笔记:高级查询 文章目录 分组查询 多属性分组语法: 过滤查询 group by 语句增强 sqlplus报表功能 多表查询 等值连接 外连接 自连接 子查询 子查询中的空值 ...

  7. Oracle登陆SQL Plus,Oracle基础学习登陆SQLPLUS(一)

    或 system/(password) 连接到本地的最高帐号 Sql>help index Enter Help [topic] for help. Sql>show all 显示当前SQ ...

  8. oracle基础知识文档,Oracle 基础知识分享PPT

    因测试组需求,所以把Oracle基础知识整理成了PPT,并讲解了一下(PPT无风格,简约派吐舌头). Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的 ...

  9. 大型数据库Oracle基础练习

    大型数据库Oracle基础 一.创建数据库和表 二.创建数据库和表 三.表的CRUD操作 四.数据库的查询 五.数据库安全性 六.存储过程的使用 七.数据库综合设计 一.创建数据库和表 1.详细描述O ...

最新文章

  1. 模拟客户端浏览器-1
  2. python进阶(小白也能看懂)——装饰器浅谈(一)
  3. boost::count相关的测试程序
  4. Qt中的JSON支持
  5. 斐波那契数列规律的计算。
  6. Eclipse配置初始化(自用)
  7. Javascript报错Failed to execute ‘querySelectorAll‘ on ‘Document‘: ‘#123456‘ is not a valid sele
  8. Oracle RAC CRS-0184 --Cannot communicate with the CRS daemon
  9. wordpress数据库表结构
  10. 线性代数-MIT 18.06-汇总
  11. 房屋翻新步骤有哪些?极家装修怎么样?
  12. 2018 ACM-ICPC, Syrian Collegiate Programming Contest F. Pretests(子集dp)
  13. 【未】Dynamic incentive schemes for managing dockless bike-sharing systems
  14. unity讲解(入门)
  15. #Livy配置Kerberos,#调用Hadoop组件,#Java 实现Livy大数据调用,#java拉取hive数据同步到本地
  16. super-----this
  17. oracle中的modify,数据库Oracle modify
  18. SSCOM V5.13.1使用方法
  19. 金融项目学习——尚融宝
  20. 汇千网-360——挣最庸俗的广告钱,投入于安全技术研发

热门文章

  1. learn python the hard way习题31~40总结以及列表的扩展知识
  2. 修改主机名 修改静态IP
  3. 利用freopen()函数和fc命令简化程序调试
  4. 第三章:ioctl 函数详解
  5. (转)flash位图缓存cacheAsBitmap
  6. c++primer plus 第13章 编程题第2题
  7. Android之TextView文字绘制流程
  8. 漫谈可视化Prefuse(四)---被玩坏的Prefuse API
  9. oracle和SQLserver数据库中select into 的区别
  10. 音乐应用开发Android应用开发--MP3音乐播放器界面设计(2)