1、ORACLE操作手册 DOC.NO. TIMESON—SM—2002-11—0001A Normal (公开) 本地电信业务计费帐务系统 ORACLE操作手册 Version 1。0.0 2002.11.05 TIMESON 长沙天辰科技有限公司2000,2001,2002 All Rights Reserved 前 言 3 1. 数据库的创建 4 1。1. 以下为ORACLE启动初始文件initora.ora 4 1。2。 以下是建库脚本 5 2。 数据库基本操作 9 2.1。 数据库的正常启动
2、9 2。2。 安装启动与非安装启动 10 2.3. 独占和共享启动 10 2。4。 约束启动 10 2.5。 强制启动 11 2。6。 数据库关闭 11 2。7. PL/SQL基本程序的编写 11 2。7。1。 SQL语言简介 12 2.7.2. PL/SQL简介 16 3。 解决RDBMS问题 22 3.1. 性能优化 22 3.1.1. 优化内存 23 3。1。2。 优化输入/输出 25 3.1.3. 优化排序 27 3.1.4。 优化索引建立 27 3。2。 备份和恢复 27 3.2。1。 备份提示 28 3.3。 Oracle 8 Server诊断特性
3、 29 3。3。1. Oracle跟踪文件 30 3.3。2. 设置跟踪事件 31 3。3.3。 V$监视视图 34 3。3.4. 锁实用程序 36 3。4。 Oracle错误分析和解决方案 37 3。4.1。 常见Oracle错误 37 3。4.2。 ORACLE内部错误 45 3。4。3。 优先权1/优先权2问题分类和诊断操作 46 3。5. 常见问题 48 前 言 为了加强计费系统数据库的操作安全及更有效的管理计费系统数据库,编写该操作手册。 在该手册若有错误及遗漏的地方还望各位读者不吝指出与谅解。 1. 数据库的创建 以下仅为数据
4、库创建的样例脚本,在实际系统中应根据数据库设计要与系统实际配置而改变参数: 1.1. 以下为ORACLE启动初始文件initora。ora #this sampale init file writen by wzy 2002/11/15 db_name = ”jf" instance_name = ora8 #service_names = ora #db_files = 1024 control_files = ("/home/oracle/OraCtl/control01.ctl", "/home/oracle/OraCtl/control02。ctl”, "/home/o
5、racle/OraCtl/control03。ctl") open_cursors = 100 max_enabled_roles = 50 db_file_multiblock_read_count = 8 db_block_buffers = 4096 shared_pool_size = 52428800 large_pool_size = 78643200 java_pool_size = 20971520 log_checkpoint_interval = 10000 log_checkpoint_timeout = 1800 processes = 115 p
6、arallel_max_servers = 5 log_buffer = 32768 max_dump_file_size = 10240 global_names = true #oracle_trace_collection_name = ”" db_block_size = 16384 #remote_login_passwordfile = exclusive #os_authent_prefix = "" job_queue_processes = 4 job_queue_interval = 60 open_links = 10 #large_pool_siz
7、e = 614400 java_pool_size = 20971520 distributed_transactions = 10 mts_dispatchers = ”(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)" mts_dispatchers = "(protocol=TCP)” #compatible = 8。1.0 sort_area_size = 65536 sort_area_retained_size = 65536 # log_archive_start = true 1.2. 以下是建库脚本
8、#!/bin/sh ORACLE_SID=ora8 export ORACLE_SID svrmgrl connect internal startup nomount pfile = $ORACLE_HOME/dbs/initora.ora CREATE DATABASE ”app1" controlfile reuse maxdatafiles 500 maxinstances 8 maxlogfiles 32 character set ZHS16GBK national character set ZHS16GBK DATA
9、FILE '/oradata/app1/system01。dbf’ SIZE 200M logfile group 1 (’/opt/oracle/oradata/app1/app1_redo01。log', '/oradata/app1/app1_redo01。log’) SIZE 20M, group 2 ('/opt/oracle/oradata/app1/app1_redo02。log’, ’/oradata/app1/app1_redo02.log’) SIZE 20M, group 3 (’/opt/oracle
10、/oradata/app1/app1_redo03。log’, '/oradata/app1/app1_redo03.log’) SIZE 20M; @/opt/oracle/product/8。1.7/rdbms/admin/catalog.sql; CREATE ROLLBACK SEGMENT r0 TABLESPACE SYSTEM STORAGE (INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS 20); ALTER ROLLBACK SEGMENT r0 ONLINE; REM ****
11、****** TABLESPACE FOR OEM_REPOSITORY *************** CREATE TABLESPACE OEM_REPOSITORY DATAFILE ’/oradata/app1/oemrep01.dbf’ SIZE 5M REUSE AUTOEXTEND ON NEXT 25M MAXSIZE 80M MINIMUM EXTENT 128k DEFAULT STORAGE ( INITIAL 128k NEXT 128k MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0); REM *
12、*********** TABLESPACE FOR ROLLBACK ***************** CREATE TABLESPACE RBS DATAFILE ’/oradata/app1/rbs01.dbf’ SIZE 200M REUSE DEFAULT STORAGE ( INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED PCTINCREASE 0); REM ************** TABLESPACE FOR TEMPORARY ***************** CREATE TAB
13、LESPACE TEMP DATAFILE '/oradata/app1/temp01。dbf' SIZE 200M REUSE DEFAULT STORAGE ( INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED PCTINCREASE 0) TEMPORARY; REM ************** TABLESPACE FOR USER ********************* CREATE TABLESPACE USERS DATAFILE ’/oradata/app1/users01。dbf' SIZE 5
14、0M REUSE DEFAULT STORAGE ( INITIAL 128k NEXT 128k MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0); REM ************** TABLESPACE FOR INDEX ********************* CREATE TABLESPACE INDX DATAFILE ’/oradata/app1/indx01。dbf' SIZE 50M REUSE DEFAULT STORAGE ( INITIAL 128k NEXT 128k MINEXTENTS 1 MA
15、XEXTENTS UNLIMITED PCTINCREASE 0); REM **** Creating four rollback segments **************add rollback segment to 20*** CREATE ROLLBACK SEGMENT r01 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r02 TABLESPACE RBS
16、STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r03 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r04 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENT
17、S 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r05 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r06 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K)
18、 CREATE ROLLBACK SEGMENT r07 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r08 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r09 TABLESP
19、ACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r10 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r11 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k
20、 MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r12 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r13 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED opti
21、mal 4096K); CREATE ROLLBACK SEGMENT r14 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r15 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r
22、16 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r17 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r18 TABLESPACE RBS STORAGE(INITIAL 128k
23、 NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r19 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIMITED optimal 4096K); CREATE ROLLBACK SEGMENT r20 TABLESPACE RBS STORAGE(INITIAL 128k NEXT 128k MINEXTENTS 2 MAXEXTENTS UNLIM
24、ITED optimal 4096K); ALTER ROLLBACK SEGMENT r01 ONLINE; ALTER ROLLBACK SEGMENT r02 ONLINE; ALTER ROLLBACK SEGMENT r03 ONLINE; ALTER ROLLBACK SEGMENT r04 ONLINE; ALTER ROLLBACK SEGMENT r05 ONLINE; ALTER ROLLBACK SEGMENT r06 ONLINE; ALTER ROLLBACK SEGMENT r07 ONLINE; ALTER ROLLBACK SEGMEN
25、T r08 ONLINE; ALTER ROLLBACK SEGMENT r09 ONLINE; ALTER ROLLBACK SEGMENT r10 ONLINE; ALTER ROLLBACK SEGMENT r11 ONLINE; ALTER ROLLBACK SEGMENT r12 ONLINE; ALTER ROLLBACK SEGMENT r13 ONLINE; ALTER ROLLBACK SEGMENT r14 ONLINE; ALTER ROLLBACK SEGMENT r15 ONLINE; ALTER ROLLBACK SEGMENT r16 ONLINE
26、 ALTER ROLLBACK SEGMENT r17 ONLINE; ALTER ROLLBACK SEGMENT r18 ONLINE; ALTER ROLLBACK SEGMENT r19 ONLINE; ALTER ROLLBACK SEGMENT r20 ONLINE; ALTER ROLLBACK SEGMENT r0 OFFLINE; REM **** SYS and SYSTEM users **************** alter user sys temporary tablespace TEMP; alter user system temp
27、orary tablespace TEMP; @/opt/oracle/product/8.1.7/rdbms/admin/catproc.sql; @/opt/oracle/product/8。1。7/rdbms/admin/caths。sql; @/opt/oracle/product/8。1。7/rdbms/admin/otrcsvr。sql; @/opt/oracle/product/8。1。7/rdbms/admin/catexp。sql; @/opt/oracle/product/8。1。7/rdbms/admin/catdbsyn。sql; @/opt/orac
28、le/product/8。1.7/rdbms/admin/catdefer.sql; @/opt/oracle/product/8.1.7/rdbms/admin/catrep。sql; @/opt/oracle/product/8。1.7/rdbms/admin/dbmspool。sql; @/opt/oracle/product/8.1.7/rdbms/admin/catparr.sql; @/opt/oracle/product/8.1。7/rdbms/admin/catblock。sql; connect system/manager @/opt/orac
29、le/product/8。1。7/sqlplus/admin/pupbld.sql; --create the product_profile and user_profile --CATALOG。SQL, —--加载数据库本身的数据字典视图 —-CATPROC.SQL, ---加载PL/SQL使用的PACKAGE —-CATEXP。SQL —-—加载EXPORT/IMPORT工具使用的数据字典 disconnect spool off exit 在数据库建立完后,可用以下语句(也可以在建库脚本中直接增加)对对tablespace增加数据文件: ALTER
30、 TABLESPACE "tablespace_name" ADD DATAFILE ’data_file_path/data_file_name’ SIZE 〈the data file size you designed〉
31、后打开数据库供用户使用。具体操作如下: 1. 先进入SVRMGR管理器 $svrmgrl SVRMGR> 2. 再联入inernal用户 $connect internal 3. 在用startup命令启动(若不在启动文件所在目录进入的SVRMGR或启动文件名不是ORACLE缺省的文件名,则启动时应带启动目录与文件名) SVRMGR〉startup pfile=〈file-pathr/init—file> 2.2. 安装启动与非安装启动 安装启动的选项是mount,表示只将数据库装入现场而不打开数据库;非安装启动的选项是nomount,表示只建立数据库现场而不装入数据库,当
32、然也不打开数据库。
1. 安装启动
SVRMGR〉startup {pfile=
33、该数据库;共享启动的参数是shared,表示允许多个例程并行使用该数据库,即将数据库装入多个现场。
1. 共享启动
SVRMGR〉startup {pfile=
34、epath/init-file>} restrict 一般来说当用户有create session权限十可联入数据库,但对于restrict方式启动的数据库只有restricted session系统权限用户才允许联入。 若在restrict方式下改变数据库运行方式,则可用alter system命令,如下: SVRMGR〉alter system disable restricted session; 2.5. 强制启动 在一些非正常情况下有可能在正常方式下启动数据库遇到麻烦,或在上次因不能正常关闭数据库(如:用了参数abort)而导致不能正常启动数据库,则可考虑使用强
35、制启动数据库,其参数为:force。 1. 强制启动 SVRMGR> startup {pfile=〈filepath/init—file>} force; 此时,除非数据库有重大系统错误,一般情况下数据库可以起来.在应注意的是用此方式启动的数据库会上次非正常关闭数据导致的非正常数据丢掉,数据库启动后应及时的查看数据库的日志文件。 2.6. 数据库关闭 1. 正常关闭 SVRMGR〉shutdown normal; 这种方式下关闭数据库在关闭前检查所有的连接,并且发出命令后不允许再有新的连接,在等所有用户断开连接后关闭数据库。在此方式下关闭的数据库下次启动时不需要任何恢复过
36、程。 2. 立即关闭 SVRMGR〉shutdown immediate; 这种方式下关闭数据库并不等待用户断开连接,而是由系统断开与用户的连接,然后关闭数据库. 3. 异常关闭 SVRMGR〉shutdown abort; 这种方式下关闭数据库系统不做任何的检查与回退操作而直接将数据库现场撤消. 2.7. PL/SQL基本程序的编写 ORACLE提供功能了功能强大的第三代编程语言PL/SQL。在本小节主要介绍基本的存储过程、存储函数及触发器的编写。 2.7.1. SQL语言简介 2.7.1.1. SQL概述 SQL是一种面向数据库的通用数据处理语言规范,能完成以下几类
37、功能:提取查询数据,插入修改删除数据,生成修改和删除数据库对象,数据库安全控制,数据库完整性及数据保护控制. 数据库对象包括表、视图、索引、同义词、簇、触发器、函数、过程、包、数据库链、快照等(表空间、回滚段、角色、用户)。数据库通过对表的操作来管理存储在其中的数据。 2.7.1.1.1. SQL*PLUS界面 登录:输入SQLPLUS回车;输入正确的ORACLE用户名并回车;输入用户口令并回车,显示提示符:SQL> 退出:输入EXIT即可. 2.7.1.1.2. 命令的编辑与运行 Ø 在命令提示符后输入SQL命令并运行,以分号结束输入;以斜杠结束输入;以空行结束输入; Ø 利用
38、SQL缓冲区进行PL/SQL块的编辑和运行; Ø 利用命令文件进行PL/SQL块的编辑和运行。 2.7.1.2. 数据库查询 2.7.1.2.1. 用SELECT语句从表中提取查询数据 SELECT 的语法为: SELECT [DISTINCT] {column1,column2,…} FROM tablename WHERE {conditions} GROUP BY {conditions} ORDER BY {expressions} [ASC/DESC]; 说明:SELECT子句用于指定检索数据库的中哪些列,FROM子句用于指定从哪一个表或视图中检索数据. 2.7.1.2
39、2. SELECT中的操作符及多表查询WHERE子句 WHERE子句中的条件可以是一个包含等号或不等号的条件表达式,也可以是一个含有IN、NOT IN、BETWEEN、LIKE、IS NOT NULL等比较运算符的条件式,还可以是由单一的条件表达通过逻辑运算符组合成复合条件。 2.7.1.2.3. ORDER BY 子句 ORDER BY 子句使得SQL在显示查询结果时将各返回行按顺序排列,返回行的排列顺序由ORDER BY 子句指定的表达式的值确定。 2.7.1.2.4. 连接查询 利用SELECT语句进行数据库查询时,可以把多个表、视图的数据结合起来,使得查询结果的每一行中
40、包含来自多个表达式或视图的数据,这种操作被称为连接查询. 连接查询的方法是在SELECT命令的FROM子句中指定两个或多个将被连接查询的表或视图,并且在WHERE子句告诉ORACLE如何把多个表的数据进行合并。根据WHERE子句中的条件表达式是等还是不等式,可以把连接查询分为等式连接和不等式连接. 2.7.1.2.5. 子查询 如果某一个SELECT命令(查询1)出现在另一个SQL命令(查询2)的一个子句中,则称查询1是查询2的子查询。 2.7.1.3. 基本数据类型 ORACEL支持下列内部数据类型: Ø VARCHAR2 变长字符串,最长为2000字符。 Ø NUMBER
41、 数值型. Ø LONG 变长字符数据,最长为2G字节。 Ø DATE 日期型. Ø RAW 二进制数据,最长为255字节。 Ø LONG RAW 变长二进制数据,最长为2G字节。 Ø ROWID 二六进制串,表示表的行的唯一地址. Ø CHAR 定长字符数据,最长为255。 2.7.1.4. 常用函数 一个函数类似于一个算符,它操作数据项,返回一个结果。函数在格式上不同于算符,它个具有变元,可操作0个、一个、二个或多个变元,形式为: 函数名(变元,变元,…) 函数具有下列一般类形: Ø 单行函数 Ø 分组函数
42、 1. 单行函数对查询的表或视图的每一行返回一个结果行.它有数值函数,字符函数,日期函数,转换函数等。 2. 分组函数返回的结果是基于行组而不是单行,所以分组函数不同于单行函数。在许多分组函数中可有下列选项: Ø DISTRNCT 该选项使分组函数只考虑变元表达式中的不同值。 Ø ALL该选项使分组函数考虑全部值,包含全部重复. 全部分组函数(除COUNT(*)外)忽略空值。如果具有分组函数的查询,没有返回行或只有空值(分组函数的变元取值的行),则分组函数返回空值。 2.7.1.5. 数据操纵语言命令 数据库操纵语言(DML)命令用于查询和操纵模式对象中的数据,它不隐式地提交当前事
43、务。它包含UPDATE、INSERT、DELETE、EXPLAIN PLAN、SELECT和LOCK TABLE 等命令。下面简单介绍一下: 1)UPDATE tablename SET {column1=expression1,column2=expression2,…} WHERE {conditions}; 例如: SQL> update serv set state=’F0K' where serv_id=123456 and serv_seq_nbr=1; UPDATE子句指明了要修改的数据库是EMP,并用WHERE子句限制了只对名字(ENAME)为’MARTIN'的职工的
44、数据进行修改,SET子句则说明修改的方式,即把’MARTION'的工作名称(JOB)改为'MARAGER’。 2)INSERT INTO tablename {column1,column2,…} VALUES {expression1,expression2,…}; 例如: SQL〉 insert into bill.serv select * from trans.serv_bak; 3)DELETE FROM tablename WHERE {conditions}; 例如: SQL〉 delete from acct_item_area01 where ac
45、ct_id=123245 and account_date=’200110’ and acct_item_type_id = 11001; DELETE命令删除一条记录,而且DELETE命令只能删除整行,而不能删除某行中的部分数据. 4)事务控制语句 提交命令(COMMIT):可以使数据库的修改永久化。设置AUTOCOMMIT为允许状态:SQL 〉SET AUTOCOMMIT ON; 回滚命令(ROLLBACK):消除上一个COMMIT命令后的所做的全部修改,使得数据库的内容恢复到上一个COMMIT执行后的状态。使用方法是: 2.7.1.6. 创建表、视图、索
46、引、同义词、用户 2.7.1.6.1. 表 建立表主要指定义下列信息: Ø 列定义 Ø 完整性约束 Ø 表所在表空间 Ø 存储特性 Ø 可选择的聚集 Ø 从一查询获得数据 语法如下: CREATE TABLE tablename (column1 datatype [DEFAULT expression] [constraint], column1 datatype [DEFAULT expression] [constraint], ……) [STORAGE子句] [其他子句…]; 例如: SQL> create table serv (serv_id numb
47、er(10),serv_seq_nbr number(3)) 2 tablespace data_bill 3 storage (initial 10m next 5m); 2.7.1.6.2. 视图 视图是一个逻辑表,它允许操作者从其它表或视图存取数据,视图本身不包含数据。视图所基于的表称为基表. 引入视图有下列作用: Ø 提供附加的表安全级,限制存取基表的行或/和列集合。 Ø 隐藏数据复杂性. Ø 为数据提供另一种观点. Ø 促使ORACLE的某些操作在包含视图的数据库上执行,而不在另一个数据库上执行。 2.7.1.6.3. 索引 索引是种数据库对象。对于在表或聚集的
48、索引列上的每一值将包含一项,为行提供直接的快速存取。在下列情况ORACLE可利用索引改进性能:
Ø 按指定的索引列的值查找行。
Ø 按索引列的顺序存取表。
语法:
create index 〈index_name〉 on 49、7.1.6.4. 同义词
同义词:为表、视图、序列、存储函数、包、快照或其它同义词的另一个名字。使用同义词为了安全和方便。对一对象建立同义词可有下列好处:
Ø 引用对象不需指出对象的持有者。
Ø 引用对象不需指出它所位于的数据库.
Ø 为对象提供另一个名字。
语法:
craete synonym 〈synonym_name> for [user_name]。〈table_anme>;
例如:
(假定在CALL用户下)
SQL> create synonym serv for bill。serv;
注意:在同义词建立后要授权
2.7.1.6 50、5. 用户
语法:
CREATE USER username IDENTIFIED BY password;
例如:
SQL> create user bill identified by jfxt;
2.7.2. PL/SQL简介
2.7.2.1. PL/SQL概述
PL/SQL是Oracle对SQL规范的扩展,是一种块结构语言,即构成一个PL/SQL程序的基本单位(过程、函数和无名块)是逻辑块,可包含任何数目的嵌套了快。这种程序结构支持逐步求精方法解决问题。一个块(或子块)将逻辑上相关的说明和语句组合在一起,其形式为:
DECLARE
-—说明
BEGIN
—-语句






