Oracle基本知识总结

时间:2024.3.31

oralce基本操作。

1.创建用户,修改密码:

Create user 用户名 identified by 密码;

Alter user 用户名 identified by 密码;

若删除用户为drop user 用户名(cascade)

2.修改归档模式和非归档模式:

  查看归档模式:archive log list

   首先关闭数据库:shutdown immediate

   然后在mount 数据库startup mount

   改变归档模式:alter database archivelog

   最后启动数据文件:alter database open

如果设置路径的话 为:alter system set log_archive_dest_1="location=/oradata5/arch/ytsj";此在改变归档模式之前的一步做。

   120816-000138

3.查看oracle版本:

select banner from sys.v_$version;

4.查看oracle闪回区信息:

select * from v$recovery_file_dest;

5.整理表空间

1.自由范围的碎片整理
表空间的pctincrease值为非0
可以将表空间的缺省存储参数pctincrease改为非0。一般将其设为1,如:
alter tablespace temp
default storage(pctincrease 1);

这样SMON便会将自由范围自动合并。也可以手工合并自由范围:
alter tablespace temp coalesce;

2.段的碎片整理
段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典dba_segments,范围的信息可查看数据字典dba_extents。如果段的碎片过多, 将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用Import/Export(输入/输出)工具来完成。
Export()命令有一个(压缩)标志,这个标志在读表时会引发Export确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数--等于全部所分配空间。若这个表关闭, 则使用Import()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如:
exp user/password file=exp.dmp compress=Y grants=Y indexes=Y
tables=(table1,table2);

若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表:
imp user/password file=exp.dmp commit=Y buffer=64000 full=Y

这种方法可用于整个数据库。

6.查询表空间信息:

Select tablespace_name from dba_tablespaces;查询系统中存在的表空间。

Select tablespace_name,sum(bytes) from dba_data_files group by tablespace_name;

7.sqlplus的用法

7.1 spool的用法

Spool命令是将屏幕的显示输入到文本文件内,以便查看,有点象屏幕转存。

Spool c:\1.txt

Select * from emp;

Spool off

Spool c:/1.txt append

Select * from emp;

Spool off 在1.txt后面加入内容。

7.2.运行脚本

@脚本

@%oracle_home%\rdbms\admin\utlxplan.sql

该句话的含义为运行指定的脚本。

@@为运行相对路径下的脚本,一般是在大脚本调用小脚本的时候使用。

7.3 save,get,edit

save将当前sqlplus缓冲区中的内容保存到指定文件中。

get将文件中的sql语句调入到sqlplus缓冲区。

edit编辑当前SQLPLUS缓冲区内的SQL语句如ed--是注释当前行/* */是注释多行

7.4 登录oracle

Sysdba登录: conn /as sysdba

System用户登录: conn system /密码 as (sysdba、sysoper、sysasm)

7.5 null值

Null值是未赋值的值,不入索引。是空值。

当查询null时要注意,空值不是空值。他不是一个值。

Select enmae from emp where ename=null;

Select ename from emp where ename=’null’;

都是错误的

Select ename from emp where ename is null;

7.6 去掉重复行

Distinct关键字

Select distinct deptno from emp;

在oracle10g以前办法,该语句需要排序才能去掉重复的行,而在10g数据库不需要排序。而是使用HASH算法来去掉重复行,极大的提高了sql语句的效率。但是没有排序,输出也是没有排序的。

7.7 穷举

含上下界

Select deptno ,ename,sal from emp where deptno in(10,20);

穷举如果超过1000,建议修改sql;

7.8 通配符

- 通配一个,仅匹配一个字符, % 通配没有或多个字符。

当遇到

当你想查询_,%特殊字符时,请用escape.

Select ename from emp where ename like ‘%s_%’ escape ‘s ’;

我们并不想查找S后必须有一个字符以上的员工,而是要剔除S,S出现的目的就是转义,将_转义了,

这里的_不是通配符,而是实际意义的_。

Select ename from emp where ename like ‘%/_%’ escape ‘/’;

一般我们使用/来转义,以免产生歧异。

7.9 and or not 等运算

And 两个条件的并集

Or 两个条件的交集

Not 补集

