ORACLE 10G OCA 042 笔记
************$1 oracle Database 10g 构件和体系结构***********************
构件
oracle Database 10g
oracle Application Server 10g;
oracle Developer Suite;
oracle Applications 11i;
oracle Collaboration Suite;
oracle Services;
应该用标准语法.使用JOIN,CROSS JOIN,NATURAL JOIN等关键字的ANSI SQL:1999语法,
一个Segment被定义为任何一个消耗数据库内物理存储空间的实体.常见的段类型:
表,索引,回退,分区.每个Segment由数据库内连续存储空间块(盘区)构成.
操作系统块-->数据库块-->盘区-->段
PL/SQL:Oracle Procedural Language for SQL对象:匿名代码块,过程,函数,程序包,触发器
除了SQL,Web工具,PL/SQL和JAVA之外,Oracle公司还提供了把SQL命令及数据库连通性集成到传统编程语言中的能力.这种集成是通过使用Oracle预编译器和Oracle Call Interface(OCI)来实现的.
要想成为一名成功的Oracle数据库管理员(DBA),首先需要彻底了解Oracle的基础体系架构及其机制.了解Oracle的内存结构,后台进程和I/O活动之间的关系是至关重要的,然后才能学习怎样管理这些方面.
Oracle体系结构
按以下三个类别来描述
用户相关进程
总称为Oracle Instance 的逻辑逻辑内存结构
总称为Database的物理文件结构
用户进程
User Process:要么在用户自己的PC上,要么在中间层应用服务器上.然后这个User Process启动一个与实例的连接.Oracle把启动和管理User Precess与实例间通信的这个进程称作一个Connection.一旦这个Connection建立了起来,用户就在实例中建立了一个Session.当建立一个会话之后,每个用户就在主机服务器自身上启动了一个Server Process(共享服务器多个User Process共享Server Process).然后,由这个Server Process负责执行实际允许用户与数据库进行交互的各项任务.
PGA(Process Global Area):程序全局区,数据库给每个用户创建了一个PGA的辅助内存结构.PGA存储与用户具体相关的会话信息,比如Bind variable和Session variable.
Orcle实例
一个Oracle实例由Oracle的主内存结构和几个Oracle后台进程所组成;主内存结构又叫做SGA(System Global Area).当用户访问数据库中的数据时,Server Process就是和SGA进行通信.
SGA构件
Oracle把SGA内存划分成叫做Granule(区组)的组快来实现动态的空间分配.4MB,8MB OR 16MB
共享存储池:高速缓存由数据库用户已经发布的最常用的SQL语句(LRU)
数据库缓冲器告诉缓存:高速缓存由数据库用户最近访问过的数据(LRU)
重做日志缓冲器:存储事务信息以用于恢复目的
Java存储池:可选,在Oracle的JVM选件得到使用时,高速缓存最近使用的Java对象和应用软件代码
大存储池:为诸如RMAN备份与恢复之类的大型操作和Shared Server 构件高速缓存数据
流存储池:当Oracle的Advanced Queuing选件得到使用时,高速缓存跟排队的信息请求相关联的数据
参数:基本参数和高级参数
如:SGA_TARGET
SQL>select * from V$SGA
Fixed Size:用来存储由实例的后台进程所使用的信息的辅助空间
Variable Size:Shared Pool,Large Pool,Java Pool
Database Buffers Cache:
Redo Log Buffer
SQL>select component,current_size from v$sga_dynamic_components;
或用EM DatabaseControl来查看每个SGA构件的大小.
Oracle的后台进程
必需:SMON(System Monitor),PMON(Process Monitor),DBWn(Database Writer),CKPT(Checkpoint)
任选:ARCn(Archive),RECO(Recover),CJQn(Job Queue Monitor),Jnnn(Job Queue),Qnnn(Parallel Queue Slave),Dnnn(Dispatcher),Snnn(Shared Server),MMAN(Memory Manager),MMON(Memory Monitor),MMNL(Memory Monitor Light),RVWR(Recover Writer),CTWR(Change Tracking Writer)
Unix下查看后台进程 $ps -ef | grep PROD
在windows环境中,还有一个叫做OracleServiceInstanceName的Windows服务与每个实例相关联.必须启动这个服务,才能启动实例.
Oracle数据库
一个实例就是一个临时的内存结构,但是Oracle数据库是由驻留在主机服务器的磁盘驱动器上的一组物理文件所构成的.这些物理文件称做Control File,Data File,Redo File.跟Oracle数据库有关,但从技术上看不属于Oracle数据库的附加物理文件有Password File,PFILE,SPFILE,以及Archived redo log file.
Control File:
Data File:
Redo File:
了解Database Writer,Log Writer进程何时工作的.
安装Oracle 10g
检查技术文档->检查系统需求->制定安装计划(OFA)->使用OUI 详细看书已经文档
************$2 创建与控制数据库*****************************************
Oracle企业管理框架
oracle Enterprise Management Framework 提供了一个全面的集成工具集,以便DBA不均那能够使用这些工具更轻松更有效的完成传统任务,而且还能够更有效的监视企业中的各种构件.DBA可以定制这个管理框架.
Oracle企业管理器框架的各个目标之间的通信均由Oracle Management Agent(Oracle管理代理程序)处理.
Oracle企业管理框架分成下面这些功能区.
受管理目标:DBA使用Database Manager来管理受管理目标.包括数据库,应用服务器,Web服务器,应用软件以及象Oracle Net监听器和Connection Manager之类的Oracle代理程序.
oracle Management Service:一个基于Java的Web构件,该构件是DBA用来监视和控制Oracle企业管理器框架内各个受管理目标的实际界面.
Oracle管理储存库:已收集到并与受管理目标有关的配置和监视信息被存储在一个Oracle管理储存库中.
oracle Enterprise Manager 10g 网格控制:一个基于Web的用户界面,管理许多数据库,应用服务器,Web服务器和其他构件
oracle Enterprise Manager 10g数据库控制:允许DBA监视和管理单个Oracle数据库实例或单个RAC(Real Application Cluster)环境.
oracle Application Control:
启动和关闭Oracle管理代理程序
一个Oracle管理代理程序就是一个运行在每个受管理目标服务器上的后台进程.代理程序收集与受管理目标有关的数据,然后与中心管理服务进行通信.
bin>emctl start agent 在集中式的Grid Control框架内
bin>emctl start dbconsole 把数据库作为单独的实体来管理(含apache启动)
bin>emctl status dbconsole
使用Database Control访问数据库:http://hostname:portnumber/em
使用iSql*Plus:bin>isqlplus start(Unix) windows下有相应程序
获取Oracle构件所用端口的清单:检查$ORACLE_HOME/install directory目录portlist.ini文件
把iSql*Plus设置成SYSOPER,SYSDBA特权,必须执行许多步骤.....看帮助
使用Oracle Database Conifguration Assitant
使用EM Database Control启动Oracle 实例测试
查看和了解Oracle报警日志的内容 google多看看
************$3 数据库存储和模式对象************************************
创建大文件和小文件表空间
CREATE BIGFILE TABLESPACE hist2004apr DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
处理Oracle管理文件表空间
ALTER SYSTEM SET db_create_file='d:\oracle\oradata\omf' scope=BOTH;
选择盘区管理方式
CREATE TABLESPACE hist2004apr
DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL UNIFORM;
CREATE TABLESPACE hist2004apr
DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
选择段空间管理方式 MANUAL ,AUTO
CREATE TABLESPACE hist2004apr
DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SEGMENT SPACE MANAGEMENT MANUAL;(默认MANUAL)
CREATE TABLESPACE hist2004apr
'/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SEGMENT SPACE MANAGEMENT AUTO; 数据库使用位图而不是自由列来标识哪些数据块可用于插入操作,忽略PCT_FREE和PCT_USED参数
备注:PCT_FREE和PCT_USED针对MANUAL手工段空间管理方式...自由快列表....
我的oracle10g默认是extent management:local
segment space mangement:auto
系统表,临时表,undo表空间必定是MANUAL的.
创建临时表空间 (我的系统初始都分配了空间,某些UNIX系统是延迟分配空间的)
CREATE TEMPORARY TABLESPACE temp
TEMPFILE 'C:\ORACLE\ORADATA\ORA10\TEMP01.DBF' SIZE 2G;
创建撤销表空间
设置UNDO_MANAGEMENT=AUTO
CREATE DATABASE TEST
...
UNDO TABLESPACE undo
DATAFILE 'C:\ORADATA\TEST\undo01.dbf' SIZE 500M
AUTOEXTENT ON NEXT 100M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
...
CREATE UNDO TABLESPACE undo
DATAFILE '/ORADATA/PROD/UNDO01.DBF' SIZE 2G;
删除表空间
DROP TABLESPACE hr_data INCLUDING CONTENTS AND DATAFILES;
修改表空间
ALTER TABLESPACE fin RENAME TO payables;
给表空间添加数据文件
ALTER TABLESPACE receivables ADD DATAFILE
'/u02/oradata/ORA10/receivables01.dbf'
SIZE 2G;
脱机,联机receivables表空间
ALTER TABLESPACE receivables OFFLINE;
ALTER TABLESPACE receivables ONLINE;
只读
ALTER TABLESPACE sales2003 READ ONLY;
ALTER TABLESPACE sales2003 READ WRITE;
置入备份模式
ALTER TABLESPACE sales2003 BEGIN BACKUP;
ALTER TABLESPACE sales2003 END BACKUP;
转移文件:windows中的COPY 或 UNIX 的cp命令
新位置
ALTER TABLESPACE receivables RENAME DATAFILE 'H:\ORACLE\ORADATA\ORA10\RECEIVABLES02.DBF'
TO 'C:\ORACLE\ORADATA\ORA10\RECEIVABLES02.DBF';
获取表空间信息
DBA_TABLESPACE;
DBA_DATA_FILES;
DBA_TEMP_FILES;
V$TABLESPACE.
使用Schema(模式)对象
一个Schema就是一个特定数据库用户所拥有的数据库对象集.模式具有和数据库用户相同的名称,因此两个术语是同义的.
模式对象包括读者已在表空间中所见过的段(表,索引等),以及一个用户所拥有的非段数据库对象.如约束,视图,同义词,过程,程序包.
Oracle指定数据类型:略
字符
数字
日期数字
LOB
ROWID
二进制
The database LOB datatypes are as follows:
CLOB Stores variable-length character data.
NCLOB Stores variable-length character data using the Unicode character set.
BLOB Stores binary variable-length data inside the database. BLOB data does not undergo character
set conversion when passed between databases or between client and server processes.
BFILE Stores binary variable-length data outside the database. BFILEs are limited to a maximum
of 4GB of data and even less in some operating systems.
Here is an example of the LOB datatypes in use:
CREATE TABLE lob_examples
( id NUMBER
, name VARCHAR2(32)
, description VARCHAR2(4000)
, definition CLOB
, mp3 BLOB
)TABLESPACE USERS
LOB (definition) STORE AS
(TABLESPACE user3_data);
除了表和视图所共用的名称空间之外,数据库还有单独用于如下各项的名称空间:
索引
约束
聚类
数据库触发器
专用数据库链接
量纲
角色
公用数据库链接
表空间
概况
参数文件(PFILE)
创建表
CREATE TABLE change_log
NOLOGGING COMPRESS
TABLESPACE archive
(log_id NUMBER
,who VARCHAR2(64)
,when TIMESTAMP
,what VARCHAR2(200)
);
NOLOGGING选项告诉数据库,不要把改表的内容记录到重做日志上,也不要把后续的直接路径插入操作记录到重做日志上.
COMPRESS选项告诉数据库,使用数据库压缩把数据添加到表中,因而需要较少的磁盘空间.
创建临时表:两种 ON COMMIT DELETE ROWS ,ON COMMIT PRESERVE ROWS
给表或列添加注释
COMMENT ON TABLE change_log IS
'this table is where you record changes to the configuration of the DEMO system';
DBA_COL_COMMENTS
重命名表:ALTER TABLE CHANGE_LOG RENAME TO DEMO_CHANGE_LOG;
添加和删除表中的列
ALTER TABLE change_log ADD how VARCHAR2(45);
ALTER TABLE CHANGE_LOG ADD
(HOW VARCHAR2(45),
WHY VARCHAR2(60)
);
修改列
ALTER TABLE CHANGE_LOG MODIFY
(WHAT VARCHAR2(250),
WHO VARCHAR2(50) DEFAULT USER
);
以下如果9i中出现,略.加快速度
索引
B树索引是默认的索引类型,适用于中或大基数列,B树索引支持行级加锁,因此适用于多用户的事务应用.支持PRIMARY KEY 或UNIQUE约束的索引是B树索引.
位图索引最适用于低到中基数列的多种组合(不能创建一个唯一性位图索引),而且它们不支持行级加锁.位图索引在数据修改受到限制和控制的环境中最佳,比如许多数据仓库应用软件.由于位图索引不能有效的对被索引数据做修改,所以它们在数据装入开始之前被删去,在数据装入完成后被重建.
处理序列
create sequence employee_seg start with 100500 nomaxvalue nominvalue;
************$4 oracle Net服务*****************************************
Interprocess Communication 进程间通信(IPC) 进程间通信(IPC)是运行在多任务操作系统中或联网计算机上的程序和进程使用的一组技术
程序使用IPC的一个好处是,能有效地利用其它程序或计算机的过程
虽然网络变得越来越复杂,但也变得越来越容易使用和管理.
DBA的网络责任
了解可以采用的网络配置选项,并根据本组织的需求知道应该怎样使用那些选项.
了解本组织的基础网络体系结构,以便制定有远见卓识的设计决策.
于网络工程师紧密合作来保证与oracle服务器的一致而又可靠的连接.
了解可以用来配置和管理网络的各种工具
诊断并排除与用户,中间层和服务器有关的连接问题.
保证安全的连接,并在必要时使用现有网络配置来获得敏感数据传输的较高安全度
紧跟可能对网络设计决策有影响的最新行业趋势和Oracle体系结构的最新变化
网络配置
单层终端直接连接到主机计算机,不存在网络协议与多操作系统的复杂性.
双层经常叫做客户/服务器计算.可缩放性不行.
n层引进了位于客户与数据库服务器之间的中间件[MIDDLEWARE]构件,比如应用服务器或Web服务器.这个模型是可缩放的,并且把表示,业务逻辑和路由选择以及数据库处理等任务分配给许多计算机.许多因素正驱动着n层计算,比如Internet和网格计算;后者使用大量的后端处理器来缩放数据库服务和连接.
Oracle特性综述
连通性:客户可以使用许多方法与一个oracle数据库进行交互(多协议支持,多操作系统,JDBC)
可管理性:Web应用,位置透明性(数据库表现为一个或多个数据库服务),目录命名(Directory Naming)
可缩放性:Oracle Shared Server,Oracle Connectiion Manager(多路复用,网络访问,交叉协议连通性
安全:Oracle Advanced Security,防火墙支持
可访问性:Heterogeneous Service(异构服务),外部过程
目录命名:Directory Naming使得服务名称能够通过一个集中式命名储存库来解析.这个中心储存库采取LDAP(Lightweight Direcory Access Protocol)服务器的形式.LDAP是一个协议和一种语言,它定义一种用来存储,标识和检索服务的标准方法,同时提供了一种管理信息目录的简化方式,无论这些信息是与一个组织内的用户有关,还是与已连接到一个网络的Oracle服务有关.
在服务器上配置Oracle Net
了解Oracle监听器,监听器响应连接请求.
4种连接方法类型:
专用连接:直接握手方法
专用连接:重定向方法
oracle Shared Server:直接握手方法
oracle Shared Server:重定向方法
管理Oracle监听器
用Oracle Net Manager 管理监听器.
用Oracle Enterprise Manager管理监听器测试
用lsnrctl管理监听器:
启动:lsnrctl start
重新装入监听器::lsnrctl reload
显示监听器的状态:lsnrctl status
列举服务:lsnrctl service
动态地注册服务
实例向本地计算机上锁定义的监听器进行了注册.动态服务注册使得管理员能够利用其他特性,比如符负荷均衡和自动故障切换.PMON进程负责向监听器注册这些信息.
当使用了动态服务注册后,管理员将看不到listener.ora中锁列举得服务器.要想查看文件中所列举得服务,运行lsnrctl service命令.
配置参数:INSTANCE_NAME,SERVICE_NAME
如:Instance_name=DBA
Service_name=DBA.GR.COM
该监听器必须被配置为默认监听器,否则需指定参数LOCAL_LISTENER.
如:local_listener="(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=WEISHAN)(PORT=1522)))
使用多个监听器时的附加配置
如果用户拥有一个含有大量并发连接请求的复杂网络环境,或者正在使用一个ORACLE RAC这样的高级数据库设计,则可以配置多个监听器更好的管理连接负荷.读者由此增大了功能度.这些特性包括:
Connect-Time Failover,Transparent Application Failover,Client Load Balancing,Connection Load Balancing.
Connect-Time Failover(连接时间故障切换)
客户tnsnames.ora中指定多个监听器位置.如果连接到第一个监听器失败,则尝试连接监听器列表中的下一个监听器.
Transparent Application Failover(透明应用故障切换TAF)
如RAC中,TAF进行故障切换,并重新建立应用软件到服务连接.它允许客户应用软件自动重新连接到数据库(如果连接出现故障),而且可选地继续执行一条已在运行中的SELECT语句.重新连接从OCI库中自动发生. 测试
Client Load Balancing(客户负载平衡)
允许客户从一个监听器列表中随机地挑选.Oracle Net遍历这个监听器列表,并在现有监听器之间平衡连接请求地符合.
测试
Connection Load Balancing(连接负荷平衡)
允许更好地在一个Oracle Shared Server环境内的一组调度程序之间分布连接
诊断服务器段连接问题
服务器端计算机与数据库检查
检查服务器计算机:ping
检查数据库:sql*plus尝试本地连接
检查数据库对所有用户是开放的
检查用户权限
服务器段网络检查
检查监听器:lsnrctl status
检查GLOBAL_DBNAME
检查监听器协议:lsntctl service
检查服务器协议:ping(tcp/ip)
检查服务器协议适配器:调用OUI程序,并检查已安装协议的列表.在Unix平台上,可以使用Adapters实用工具来保证适当的协议适配器被链接到Oracle.
[xxx]./adapters oracle
检查连接超时设置
INBOUND_CONNECT_TIMEOUT设置成一个较大的值,加大有效响应的等待时间.
服务器上Oracle Net日志和跟踪
服务器日志:监听器日志,Unix系统上是$oracle_home/network/log,windows下是%oracle_home%\network\log. 测试
服务器跟踪启用,查看,测试
配置客户Oracle Net
客户端名称解析:该客户必须提供3段信息:用户ID,密码和网络服务名称.网络服务名称用一个连接描述符的形式提供在网络中查找一个oracle服务所必须的信息.
网络服务的5种解析方法.
oracle Internet Directory,External Naming,Host Naming,Oracle easy connect, Local Naming.
oracle Internet Directory:处理含有许多oracle服务器的复杂网络时有优势.管理员可以在一个集中位置上配置和管理Net service Names和路径描述符信息.
External Naming:使用一个非oracle工具管理和解析Oracle服务名称,例如:NIS
主要考察以下三种
Host Naming:
oracle Easy Connect Naming:
10g新引进的,指定主机,端口,服务名称
如:connect scott/tiger@jlsjls:1522/orcl.com
Local Naming:也叫做tnsnames.ora方法.网络服务名称,网络协议,主机名和端口,服务名,测试网络服务名连接
使用EM配置本地命名, 测试
诊断并解决客户端连接问题
检查客户/服务器联系:ping
确定客户正用来到达服务器的网络路由:
xxx:/home/oracle>traceroute 10.15.9.11
cmd>tracert 10.20.3.3
检查客户/监听器联系
cmd>tnsping orcl 2 (tnsping工具尝试连接一个oracle监听器)
检查本地命名配置文件
查找多客户网络配置文件(略)
检查网络文件位置
检查NAMES.DIRECTORY_PATH
检查NAMES.DEFAULT_DOMAIN
检查客户协议适配器
检查客户端错误码
************$5 oracle 共享服务器**************************************
oracle Shared Server适用于"高思维"应用.高思维应用由再事务模式中使用自然暂停的小事务组成.许多基于Web的应用适合这个模型.要确定一个应用是不是Oracle Shared Server的候选者时,检查该应用,并考虑一个与数据库服务器的典型客户交互所生成的网络通信量.如果给定最流行网络的速度,并且一个典型的客户交互包含16kb或更少的数据,那么它是一个适合使用Oracle Shared Server的候选者.
oracle Shared Server的基础结构
使用Oracle Shared Server时的PGA与SGA变化
当Oracle Shared Server得到配置时,Oracle给SGA增加两种新型的结构;请求队列喝响应队列.专用服务器中是不存在这两种结构的.对于所有的调度程序,只存在一个请求队列,但每个调度程序都有各自的响应队列.
专用服务器环境中,每个服务器中有一个叫做PGA的内存段,是维护关于每个客户会话信息的地方,包括赋值变量,游标信息以及客户的分类数据.在oracle shared server环境中,这个信息被转移到SGA中一个叫做UGA的区域.读者可以配置SGA中一个Large Pool的特殊区域来容纳UGA的大部分.
专用服务器PGA:游标状态,用户会话数据,栈空间
共享服务器PGA:栈空间
由上可知:专用服务器,UGA是在PGA中分配的.而在SHARED SERVER中,UGA在LARGE POOL池中分配.
Virtual circuit:正由一个调度程序所维护的每个连接都被分配给一个共享内存段,并形成一个虚拟电路.调度程序使用这个共享内存段来管理客户Oracle数据库之间的通信.
监听器收到一个连接请求,它检查每个调度程序的当前连接符合,并把客户连接请求重定向到最小负荷调度程序.确定所有节点的最小负荷调度程序--如果RAC正得到使用.
配置Oracle Shared Server
oracle 10g不必指定DISPATCHERS参数就能启用一个默认网络环境中的共享服务器(简化了).
oracle 10g的一个优点是管理Oracle Shared Server所需要的所有参数都能被动态地修改.
使用DISPATCHERS参数
只需指定ADDRESS,DESCRIPTION或PROTOCOL即可.数据越密集型地操作喝并发连接地数量越大,每个调度程序处理地会话应该越少.一般来说,起始点是为每个调度程序预留50个并发会话.
读者可以用如下公式来确定最初要配置地调度程序数量:
Number of Dispatchers
=CEIL(maximum number of concurrent sessions/connections per dispatcher)
example:DISPATCHERS="(PRO=TCP)(DIS=3)(PRO=IPC)(DIS=2)"
由V$session视图可确定并发连接地数量
v$LICENSE
SESSION_CURRENT:会话的当前数量
SESSION_HIGHWAITER:自实例启动以来的最大并发会话数量
修改:ALTER SYSTEM SET DISPATCHERS="(PRO=TCP)(DIS=5)";
使用DISPATCHERS参数配置连接集储特性
Connection Pooling(连接集储):通过自动断开空闲连接和使用空闲连接为一个输入连接请求提供服务,给Oracle Shared server赋予了较大数量连接的能力.
设置Pool,Tick属性具体看书
DISPATCHERS="(PROTOCOL=TCP)(DISPATCHERS=1)(POOL=ON)(TICK=1)(CONNECTIONS=500)(SESSIONS=1000)"
使用MAX_DISPATCHERS参数
使用SHARED_SERVERS参数:默认1,0或者未设置禁用.一般来说,对于将要使用共享服务器连接的各种高思维应用软件,每个共享服务器拥有25个并发连接应该是足够使用的.
SHARED_SERVER_SESSIONS:使用这个参数限制共享服务器会话的总数量.
MAX_SHARED_SERVER:
管理共享服务器
>lsnrctl service 显示关于调度程序进程的信息
动态性能视图
V$DISPATCHER:关于调度程序的信息,活动情况,正在处理的连接数量,自实例启动以来已经处理的总连接数量.
sql>select name,status,messages,idle,busy,bytes,breaks from v$dispatcher;
V$DISPATCHER_CONFIG 新增的视图,关于调度程序的配置信息.
sql>select conf_indx,dispatchers,connections,sessions sess,service from v$dispatcher_config where network like '%TCP%';
V$DISPATCHER_RATE:调度程序的统计信息
sql>select name,cur_event_rate,cur_msg_rate,cur_svr_byte_rate from v$dispatcher_rate;
V$QUEUE:请求和响应队列的信息,比如请求在队列中等待多长时间
sql>select * from v$queue;
V$CIRCUIT:显示oracle shared server虚拟电路的信息,
sql>select circuit,dispatcher,server,waiter WTR,status,queue,bytes from v$circuit;
V$SHARED_SERVER:显示共享服务器进程的信息
sql>select name,status,messages,bytes,idle,busy,requests from v$shared_server;
V$SHARED_SERVER_MONITOR:...最大并发连接数,启动的服务起数..等信息,有助于调节oracle shared server.
sql>select maximum_connections "MAX CONN",maximum_sessions "MAX SESS",servers_started "STARTED" from v$shared_server_monitor;
V$SESSION:有关客户会话的丰富信息.
sql>select username,program,server from v$session;
在共享服务器环境中请求一个专用连接
本地命名中添加....略
调节共享服务器选项测试
确定Large Pool 大小:Large Pool应该大得足以容纳读者的所有共享服务器连接的有关信息.一般所来,每个连接需要1MB到3MB之间的空间,但这取决于该客户的活动类型.正在做大量分类操作或打开许多游标的对象将使用更多的内存.
sql>alter system set large_pool_size=10m;
sql>select * from v$sgastat where pool = 'large pool';
确定是否有足够的调度程序:如果调度程序的繁忙的时间百分比超过50%,则需要考虑启动更多的调度程序.
sql>select name,(busy/(busy+idle)) *100 "Dispatcher %busy Rate" from v$dispatcher;
sql>alter system set dispatchers ="(PRO=TCP)(DIS=4)";
测量用户等候调度程序多长时间:数值过大,需要增加更多的调度程序
sql>select decode(sum(totalq),0,'No response',Sum(wait)/sum(totalq)) "Average ait time" from v$queue q,v$dispatcher d where q.type='DISPATCHER' AND q.paddr=d.paddr;
监视一段时间,如果不断增大,则需要考虑增加更多的调度程序.
确定是否有足够的共享服务器:....
sql>select decode(totalq,0,'No Requests') "Wati Time", Wait/totalq || ' hundredths of seconds' "Average wait time per request" from v$queue where type='COMMON';
监视之,如果不断增大,考虑增加更多共享服务器.
查询当前的sql>select name,status,requests,messages,bytes,breaks from v$shared_server;
以上标记测试的,大都未测试,赶时间看书
*************$6 用户管理与安全******************************************
术语"用户账号","账号","用户","模式"均是可以互换的,并且指一个拥有模式对象的数据库用户账号.
配置身份验证:密码验证,外部验证,全局验证
密码验证式用户:略
外部验证式用户:当一个外部验证式用户连接到数据库时,数据库核实用户名是一个有效的数据库账号,并确信操作系统已经完成了身份验证.这些账号有时称作OPS$(发音为ahps dollar)账号,引进这些账号时,他们必须加上前缀.(一般OPS$,有参数可以设置)
CREATE USER OPS$ORACLE IDENTIFIED EXTERNALLY
外部验证经常用于管理性脚本,以便密码不必嵌入在一个人类可以可理解的脚本中.
全局验证式用户:当一个全局验证式用户试图连接到数据库时,数据库验证用户名时一个有效的数据库账号,并把连接信息传递给高级安全选项以供验证.高级安全选项支持几个用于身份验证的机制,其中包括生物测定,X.509证书,Kerberos和RADIUS.
CREATE USER SPY_MASTER IDENTIFIED GLOBALLY AS 'CN=SPY_MASTER,OU=TIER2,O=SECURITY,C=US';
分配默认表空间
......default tablespace.....
分配临时表空间
....temporary tablespace....
给用户分配概况
...profile resource_profile;
授予和取消特权
对象特权:模式对象上的特权,比如表,视图,序列,过程一级包等模式对象.
系统特权:数据库级操作上的特权,比如连接到数据库....
角色特权:一个用户作为一个角色所拥有的对象与系统特权.
授予对象特权
各种权限以后细看....
grant....with grant option...当是角色时,不能使用with grant option
如果使用..with grant option后,又取消该特权,该取消发生级联作用.
一个被授权者可以从多个授权者那里获得一个特权,当同一个特权的这种多次授权发生时,取消这些授权之一将不删除该特权.
授予系统特权
Oracle有170多种系统特权,并且所有这些系统特权均被列举在SYSTEM_PRIVILEGE_MAP数据目录视图中.
熟悉以下几组特权.
数据库:
ALTER DATABASE,ALTER SYSTEM,AUDIT SYSTEM(语句审计),AUDIT ANY(任意一个模式中对象上的对象审计)
调试:
DEBUG CONNECT SESSION(允许被授权者把当前会话连接到一个调度程序.)
DEBUG ANY PROCEDURE(允许被授权者调试数据库中的所有PL/SQL和Java代码.相当于授予每个适用对象的DEBUG对象特权.
索引:
CREATE ANY INDEX:允许被授权者在任意一个模式中创建一个索引.
ALTER ANY INDEX:允许被授权者更改任意一个模式中的索引
DROP ANY INDEX:允许被授权者从任意一个模式中删除索引.
作业调度程序:
CREATE JOB:允许被授权者在他们自己的模式中创建作业,程序和时间表.
CREATE ANY JOB:...
EXECUTE ANY PROGRAM:
EXECUTE ANY CLASS:
MANAGE SCHEDULER:
过程
CREATE PROCEDURE
CREATE ANY PROCEDURE
ALTER ANY PROCEDURE
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
概况
CREATE PROFILE
USER语句(需要ALTER USER特权)
ALTER PROFILE
DROP PROFILE
角色
CREATE ROLE
ALTER ANY ROLE
DROP ANY ROLE
GRANT ANY ROLE
序列
CREATE SEQUENCE
CREATE ANY SEQUENCE
ALTER ANY SEQUENCE
DROP ANY SEQUENCE
SELECT ANY SEQUENCE
会话
CREATE SESSION
ALTER SESSION
ALTER RESOURCE COST
RESTRICTED SESSION
同义词
CREATE SYNONYM
CREATE ANY SYNONYM
CREATE PUBLIC SYNONYM
DROP ANY SYNONYM
DROP PUBLIC SYNONYM
表
CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
COMMENT ANY TABLE
SELECT ANY TABLE
INSERT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE
LOCK ANY TABLE
FLASHBACK ANY TABLE
....略
.....
和对象特权相同的是,可以把系统特权授予特殊用户PUBLIC.给PUBLIC授予特权允许任何一个拥有数据库帐户的人运用这个特权.
如果利用WITH ADMIN OPTION 关键字授予一个系统特权,随后又取消该特权,那么被授权者的特权将不被取消.和对象特权不同的是,系统特权的取消不发生级联作用.
角色特权
角色特权给被授权者授予一组系统,对象和其他角色特权.角色可以是密码保护的,所以用户可能拥有一个已授给他们的角色,但还不能在所有数据库会话中使用该角色.
创建与管理角色
CREATE ROLE appl_dba
SET ROLE appl_dba IDENTIFIED BY seekwrit;
授予角色特权
GRANT oem_monitor TO charlie;
GRANT PLUSTRACE TO PUBLIC;
GRANT create ANY TABLE TO appl_dba with admin option;
当提到给一个角色授予WITH ADMIN OPTION时,角色的行为看起来象系统特权,而且后续的取消不会发生级联作用.
启用角色
set role hr_admin identified by "my!seekrit",employee;
set role all except hr_admin;
查看当前会话得到启用的角色
select role from sessin_roles;
查看已分配给用户或特殊用户PUBLIC的角色.
USER_ROLE_PRIVS describes the roles granted to the current user.
select granted_role from user_role_privs where username in(USER,'PUBLIC');
查看已在读者的会话中得到启用和直接授给读者或PUBLIC的角色,但不包括读者所继承的那些角色,执行下列语句.
SELECT role FROM session_roles INTERSECT
SELECT granted_role FROM user_role_privs
WHERE username IN(USER,'PUBLIC');
禁用角色
SET ROLE NONE
SET ROLE ALL EXCEPT role_list
不存在任何有选择性地禁用单个角色的方法.不能禁用自己作为另一个角色所继承来的角色,除非禁用了父角色.
设置默认角色
...ALTER USER scott DEFAULT ROLE ALL EXCEPT plustrace;
由于一个角色的创建者自动拥有该角色,并且该角色被配置为一个默认角色,所以创建了许多角色的管理性用户(比如SYS或SYSTEM)可能需要修改他们的默认角色列表.
按用户控制资源使用
分配表空间限额
....quota 100M ON USERS;
利用概况分配资源限额
一个数据库调用是一个语法分析,一个执行或一个取数据。通常,数据库隐含地替读者执行这些调用。读者可以明确地从JAVA,PS/SQL或OCI程序中做这些数据库调用。一个逻辑读是数据库在执行SQL语句期间所完成的工作量的一种度量。逻辑读被计算为一致获取与当前模式获取的总和。
Logical reads include blocks read from both memory and disk.
Logical reads :The sum of "db block gets" plus "consistent gets"
db block gets :Number of times a CURRENT block was requested
consistent gets:Number of times a consistent read was requested for a block
db_block_gets + consistent_gets = LOGICAL IO
physical_reads = PHYSICAL IO
http://www.oracledba.com.cn/blog/?p=37 一篇帖子很好,以后看
启用(9i,10g默认都没启用)
ALTER SYSTEM SET resource_limit=TRUE SCOPE=BOTH;
支持下列限定资源的字句
CONNECT_TIME sql>CREATE PROFILE agent LIMIT CONNECT_TIME 10;
CPU_PER_CALL sql>CREATE PROFILE agent LIMIT CPU_PER_CALL 3000; (以毫秒为单位,即1秒的百分数)
sql>ALTER PROFILE data_analyst LIMIT CPU_PER_CALL UNLIMITED;
CPU_PER_SESSION sql>CREATE PROFILE agent LIMIT CPU_PER_SESSION 30000;
IDLE_TIME sql>ALTER PROFILE agent LIMIT IDLE_TIME 10 (分钟,运行时间很长的SQL语句不受这个设置影响)
LOGICAL_READS_PER_CALL sql>ALTER PROFILE agent LIMIT LOGICAL_READS_PER_CALL 2500;
LOGICAL_READS_PER_SESSIONsql>ALTER PROFILE agent LIMIT LOGICAL_READS_PER_SESSION 1000000;
PRIVATE_SGA sql>以字节为单位限定一个连接到共享服务器的用户能够给PGA中的持久区域分配的SGA内存量.(书解释)
sql>用户能够在SGA中使用的私有的空间数单位bytes .共享服务器模式下PGA的一些区域(UGA)到了SGA中(网络解释)
sql>ALTER PROFILE agent LIMIT PRIVATE_SGA 2500;
SESSION_PER_USER sql>ALTER PROFILE agent LIMIT SESSION_PER_USER 2;
COMPOSITE_LIMIT :限定在一个用户会话期间能够被消费的服务单元数量。服务单元被计算为CPU_PER_SESSION,LOGICAL_READS_PER_SESSION,CONNECT_TIME,PRIVATE_SGA的加权总和。加权使用ALTER RESOURCE COST 语句设立,for example: alter resource cost connect_time 0 ;并能够从RESOURCE_COST数据目录视图中被查看。
sql>ALTER PROFILE agent LIMIT COMPOSITE_LIMIT 1000000;
sql>select * from dictionary where instr(comments,'profile')>0; DBA_PROFILES
应用最少特权原则
DBA_TAB_PRIVS:DBA_TAB_PRIVS describes all object grants in the database
DBA_SYS_PRIVS:DBA_SYS_PRIVS describes system privileges granted to users and roles.
example:列出由用户sys所拥有的,并且已经把execute特权授给了public的各个包
select table_name from dba_tab_privs p,dba_objects o where p.owner=o.owner and p.table_name=o.object_name and p.owner='SYS' and p.privilege='EXECUTE' and p.grantee='PUBLIC' AND o.object_type='PACKAGE';
列出所有拥有SELECT ANY TABLE特权的用户
select * from DBA_SYS_PRIVS WHERE PRIVILEGE='SELECT ANY TABLE';
保护数据目录:确保拥有select_any_table特权的用户无法通过设置:(第一个字母是欧)O7_dictionary_accessibility=false来访问数据目录的基础表。这是默认设置。
从PUBLIC中取消取消不必要的特权:
REVOKE EXECUTE ON utl_tcp FROM PUBLIC;
REVOKE EXECUTE ON utl_smtp FROM PUBLIC;
REVOKE EXECUTE ON utl_http FROM PUBLIC;
REVOKE EXECUTE ON utl_file FROM PUBLIC;
REVOKE EXECUTE ON dbms_obfuscation_toolkit FROM PUBLIC;
REVOKE EXECUTE ON dbms_crypto FROM PUBLIC;
限定拥有管理特权的用户
SYSDBA:最高,没有任何理由授给SYS之外的用户
DBA:允许被授权者在整个数据库分配特权和操纵数据,慎重。
ANY系统权限:select any table,grant any role,delete anyy table...
不启用REMOTE_OS_AUTHENT 初始化参数REMOTE_OS_AUTHENT的默认设置是FALSE.
每个用户只应该被授予执行其工作所需要的最少特权.这个原则是一个以初始封闭原理为中心的原则.
我们应该采取几个动作,同时设置或锁定数据库
保护数据目录:确保拥有SELECT ANY TABLE特权的用户无法通过设置07_DICTIONARY_ACCESSIBILITY=FALSE来访问数据目录的基础表.
从PUBLIC中取消不必要的特权.具体看书
限定拥有管理特权的用户:
看DBA和SYSDBA的区别
不启用REMOTE_OS_AUTHENT
管理默认的用户账号
sys和system账号分别是数据目录拥有者和一个管理性帐户.sysman和dbsnmp帐户由Enterprise Manager使用.
实现标准密码安全特性:找到这个脚本的位置,执行。
$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
@%ORACLE_HOME%\rdbms/admin\utlpwdmg.sql
显示表空间限额
select tablespace_name,username,bytes,max_bytes from dba_ts_quotas;
显示概要文件的信息
select profile,resource_name,limit from dba_profiles where profile='DEFAUTL';
审计数据库活动()
审计记录可以保存在数据库中,也可以存储在操作系统文件中以获得更高的安全性
Audit_trail:把审计记录写到什么地方.默认位置是NONE.
sql>alter system set AUDIT_TRAIL=DB scope=spfile;
写到数据库:大部分审计项被记录在sys.aud$表中。
写到OS中:unix--audit_file_dest ;windows--Event Viewer日志文件中
AUDIT_TRAIL=OS(不测试了)
....
四个审计级别:语句,特权,对象和精细访问.
管理语句审计
audit table;
audit table by cxy;
audit table by cxy whenever not successful;
audit insert table by cxy by access;
识别已启用的语句审计选项
select audit_option,failure,success,user_name from dba_stmt_audit_opts order by audit_option,user_name;
禁用语句审计
noaudit session;
noaudit not exists;
noaudit table by cxy;
检查审计跟踪
select username,timestamp,action_name from dba_audit_trail where username='TEST01';
管理特权审计
启用
audit create any table;
audit create any table by test01;
标识已启用的特权审计选项
select privilege,user_name from dba_priv_audit_opts order by privilege,user_name;
禁用
noaudit alter profile;
noaudit delete any table by juanita;
noaudit alter user by juanita;
管理对象审计:监视和记录需要一个指定对象特权的sql语句的执行,比如select,insert,update,delete或execute对象特权
和语句或系统特权审计不同的是,模式对象审计不能被限定于指定用户--它针对所有用户或者针对无用户被启用.
启用
audit select on hr.EMP_DETAILS_VIEW BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SELECT ON HR.EMP_DETAILS_VIEW BY SESSION WHENEVER NOT SUCCESSFUL;
标识已启用的对象审计选项
SELECT owner,object_name,object_type,ins,sel FROM dba_obj_audit_opts WHERE wner='HR' AND object_name='EMP_DETAILS_VIEW';
禁用对象审计
NOAUDIT SELECT ON HR.EMP_DETAILS_VIEW WHENEVER NOT SUCCESSFUL;
清除审计跟踪
DELETE FROM SYS.AUD$ WHERE TIMESTAMP#<SYSDATE-90;< p>
管理精细审计(Fine-grained auditing,简称FGA)允许读者基于数据的内容监视和记录数据访问.
可以使用PL/SQL包DBMS_FGA来配置和管理FGA
参数解释:object_schema,object_name,policy_name,audit_condition,audit_column,handler_schema,handler_module,enable,audit_trail,audit_column_ops
object_schema:待审计对象的所有者,默认NULL
object_name: 待监视对象的名称
policy_name:心策略的一个唯一性名称
audit_condition:sql表达式,为真时,一个审计记录创建,语法有些限制,如不能使用一些函数,子查询或者序列.
audit_column: 逗号分隔的列列表,数据库将要访问这些列.如果audit_column被参考,且audit_condition为true,审计记录得到创建.
handler_schema:事件处理程序的所有者
handler_module:事件处理程序过程的名称.
enable:启用,默认true
statement_types:要监视那些类型的sql语句.默认是select
audit_trail:是否把sql语句和用于触发sql的赋值变量记录在审计跟踪中.默认值DBMS_FGA.DB_EXTENDED记录之,应该把参数设置成DBMS_FGA.DB,以便节省空间.
audit_column_ops: 两个有效值:DBMS_FGA.ALL_COLUMNS DBMS_FGA.ANY_COLUMNS
创建FGA策略(未启用)
EXECUTE DBMS_FGA.ADD_POLICY(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD',audit_column=>'SALARY,COMMISSION_PCT',enable=>FALSE,statement_types=>'SELECT');
启用
EXECUTE DBMS_FGA.ENABLE_POLICY(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD');
禁用
DBMS_FGA.DISABLE_POLICY(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD');
删除FGA策略
EXECUTE DBMS_FGA.DROP_POLICY(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD');
识别数据库中的FGA策略
SELECT policy_name,object_name||'.'||object_name object_name,policy_column,enabled,audit_trail from dba_audit_policies;
制作FGA审计跟踪数据项的报表
SELECT db_user,timestamp,userhost from dba_fga_audit_trail where policy_name='COMPENSATION_AUD';
************$7 使用SQL,PL/SQL和实用程序管理数据************************
大量的数据库特性是作为PL/SQL程序来实现的,而且知道怎样识别和处理这些PL/SQL程序对数据库管理员的工作效率来说是至关重要的.
5种类型的命名的PL/SQL程序:Function,Procedure,Package,Package body,Trigger,这些程序通常被存储在数据库中.每个存储式PL/SQL程序的
名称和源代码都可以从DBA_SOURCE和DBA_TRIGGERS数据目录视图中获取,尽管有些供给的程序包经过了"包装",二进制的.
看sql开发指南一书。
处理函数
DECLARE today DATE DEFAULT SYSDATE;
today:=SYSDATE;
IF TO_Char(SYSDATE,'Day')='Monday'
SELECT COUNT(*) FROM hr.employees WHERE hire_date>SYSDATE-30;
SELECT TRUNC(SYSDATE)
_____________________________________________________________
CREATE OR REPLACE FUNCTION is_weekend(
check_date IN DATE DEFAULT SYSDATE)
RETURN VARCHAR2 AS
BEGIN
CASE TO_CHAR(check_date,'DY')
WHEN 'SAT' THEN
RETURN 'YES';
WHEN 'SUN' THEN
RETURN 'YES';
ELSE
RETURN 'NO';
END CASE;
END;
-------------------------------------------------------------------
处理过程
CREATE OR REPLACE PROCEDURE archive_orders
(cust_id IN NUMBER
,retention IN NUMBER) IS
BEGIN
DELETE orders
WHERE customer = cust_id
AND order_date < SYSDATE - retention;
INSERT INTO maint_log
(action,action_date,who) VALUES
('archive orders '|| retention || ' for '|| cust_id
,SYSDATE,USER);
END;
---------------------------------------------------------------------
set serverout on
EXEC DBMS_OUTPUT.PUT_LINE('HELLO WROLD!');
--------------------------------------------------
CALL DBMS_OUTPUT.PUT_LINE('HELLO WROLD!');
---------------------------------------------------
处理程序包
一个程序包就是一个用于函数,过程和数据结构(比如记录,游标,变量,和约束)的容器.一个程序包拥有一个叫做规约(简写为spec)的公用部分和
一个叫做程序包体的私有部分.
程序包规约:PACKAGE类型
程序包体:PACKAGE BODY类型
-----------------------------------------------------
CREATE OR REPLACE PACKAGE table_util IS
FUNCTION version RETURN VARCHAR2;
PROCEDURE truncate (table_name IN VARCAHR2);
END table_util;
--------------------------------------------------
CREATE OR REPLACE PACKAGE BODY table_util IS
version_string VARCHAR2(8) := '1.0.0';
FUNCTION version RETURN VARCHAR2 IS
BEGIN
RETURN version_string;
END;
PROCEDURE truncate(table_name IN VARCHAR2) IS
BEGIN
IF UPPER(table_name) = 'ORDER_STAGE'
OR UPPER(table_name) = 'SALES_ROLLUP'
THEN
EXECUTE IMMEDIATE 'trunate table ' || UPPER(table_name);
ELSE
RAISE_APPLICATION_ERROR(-20010,Invalid table for truncate: '|| table_name);
END IF;
END;
END table_util;
------------------------------------------------------------------------------------
处理触发时间和管理触发器
DML,DDL,数据库事件
具体见书
--------------------------------------------------------------
CREATE OR REPLACE TRIGGER employee_trg
BEFORE INSERT OR UPDATE OF hire_date
ON employee FOR EACH ROW
BEGIN
log_update(USER,SYSTIMESTAMP); --这个函数查不到???
IF INSERTING THEN -- if fired due to insert
:NEW.create_user := User;
:NEW.create_ts :=SYSTIMESTAMP;
ELSIF UPDATING THEN -- if fired due to update
IF :OLD.hird_date <> :NEW.hire_date THEN
RAISE_APPLICATION_ERROR(-20013,'update of hire_date not allowed');
END IF;
END IF;
END;
-----------------------------------------------------------------------------------
事件:INSERT,UPDATE,DELETE
顺序:在语句触发器之前-->行触发器之前-->行触发器之后-->语句触发器之后.
DDL事件触发器:略
数据库事件触发器:略
使用和管理PL/SQL程序
desc 包
每当一个依赖对象通过alter 语句被编译时,一个pl/sql程序就变得无效。下次调用是自动重新编译。但我们可以选择手工编译无效的PL/SQL
程序,for example:
ALTER PROCEDURE archive_orders COMPILE;
ALTER FUNCTION is_weekend COMPILE;
alter package table_util compile body;
配置PL/SQL来获取较佳的性能
PLSQL_WARNING:10G新引进的,指出潜在问题,帮助开发人员创建更好的程序.生产中禁用,alter system set plsql_warning='DISABLE:ALL'
scope=both;
PLSQL_DEBUG:迫使后续的pl/sql编译都得到翻译并包含辅助的调试信息.生产中禁用它.
alter system set plsql_debug = false scope=both;
PLSQL_OPTIMIZE_MODE:一个优化的编译程序,启用它.
alter system set plsql_optimize_level=2;
PLSQL_CODE_TYPE:指定将plsql代码编译成默认翻译的字节码还是本级代码.本机代码较长编译时间和较大一些的管理性开销,较快速的运行时性
能.
启用本机编译:c编译程序,设置参数PLSQL_NATIVE_LIBRARY_DIR,并保证该目录存在.设置参数PLSQL_CODE_TYPE='NATIVE' ...以后测试
创建目录对象,需要拥有create any directory系统特权,谨慎,这个数据库采用数据库实例所有者的操作系统凭证.
create directory dump_dir as '/home/oracle/data_pump/dumps';(用操作系统命令建立目录,保证存在该目录)
create directory log_dir as '/home/oracle/data_pump/logs';(用操作系统命令建立目录,保证存在该目录)
数据转储
Data Pump[数据转储]工具是10g引进的一个特性.它是一种在数据库之间或者在数据库与操作系统文件之间传输数据或元数据的高速机制.Data
Pump采用目录路径上载和直接路径装入技术.和exp和imp不同,Data Pump工具运行在服务器上.因此数据库管理员必须使用一个数据库目录来指定转储文件和目录文件位置,给用户操作目录的权限.(grant read,write on directory XXXXXX to public | XXXXX)
使用Data Pump导出数据
运行expdp :
数据库导出方式: expdp system/cxx full=y dumpfile=chap7a:fulla%U.dmp,chap7b:fullb%U.dmp filesize 2G parallel=2 logfile=chap7:full.log
对象模式导出
expdp hr/hr dumpfile=chap7:hr.dmp logfile=chap7:hr.out
表导出方式
expdp hr/hr dumpfile=chap7:job_tabs.dmp nologfile=y content=metadata_only tables=jobs,job_history
表空间导出方式
expdp system/cxy110 dumpfile=chap7:users_ts.dmp logfile=chap7:users_ts.out tablespaces=users(ora-39139 错误,data pump不支持xml....解决:用传统的exp)
expdp test07/cxy110 dumpfile=chap7:tbs07_ts.dmp logfile=chap7:tbs_ts.out tablespaces=tbs07
DBMS_DTAPUMP
使用DBMS_DTAPUMP设置一个DATA PUMP比仅使用独立程序麻烦一些,但是可提供较高的功能度和控制权.
example:
DECLARE
h2 NUMBER; --HANDLE FOR THE dATE pUMP SESSION
BEGIN
-- Obtain a handle to an export Data pump session
h2 := dbms_datapump.open(
operation => 'EXPORT' --export not import
,job_mode => 'SCHEMA'); --schema mode
-- ,job_mode => 'FULL'); --database mode
-- ,job_mdoe => 'TABLE'); --table mode
-- ,job_mode => 'TABLESPACE'); --tablespace mode
--define the log file
dbms_datapump.add_file(
handle => h2 -- from the open call
,filename => 'hr.out' -- file name
,directory => 'CHAP7' --database directory object
,filetype => dbms_datapump.ku$_file_type_log_file);
--define the dump file
dbms_datapump.add_file(
handle => h2 -- from the open call
,filename => 'hr.dmp' -- file name
,directory => 'CHAP7' -- database directory object
,filetype => dbms_datapump.ku$_file_type_dump_file);
--define schemas to exprot
dbms_datapump.metadata_filter(
handle => h2 -- from the OPEN call
,name => 'SCHEMA_EXPR' --schema name filter
-- ,name => 'INCLUDE_NAME_EXPR' --TABLE NAME FILTER
-- ,name => 'EXCLUDE_NAME_EXPR' --table name filter
-- ,name => 'TABLESPACE_EXPR' -- tablespace name filter
,value => 'IN(''hr'')'); --name list
--invoke data pump
dbms_datapump.start_job(handle => h2); -- from the open call
-- run the job in the background
dbms_datapump.detach(handle => h2);
end;
EM Database Control(略,可从中生成PL/SQL代码,熟悉DATAPUMP)
使用Data Pump 导入数据
impdp system/paasword full=y dumpfile=chap7:FULL.DMP nologfile=y sqlfile=chap7:FULL.SQL(只生成DDL语句,不导入数据)
impdp system/password network_link=prod schema="HR" remap_schema="HR:HR_TEST" content=metadata_only logfile=chap7:HR_TEST.LOG(先创建好DB_LINK,是否不支持连接远程ORACLE 9I???)
impdp system/password full=y dumpfile=chap7:HR.DMP nologfile=y sqlfile=chap7:HR_proc_give.SQL include=PROCEDURE:"LIKE 'GIVE%'"
impdp system/password network_link=prod schema="HR" remap_schema="HR:HR_TEST" content=data_only include=TABLE:"= 'DEPARTMENTS'" logfile=chap7:HR_TEST.LOG
impdp system/cxyxxxx tablespaces=TBS07 dumpfile=chap7:tbs07_ts.dmp nologfile=y(导入表空间,先在目标数据库创建表空间和用户,dumpfile是一个表空间的导出文件)
使用包和使用OEM略
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。