7.10 order by

默认是升序:asc

默认是降序:desc

隐式排序,虽然结果中不显示,但是按照其另一个成分显示出来。

Select ename from emp order by  sal;

7.11 操作字符串常用函数

Lower 字符显示为小写   upper 字符显示为大写 initcap 字符显示为首字母大写。

Concat:将两个字符连接在一起。

7.12 oracle操作数字函数

1.Round

2.trunc

3.ceil

ROUND是四舍五入,TRUNC是截断,全部舍弃。

Select round(45.211,2) from dual;

7.13 改变在sqlplus中列的宽度

Col value for a10.

7.14 设置其日期

Alter session set nls_date_format=’yyyy/mm/dd:hh24:mi:ss’;

7.15 数据类型的隐式转换,显示转换
7.16 表的连接查询

8.查看实例名

Conn /as sysdba

show parameter service_name;

或者是:select instance_name from v$instance;

9. 如何在oracle中导入数据

Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文 件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用……

  Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文 件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。

  执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径,该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。

  oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。

  SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。

  下面介绍的是导入导出的实例。

  数据导出:

  1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中

  exp system/manager@TEST file=d:\daochu.dmp full=y

  2 将数据库中system用户与sys用户的表导出

  exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)

  3 将数据库中的表inner_notify、notify_staff_relat导出

  exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)

  4 将数据库中的表table1中的字段filed1以"00"打头的数据导出

  exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

  上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。

  也可以在上面命令后面 加上 compress=y 来实现。

  数据的导入:

  1 将D:\daochu.dmp 中的数据导入 TEST数据库中。

  imp system/manager@TEST file=d:\daochu.dmp

  imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y

  上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

  在后面加上 ignore=y 就可以了。

  2 将d:\daochu.dmp中的表table1 导入

  imp system/manager@TEST file=d:\daochu.dmp tables=(table1)

  基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

  注意:

  操作者要有足够的权限,权限不够它会提示。

  数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

  附录一:

  给用户增加导入数据权限的操作

  第一,启动sql*puls

  第二,以system/manager登陆

  第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)

  第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,

  DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,

  DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字

  第五, 运行-cmd-进入dmp文件所在的目录,

  imp userid=system/manager full=y file=*.dmp

  或者 imp userid=system/manager full=y file=filename.dmp

  执行示例:

  F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp

  屏幕显示

  Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006

  (c) Copyright 20## Oracle Corporation. All rights reserved.

  连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production

  With the Partitioning option

  JServer Release 8.1.7.0.0 - Production

  经由常规路径导出由EXPORT:V08.01.07创建的文件

  已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入

  导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)

  . 正在将AICHANNEL的对象导入到 AICHANNEL

  . . 正在导入表 "INNER_NOTIFY" 4行被导入

  准备启用约束条件...

  成功终止导入,但出现警告。

  附录二:

  Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.

  先建立import9.par,

  然后,使用时命令如下:imp parfile=/filepath/import9.par

  例 import9.par 内容如下:

  FROMUSER=TGPMS

  TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)

  ROWS=Y

  INDEXES=Y

  GRANTS=Y

  CONSTRAINTS=Y

  BUFFER=409600

  file==/backup/ctgpc_20030623.dmp

  log==/backup/import_20030623.log

导入数据:进到javadoc目录下 imp userid=scott/tiger full=y file=ill.dmp

打印所有表名:select table_name from user_tables;

打印所有表关系 : select * from user_constraints

打印某个表内的所有列名:select column_name,data_type from user_tab_columns where table_name = 'SZKB' order by data_type

打印某个表的列数:select count(*) from user_tab_columns where table_name='USER_TAKE';

分别打印某个数据库内所有表的列数:select table_name,count(*) from user_tab_columns group by table_name;

打印某个数据库内所有表名以及每个表名对应的列名:select table_name,column_name from user_tab_columns order by table_name;

10.查找告警日志在oracle 11g中,alert文件的信息是以xml的文件格式存在的,另外提供了普通文本格式的alert文件。
这两份log文件的位置分别是V$DIAG_INFO中的Diag Alert 和Diag Trace 对应的目录。

通过查询v$diag_info视图获得ADR相关的信息
代码:
sys@ora11g>select * from v$diag_info;

其中alter日志在

Diag Trace /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/trace

 Diag Alert /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/alert

我们一般式查看trace文件中的告警日志。

2.在oracle10g中 在oracle目录下面的 admin 中的实例名下面的bdump

11 更改实例登录

$ bash

bash-3.00$ export ORACLE_SID=ytsj

12.三个比较重要的角色

Connect dba resource(允许在所有的表空间中建表)

13.配置监听

Netca

14 修改参数文件,指定内存所有session使用内存总数

PGA_aggregate_target  

Alter system set pga_aggregate_target=value scope=spfile scope=both scope=memory;

15 oracle创建用户与表空间

1.创建用户的时候定义默认表空间

SQL>create user username identified by password default tablespace tablespace_name;

2.修改用户默认表空间

SQL>alter user username default tablespace tablespace_name;

3.拥有unlimited tablespace权限的用户可在任意表空间上操作。

4.没有unlimited tablespace权限的用户要在非默认表空间上操作需要在目标表空间有一定的配额,即在目标表空间分配一定的空间给用户。

SQL>alter user username quota 100m on tablespace_name2;

16 修改归档位置

查看归档位置

show parameter db_recovery_file_dest

SQL> alter system set log_archive_dest_1='location=/ ' scope =both;

Oracle 错误

1.     oracle ora-0027错误:归档日志大小超过最大值。

2.ora-01103错误,参数文件中的DB_NAME与控制文件中的数据库名不一致。

3.数据类型不匹配

. ORA-01722: invalid number

Oracle功能

1.     闪回区

1.1     什么是闪回区:自动的基于磁盘的备份与恢复( Automatic Disk-Based Backup and Recovery )。实现该功能的基础为本文要讲述的闪回恢复区( Flash Recovery Area )。闪回恢复区是 Oracle 10g 中的新事物。简单的说,闪回恢复区是一块用以存储恢复相关的文件的存储空间。
1.2     重新设定返回区:

有三个初始化参数来设置和管理:

db_recovery_file_dest:指定闪回恢复区的位置。
db_recovery_file_dest_size:指定闪回恢复区的可用空间大小。

db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,一般制定为1440分钟。为24小时。

然后查看修改的值是否有效

Oracle概念

数据库名、实例名、数据库域名、全局数据库名、服务名 ,

一、数据库名

什么是数据库名?

数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下:

DB_NAME=myorcl

...

在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。

数据库名的作用

数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。

有很多Oracle安装文件目录是与数据库名相关的,如:

winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\...

Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...

pfile:

winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora

Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora

跟踪文件目录:

winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...

另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。

同样,修改数据库结构的语句alter database, 当然也要指出要修改的数据库的名称。

如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。

还有在备份或恢复数据库时,都需要用到数据库名。

总之,数据库名很重要,要准确理解它的作用。

查询当前数据名

方法一:select name from v$database;

方法二:show parameter db

方法三:查看参数文件。

修改数据库名

前面建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。那么现在就来说明一下,如何在已创建数据之后,修改数据库名。步骤如下:

1.关闭数据库。

2.修改数据库参数文件中的DB_NAME参数的值为新的数据库名。

3.以NOMOUNT方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle文档)

二、数据库实例名

什么是数据库实例名?

数据库实例名是用于和操作系统进行联系的标识,就是说数据库和操作系统之间的交互用的是数据库实例名。实例名也被写入参数文件中,该参数为instance_name,在winnt平台中,实例名同时也被写入注册表。

数据库名和实例名可以相同也可以不同。

在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。这一点在第一篇中已有图例说明。

查询当前数据库实例名

方法一:select instance_name from v$instance;

方法二:show parameter instance

方法三:在参数文件中查询。

数据库实例名与ORACLE_SID

虽然两者都表是oracle实例,但两者是有区别的。instance_name是oracle数据库参数。而ORACLE_SID是操作系统的环境变量。 ORACLD_SID用于与操作系统交互,也就是说,从操作系统的角度访问实例名,必须通过ORACLE_SID。在winnt不台, ORACLE_SID还需存在于注册表中。

且ORACLE_SID必须与instance_name的值一致,否则,你将会收到一个错误,在unix平台,是“ORACLE not available”,在winnt平台,是“TNS:协议适配器错误”。

数据库实例名与网络连接

数据库实例名除了与操作系统交互外,还用于网络连接的oracle服务器标识。当你配置oracle主机连接串的时候,就需要指定实例名。当然8i以后版本的网络组件要求使用的是服务名SERVICE_NAME。这个概念接下来说明 。

三、数据库域名

什么是数据库域名?

在分布工数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制,数据库域名主要用于oracle分布式环境中的复制。举例说明如:

全国交通运政系统的分布式数据库,其中:

福建节点: fj.jtyz

福建厦门节点: xm.fj.jtyz

江西: jx.jtyz

江西上饶:sr.jx.jtyz

这就是数据库域名。

数据库域名在存在于参数文件中,他的参数是db_domain.

查询数据库域名

方法一:select value from v$parameter where name = 'db_domain';

方法二:show parameter domain

方法三:在参数文件中查询。

全局数据库名

全局数据库名=数据库名+数据库域名,如前述福建节点的全局数据库名是:oradb.fj.jtyz

四、数据库服务名(经常是orcl)

什么是数据库服务名?

从oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是SERVICE_NAME。

如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。

查询数据库服务名

方法一:select value from v$parameter where name = 'service_name';

方法二:show parameter service_name

方法三:在参数文件中查询。

二.表空间

2.1 什么是表空间?

一个数据库有一个或多个表空间构成,不同表空间用于存放不同应用的数据,表空间的大小决定了数据库的大小。一个表空间对应了一个或多个数据文件。一个数据文件只能从属于一个表空间。

o   合理规划表空间,可以控制数据库在磁盘上的分配,提高数据库的I/O性能。

o   通过表空间配额设置,可以控制用户所占用的存储空间的大小。

注意:一个数据库对象只能存储在一个表空间中,但可以存储在一个表空间的多个数据文件中。

2.2 表空间分类

表空间分为系统表空间和非系统表空间之分。

系统表空间为:system,sysaux表空间。

非系统表空间为:撤销表空间和临时表空间。

2.2.1系统表空间

System表空间:

l  存储数据库中的数据字典

l  PL/SQL程序的源代码和解释代码,包括存储过程、函数、包、触发器等。

l  数据库对象的定义,如表、视图、序列、同义词等。

Sysaux表空间:

是辅助系统表空间,主要用于存储数据库组件等信息,减小system表空间的负荷。

三 物理数据库结构

构成数据库文件可以分为

o   控制文件:包含数据库本身的数据。

o   数据文件:包含数据库中的用户数据或应用程序数据

o   联机重做日志文件:可以实现数据库实例恢复,但是在数据文件没有丢失的前提下。

o   参数文件:定义启动实例时如何配置实例

o   口令文件:允许用户远程连接到数据库并执行管理任务。

o   备份文件:用于恢复数据库。

o   归档日志文件:实例生成的数据更改的实时历史记录。可以恢复丢失的数据文件。

预警日志文件:按照时间顺序列出的消息日志和预警日志。

四. SGA结构

Oracle内存结构是oracle数据库系统的重要组成部分。主要有SGA组成。

SGA是一组为系统分配的内存结构,可以包含一个数据库实例的数据或控制信息,当数据库实例启动时,SGA的内存被自动分配,当数据库实例关闭时,SGA内存被收回,SGA占用内存最大的一个区域,同时也是影响数据库性能的重要因素。

SGA区是可读写的,所有登录到实例的用户都能读取SGA中的信息,服务进程会将修改的信息写入SGA区。

SGA主要包括以下的数据结构。

数据缓冲(buffer cache)

重做日志缓冲(redo log buffer)

共享池(chared pool)

Java池(java pool)

流池(streams pool)

数据字典缓存(data dictionary cache)

其他信息(数据库和实例的状态信息)

1.  SQL> show sga 

2.   

3.  Total System Global Area 612368384 bytes 

4.   

5.  Fixed Size 1250428 bytes 

6.   

7.  Variable Size 192940932 bytes 

8.   

9.  Database Buffers 411041792 bytes 

10.  

11. Redo Buffers 7135232 bytes 

SGA中的数据字典缓存和其他信息,会被实例的后台进程所访问,在实例启动后就固定在SGA中,而且不会改变,这部分又称为SGA,这部门区域的大小一般小于100k.

五.Library cache

library cache 

      这里简单发表下对库告诉缓存的认识,大家知道共享池是有library cache和data dictionary cache和控制部分组成,首先sql执行的过程显示语法分析阶段,然后是语意分析阶段,也就是验证下对象权限等一些列的东西,再下面就是SQL进行hash运算,运算后匹配library cache里的hash桶,再匹配hash桶上面的handle,也就是句柄,如果匹配成功,那么去找子游标,如果不成功,那么就生成一个handle,这里也就是硬解析,挂载hash桶上。

       这里如果是不同用户或者,期间对象权限更改,就算是SQL文本一样,也是无法共享子游标的,生成handle,其实就是要想共享池申请空闲的内存,期间获得shared pool latch ,那么很容易产生冲突。handle其实就是存放的父游标,真正的执行计划是存放在子游标上的,也就是heap6上,一个父游标可能对应多个子游标,比如,不同用户下的相同SQL,就会造成1个父对多个子游标,这种父游标存在,而要重新生成子游标,就是relaod,需要耗硬件资源,数据库性能也就十分低下,所以我们要避免硬解析和reload,解析过程中很消耗资源,而且容易造成 latch的冲突,父游标里主要包含SQL文本,父游标打开时,是被锁住的,也就是不能交换出library cache ,子游标主要包含执行计划和绑定变量,这个就很重要。这里再介绍下软解析,其实只要在hash桶里可以匹配对应的SQL文本,那么就是软解析,说明之前运行过该sql,其实sql执行期间只要步骤可以跳过,那么我们就可以定位为软解析。这里还有软软解析,这个是最好性能,session_cached_cursors,当会话相同的CURSOR第三次访问是,那么会话会在PGA里做个标记,就算会话结束,cursor也不会从library cache交换出去,这里不需要访问library cache,只和PGA有关联,共享的东西这里我们没去访问,也就是不争用资源,性能得到提升。

六.SGA与共享池的联系

Oracle server主要包括两部分:例程与数据库。

运行的基本步骤是:

1.       启动例程,系统会自动分配SGA。关闭例程时系统会收回SGA。

2.       共享池的尺寸由参数SHARE_POOL_SIZE初始化,但Library Cache和Dictionary Cache的尺寸是动态变化的。

3.       共享池用来存放最近执行SQL语句和字典信息;这些SQL语句是存放于Library Cache中的。

4.       Library Cache里包含许多ContextArea(共享游标),每个CA都包含相应SQL语句执行计划。

开发时注意应该使用相同的SQL语句。

语句文本相同(多空格也视为不同)  大小写相同    赋值变量相同

共享池中的字典Cache,它里边存放着字典信息,包括表,列的定义和权限信息。

七.归档与非归档的区别

处于归档模式下会自动对rodo log files进行备份,而处于非归档模式下会覆盖以前的rodo log files

Oracle 调优

1.1 oracle group by 语句的应用,可以先分组,或者是聚合后分组

SELECT JOB , AVG(SAL)

FROM EMP

GROUP JOB

HAVING JOB = ‘PRESIDENT'

OR JOB = ‘MANAGER'

高效:

SELECT JOB , AVG(SAL)

FROM EMP

WHERE JOB = ‘PRESIDENT'

OR JOB = ‘MANAGER'

GROUP JOB

HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。Having包含聚合函数。

提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多.

1.2 数据库管理Oracle 连接池信息的修改

最近项目中用到的Oracle数据库在服务器上是建了多个表空间供不同系统使用,两个系统同时在使用过程中,正在开发的一个项目在测试运行时,时不时就出现连接池满了,连接不上的问题,为此查了下怎么修改Oracle连接池配置的修改方式,特记录下来备查。

  目前Oracle只支持一个连接池,pool name为“SYS_DEFAULT_CONNECTION_POOL”,管理连接池信息的也就一个包“DBMS_CONNECTION_POOL”。

  先看看包的相关说明:

  SQL> desc DBMS_CONNECTION_POOL

  Element Type

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

  ALTER_PARAM PROCEDURE

  CONFIGURE_POOL PROCEDURE

  RESTORE_DEFAULTS PROCEDURE

  START_POOL PROCEDURE

  STOP_POOL PROCEDURE

  包里面有5个存储过程。默认Oracle是包含一个缺省的连接池SYS_DEFAULT_CONNECTION_POOL,但是并没有被打开,需要显示的开启连接池,第一步当然就是开启连接池:

  exec DBMS_CONNECTION_POOL.START_POOL('SYS_DEFAULT_CONNECTION_POOL');

  这个操作只需要做一次,下次数据库重启了之后连接池会自动开启的。

  打开了连接池之后可以通过系统视图dba_cpool_info进行查询:

  SQL> select connection_pool,status from dba_cpool_info;

  CONNECTION_POOL STATUS-------------------------------------------------------------------------------- ----------------

  SYS_DEFAULT_CONNECTION_POOL ACTIVE

  当连接池启动了之后,可以通过DBMS_CONNECTION_POOL.CONFIGURE_POOL来查看连接池的相关配置项。

  SQL> desc DBMS_CONNECTION_POOL.CONFIGURE_POOL

  Parameter Type Mode Default?

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

  POOL_NAME VARCHAR2 IN Y

  MINSIZE BINARY_INTEGER IN Y

  MAXSIZE BINARY_INTEGER IN Y

  INCRSIZE BINARY_INTEGER IN Y

  SESSION_CACHED_CURSORS BINARY_INTEGER IN Y

  INACTIVITY_TIMEOUT BINARY_INTEGER IN Y

  MAX_THINK_TIME BINARY_INTEGER IN Y

  MAX_USE_SESSION BINARY_INTEGER IN Y

  MAX_LIFETIME_SESSION BINARY_INTEGER IN Y

  参数说明:

参数 说明

MINSIZE 在pool中最小数量的pooled servers,缺省为4。
MAXSIZE 在pool中最大数量的pooled servers,缺省为40。
INCRSIZE 这个参数是在一个客户端应用需要连接的时候,当pooled servers不可用的状态时候,每次pool增加pooled servers的数目。

SESSION_CACHED_CURSORS 缓存在每个pooled servers上的会话游标的数目,缺省为20。
INACTIVITY_TIMEOUT pooled server处于idle状态的最大时间,单位秒, 超过这个时间,the server将被停止。缺省为300.

MAX_THINK_TIME 在一个客户端从pool中获得一个pooled server之后,如 果在MAX_THINK_TIME时间之内没有提交数据库调用的话,这个pooled server将被释放,客户端连接将被停止。缺省为30,单位秒。

MAX_USE_SESSION pooled server能够在pool上taken和释放的次数,缺省为5000。
MAX_LIFETIME_SESSION The time, in seconds, to live for a pooled server in the pool. Thedefault value is 3600.一个pooled server在pool中的生命值。

  注:在pooled server数目不能低于MINSIZE。

  可以使用DBMS_CONNECTION_POOL.CONFIGURE_POOL或DBMS_CONNECTION_POOL.ALTER_PARAM对连接池的设置进行修改。

  先来看看参数信息:

  SQL> desc DBMS_CONNECTION_POOL.ALTER_PARAM

  Parameter Type Mode Default?

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

  POOL_NAME VARCHAR2 IN Y

  PARAM_NAME VARCHAR2 IN

  PARAM_VALUE VARCHAR2 IN

  SQL> exec DBMS_CONNECTION_POOL.ALTER_PARAM ('','minsize','10');

  PL/SQL procedure successfully completed

  SQL> exec DBMS_CONNECTION_POOL.ALTER_PARAM ('','maxsize','100');

  PL/SQL procedure successfully completed

  由于只有一个连接池,第一个参数的值可以省略。

  系统中有几个系统视图比较有用:

  DBA_CPOOL_INFO 这个视图包含着连接池的状态

  V$CPOOL_STATS 这个视图包含着连接池的统计信息

  V$CPOOL_CC_STATS 这个视图包含着池的连接类型级别统计

  修改成功了之后可以查询下连接池信息:

  SQL> select CONNECTION_POOL, STATUS,MINSIZE,MAXSIZE from DBA_CPOOL_INFO;

  CONNECTION_POOL STATUS MINSIZE MAXSIZE

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

  SYS_DEFAULT_CONNECTION_POOL ACTIVE 10 100

  到此,连接池的设置和相关修改已经完成。

Rman

1.     rman概念

2.     rman 工作原理

3.     rman注意事项

在进行rman备份之后,一定要在进行归档日志的备份和联机日志的备份。根据rman备份原理可知,rman是物理备份,是对数据块的备份。他是从开始备份的时间点开始锁定此刻的数据文件信息,但是此时数据库是运行的。数据文件正在使用,他只备份数据库中已存在的数据块。有可能出现已经提交的操作,但是dbwn没有写入数据文件。或者已经备份的数据文件又发生修改。这些信息在redo file中有记录。所以在rman完毕后,建议马上执行日志切换。然后马上进行备份归档日志。要靠这些已经归档的redo file 信息恢复和保持数据库的一直状态。

Oracle导入导出数据

Oracle培训总结

更多相关推荐:
Oracle知识点总结

Oracle知识点总结根据阎赫老师讲义整理Zealjiang1Oracle数据库的安装和配置OracleInternet级数据库SQLServer中小企业级数据库Access桌面级数据库Oracle的安装注意来...

Oracle知识点总结文库

本文由宏图贸易网全球领先的B2B电子商务批发贸易供求网收集整理仅供分享著作权归作者所有转载请注明出处宏图论坛领先的经济贸易创业交流论坛韩顺平老师oracle教程笔记1Oracle认证与其它数据库比较安装Orac...

Oracle知识点总结

Oracle知识点总结体系结构数据库的体系结构是指数据库的组成工作过程与原理以及数据在数据库中的组织与管理机制体系结构包括实例instence数据库文件database用户进程userprocess服务器进程s...

Oracle数据库知识点总结

Oracle数据库实例启动不了怎么办文件主要分为参数文件跟踪文件警告文件数据文件临时文件控制文件重做日志文件密码文件修改跟踪文件闪回日志文件转储文件数据泵文件datapump平面文件主要说参数文件与警告文件参数...

Oracle知识点总结文库

1Oracle认证与其它数据库比较安装Oracle安装会自动的生成sys用户和system用户1sys用户是超级用户具有最高权限具有sysdba角色有createdatabase的权限该用户默认的密码是chan...

Oracle数据库 知识点总结

1.constraint约束:altertable[table_name]addconstraint[pk_name]primarykey(pkname);//添加主键altertable[table_name…

Oracle服务器相关知识点总结

第二章Oracle服务器一Oracle服务器Oracle服务器是由实例和数据库组成二实例及实例的开启与关闭实例Instance关系型数据库管理系统RelationalDatabaseManagerSystemR...

oracle简单初学者知识点总结

1工欲善其事必先利其器首先是对oracle数据库的安装和plsql辅助工具的安装以默认值安装即可除了特别声明2新安装的数据库默认的有三个用户可以登录syssystemscottScott用户是安装数据库的时候为...

Oracle知识点整理

修改列的长度altertable表名modifycolumnnamevarchar232altertable表名modifycolumnname1varchar20defaultnullcolumnname2v...

Oracle知识总结

Oracle知识点总结用户表复杂查询plsql存储过程函数游标触发器同义词视图序列动态sql说明本文中用到的println是自己创建的一个存储过程调用了dbmsoutputputline方法代码如下Create...

Oracle知识汇总

1Oracle千万级记录插入和查询的技巧Oracle千万级记录进行处理并不简单下面就为您总结了千万级记录插入和查询的技巧希望对您能够有所启迪最近做了个项目实现对存在Oracle千万级记录的库表执行插入查询操作原...

oracle基本知识点

Oracle卸载流程1自己创建安装目录12Oracle有一默认的安装目录CProgramFilesOracleOracle相关的后台服务在注册表regedit的相关注册位置aHKEYLOCALMACHINESO...

oracle知识点总结(34篇)