ORACLE数据库日常维护手册.docx
《ORACLE数据库日常维护手册.docx》由会员分享,可在线阅读,更多相关《ORACLE数据库日常维护手册.docx(66页珍藏版)》请在冰点文库上搜索。
ORACLE数据库日常维护手册
数据库日常维护手册
1.1数据库的安装
1.1.1操作系统的准备工作
Oracle数据库的基本软件安装在oradb1和oradb2上。
数据文件,日志文件,控制文件通过手工建库时,指定在共享的阵列上。
Oradb1与Oradb2的安装配置方法相同,以Oradb1为例说明。
1.内核参数的修改
编辑修改/etc/system文件
setshmsys:
shminfo_shmmax=0x200000000
setshmsys:
shminfo_shmmin=1
setshmsys:
shminfo_shmmni=100
setshmsys:
shminfo_shmseg=10
setsemsys:
seminfo_semmni=100
setsemsys:
seminfo_semmsl=600
setsemsys:
seminfo_semmns=1200
setsemsys:
seminfo_semopm=100
setsemsys:
seminfo_semvmx=32767
扩大共享内存和信号量参数。
2.检查需要的操作系统patch
通过上下载特定版本(Solaris8)的patch集并安装,可以满足Oracle的安装需要。
3.操作系统用户/组的添加
●groupadddba
●groupaddoinstall
●useradd-c"OracleDBA"-d/home/oracle-goinstall-Gdba
●修改/etc/passwd文件,更改用户登陆shell或其他信息
oracle:
x:
102:
101:
:
/export/home/oracle:
/bin/ksh
4.Oracle用户环境变量的设定
在oracle用户的初始化环境变量文件中(/export/home/oracle/.profile),增加如下内容。
ORACLE_BASE=/opt/app/oracle
ORACLE_HOME=/opt/app/oracle/product/8.1.7
ORACLE_TERM=vt100
ORACLE_OWNER=oracle
NLS_LANG="SIMPLIFIEDCHINESE_china".ZHS16CGB231280
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
ORACLE_SID=actdb
TMP=/tmp
PATH=$ORACLE_HOME/bin:
/usr/ccs/bin:
$PATH
LD_LIBRARY_PATH=/opt/oracle/app/oracle/product/8.1.7/lib:
/usr/lib
exportORACLE_BASEORACLE_HOMEORACLE_TERMORACLE_OWNERNLS_LANGORA_NLS33ORACLE_SIDTMPPATHLD_LIBRARY_PATH
LANG=zh
exportLANG
umask022
sttyerase^H
EDITOR=vi
exportEDITOR
文件主要设定数据库的基本目录,数据库的SID名称和数据库的中文语言环境。
增加可执行文件的路径和操作系统的语言环境设置。
最后设置vi为常用编辑器。
1.1.2数据库的安装
1.用root用户取消显示设置#xhost+
2.将Oracle安装光盘插入光驱。
通过df–k察看光驱是否已mount上。
3.以下由Oracle用户执行$cd/cdrom/cdrom0,$./runInstaller。
出现ORACLEUniversalInstaller的安装窗口,按Next键继续。
4.在Unixuser/group对话框中填入oracle/dba,点击Next按钮。
5.Destination框输入将要安装oracle的目录($ORACLE_HOME),接着出现弹出窗口要求用root运行orainstRoot.sh(它创建oraInventory的安装目录)接着选择要安装的产品ORACLE8I8.1.7EnterpriseEdition。
6.选择Customer安装方式,将来可以手工建库。
7.选择安装产品对话框中,建议选择所有产品。
8.点击确认安装的按钮,安装正式开始。
9.安装成功100%后又回到开始的选项菜单,建议察看安装日志。
10.由于使用双机做HA,因此数据库的基本软件需要安装在两台服务器上,而数据库在阵列上创建。
数据库基本软件在两台服务器安装完成后。
通过dbassist手工建库。
指定数据文件,控制文件,日志文件的路径为共享阵列。
11.建库完成后通过oracle用户执行svrmgrl,启动数据库。
并检查数据库基本信息。
$svrmgrl
SVRMGR>connectinternal
SVRMGR>startup
SVRMGR>select*fromv$version;
SVRMGR>select*fromv$database;
执行$lsnrctlstart启动监听程序。
1.1.3数据库patch安装
1.Patch下载:
Oracle数据库的patch从Oracle的metalink网站下载,登录成功后,在patch页面中的ProductFamily下拉框中选择”OracleDatabse”,Product下拉框中选择”RDBMSServer”;Release下拉框中选择”Oracle8.1.7.4”;Platform下拉框中选择”SunSolarisOS(SPARC)64-bit”,Language下拉框中选择”AmericanEnglish(US)”,LimitSearchto下拉框中选择”LatestProductPatchesorMinipacks”,点击Submit提交。
在随后出现的页面中点击Download下载patch。
2.Patch安装:
Patch下载后首先需要解压缩,安装与数据库安装方法类似,启动runInstaller安装程序,选择解压缩完成后patch目录下的product文件进行安装。
特别注意patch安装时,数据库必须处于正常关闭状态。
3.安装完成后检查:
select*fromv$version;检查各个产品的版本号是否从8.1.7.0升级成为8.1.7.4。
1.2现场数据库工作方法
1.2.1现场表空间的规划
ACT01,ACTX01是enus用户的数据表空间以及索引表空间。
ACT02,ACTX02是page,race用户的数据表空间以及索引表空间。
ACT03,ACT04,ACTX03,ACTX04是rap用户的数据表空间以及索引表空间。
1.2.2现场数据文件的添加
1)数据库磁盘规划
表空间名称
磁盘数据文件规划
ACT01
/disk/data1
ACTX01
/disk/index1
ACT02
/disk/data2
ACTX02
/disk/index2
ACT03
/disk/data3/disk/data4
ACTX03
/disk/index3/disk/index4
ACT04
/disk/data4
ACTX04
/disk/index4
2)添加数据文件
A.添加规则
现场建议每次出帐前,为表空间使用率接近80%的表空间添加数据文件。
原则上现场不要存在超过80%的表空间。
目前建议每次添加的数据文件大小为4096M.
B.添加前,检查表空间原有数据文件(保证数据文件命名的连续性)
例如:
准备为ACTX04添加表空间
selectfile_namefromdba_data_fileswheretablespace_name=’ACTX04’
/disk/index4/actx04_01.dbf
/disk/index4/actx04_02.dbf
/disk/index4/actx04_03.dbf
/disk/index4/actx04_04.dbf
C.添加数据文件
现场添加数据文件,目前原则上大小为4096M.
以为actx04添加表空间为例
altertablespaceactx04adddatafile‘/disk/index4/actx04_05.dbf’size4096M;
1.2.3现场索引的添加
1)索引添加规则
enus用户索引:
ACTX01表空间
rap用户索引:
ACTX03,ACTX04表空间
blues用户索引:
ACTX02表空间
race用户索引:
ACTX02表空间
2)常规表索引的建立
CREATEINDEXI_ACCOUNT_FEE_PHONEON
ACCOUNT_T(FEE_PHONE)
TABLESPACEACTX03nologging;
3)分区表索引的建立
◆注意事项:
现场针对分区建立的索引必须都是local类型的索引。
◆建立脚本:
(针对enus的time_t分区表为例)
CREATEINDEXI_TIME__ACCTIDNEWONTIME_T(ACCOUNT_ID)LOCALTABLESPACEACTX01nologging;
4)察看索引对应的表空间
user_indexes;
5)创建索引的用途以及维护要点
⏹考虑用nologging创建索引
可以在createindex语句中指定nologging来创建索引并产生最少的重作日志记录.
注意:
因为用nologging创建索引时不存档,建议现场添加索引在凌晨左右进行,便于创建索引后,数据库尽快完成备份.
用nologging创建索引有如下好处:
a)节省了重作日志文件的空间
b)缩短了创建索引的时间
c)改善了并行创建大索引时的性能
1.2.4数据库用户的建立
注:
以建立rap用户为例
createuserrapidentifiedbyrap;
grantresource,connecttorap;
alteruserrapdefaulttablespaceact03;
alteruserraptemporarytablespacetemp;
1.2.5数据库数据的导入方法(探讨,针对测试环境数据的搭建)
1)exp要进行测试的用户数据
2)删除原先表数据(truncate)
select'truncatetable'||table_name||';'fromtabs;
形成文件,批truncate表
3)删除表
select'droptable'||table_name||'cascadeconstraints;'fromtabs;
形成文件,批删除
4)导入数据
imprap/rapparfile=li.txt
li.txt文件的内容
buffer=409600
file=expdat_rap_0630.dmp
IGNORE=y
grants=y
indexes=y
rows=y
commit=y
CONSTRAINTS=y
log=likqrap.log
1.2.6把数据库设置成为非归档模式的方法(针对traffic上面的数据库)
startupmount;
alterdatabasenoarchivelog;
alterdatabaseopen;
1.2.7检查表的创建模式
selectdegreefromuser_tables;
1.3数据库优化及主要参数调整
1.3.1调整原则
Oracle数据库在启动时会读取命名规则为init.ora的初始化参数文件。
这个配置文件中的各个参数设定对整个Oracle数据库性能起决定作用,先简单介绍各个参数的含义,然后给出建议配置。
除特殊说明外,介绍参数的更改都需进行数据库的重启操作。
根据数据库系统规模,Oracle提供小,中,大(small,medium,large)三个建议建议配置档,配置时做为参考。
通过在sqlplus中输入SQL>showparameterparameter_name显示参数名称和相应的值。
●db_block_size:
实际值:
4096。
数据块大小,数据存储的最小单位,这个参数在Oracle9i以前各个版本中,数据库创建完成后是不可改变的。
可选范围是2K,4K,8K,16k,32k单位是byte。
应用系统中,部分数据表字段较多,db_block_size设定偏小造成记录不能在单一数据块中存储,因此访问一条用户记录不能在一次物理I/O操作中完成,需要多次I/O,导致性能下降;另外较多的varchar2类型字段和数据更新可能造成行链接和行迁移,除设定pctfree较大外,db_block_size也要设定大一些。
,创建数据库时指定。
●db_block_buffers:
实际值:
1000000。
数据高速块的多少,存放从硬盘中读出的数据块。
db_block_buffers决定内存中可存放的大小为db_block_size的Oracle数据块的数量。
应用程序第一次访问数据时从硬盘中读取,然后数据存储在内存中,直到数据长时间不被访问,同时内存中不能容纳更多数据时,数据被写回硬盘,下次需要访问时,再从硬盘中读取。
该参数越大,Oracle在内存中找到所需数据的可能性就越大。
相同数据内存读取速度要比硬盘快几十倍,因此响应速度也会大大提高。
db_block_size与db_block_buffers乘积确定Oracle数据库所占内存的90%左右。
如果服务器专用运行数据库,建议两个参数的乘积占服务器物理内存的40%,通过对数据缓存的命中率进行监控后,做进一步调整。
●shared_pool_size:
实际值:
500000000。
内存中存放sql语句访问路径,相关访问权限,表结构信息的位置,单位是字节。
建议在内存允许的情况下配置的大一些,但通常不超过500m。
通过sql语句监控生产机缓存命中率后进行相应调整。
●sort_area_size:
实际值:
4000000。
可在内存中进行排序的最大字节数。
应用程序向数据库发出类似orderby,groupby或创建索引时,需要进行排序操作。
排序在内存中完成的速度同样快于硬盘中速度。
sort_area_size越大,排序完成在内存中的可能也越大。
通过对动态视图的监控进行进一步的调整。
●log_buffer:
实际值:
8388608。
日志缓存大小,对于数据库的dml/ddl等语句首先写入log_buffer,然后写入日志文件。
建议初始配置为512k,如果日志缓存等待明显,再加大,一般不超过为1M。
●processes:
实际值:
500。
同时访问Oracle数据库的进程数,包括后台进程(dbwr,lgwr,chpt)和Enus,Cnus,Rap各个模块建立的到数据库的长连接数,设定大一点不会造成负面影响,如果偏小则会造成不能进行数据库连接的错误。
●dml_locks:
实际值:
988。
它表示任何时间所有用户在所有表中放置锁定的最大数量。
缺省值是事务最大数量的四倍。
同样可以设定较大一点,不会有负面影响。
●open_cursors:
实际值:
2500。
用户可以同时打开的游标数。
设定大一点不会造成负面影响,如果偏小则会出现不能打开游表的错误。
●db_files:
实际值:
200。
数据库数据文件的数目。
●rollback_segments:
实际值:
ACTROLL00~ACTROLL29,共30个回滚段。
回滚段的名称,用户自己创建完回滚段后将名称添加在此处。
在OLTP环境下,回滚段的数目为最大并发交易数的1/3~1/4。
●db_file_multiblock_read_count:
实际值:
32。
数据库一次从硬盘中读取的数据块的数目。
设定DB_FILE_MULTIBLOCK_READ_COUNT可以在进行全表扫描时减少I/O的次数。
●log_checkpoints_to_alert:
实际值:
true。
设置成true的时候,每次检查点的信息写入alert.log文件。
●log_archive_start/log_archive_dest_1:
实际值:
true//disk/archive/arch决定数据库采用归档方式,指定归档日志存放的路径。
●log_archive_max_processes:
实际值:
1,确定后台归档进程(ArcN)的启动数目。
目前100M日志文件在交易高峰期,每8分钟就切换一次。
建议将此值扩大。
1.3.2现场数据库参数设置-配置文件initactdb.ora
db_name="actdb"
instance_name=actdb
service_names=actdb
control_files=("/disk/data4/system/control01.ctl","/disk/data3/system/control02.ctl","/disk/data
2/system/control03.ctl")
open_cursors=2500
max_enabled_roles=20
db_block_buffers=1000000
shared_pool_size=367001600
large_pool_size=12582912
java_pool_size=10485760
db_file_multiblock_read_count=32
log_checkpoint_interval=819200
log_checkpoint_timeout=4800
cpu_count=8
processes=500
log_buffer=1048576
log_archive_start=true
log_archive_dest_1="location=/disk/archive/arch"
log_archive_format=arch_%t_%s.arc
log_checkpoints_to_alert=TRUE
rollback_segments=(ACTROLL00ACTROLL01ACTROLL02ACTROLL03ACTROLL04ACTROLL05ACTROLL06ACTROLL07
ACTROLL08ACTROLL09ACTROLL10ACTROLL11ACTROLL12ACTROLL13ACTROLL14ACTROLL15ACTROLL16ACTROLL17
ACTROLL18ACTROLL19ACTROLL20ACTROLL21ACTROLL22ACTROLL23ACTROLL24ACTROLL25ACTROLL26ACTROLL27
ACTROLL28ACTROLL29)
background_dump_dest=/opt/app/oracle/admin/actdb/bdump
core_dump_dest=/opt/app/oracle/admin/actdb/cdump
user_dump_dest=/opt/app/oracle/admin/actdb/udump
db_block_size=4096
remote_login_passwordfile=exclusive
os_authent_prefix=""
job_queue_processes=4
job_queue_interval=60
distributed_transactions=10
open_links=4
optimizer_mode=CHOOSE
dml_locks=988
compatible="8.1.0"
sort_area_size=4000000
sort_area_retained_size=4000000
#db_writer_processes=4
#db_block_lru_latches=36#cpu*2*3
1.3.3数据库用户信息
用户是数据库的使用和访问者。
同一用户名(通常也就是schema名称)下的表共同完成相同的功能,如:
在我们系统中的Enus用户下的表完成接入功能,Rap用户下的表完成计费,帐务功能。
●用户名称,临时/默认表空间。
用户创建日期。
检查是否有用户的默认或临时表空间为system表空间。
SQL>colusernameformata12;
SQL>col"DefaultTBS"formata12
SQL>col"TemporaryTBS"formata12
SQL>col"CreateDate"formata12
SQL>selectsubstr(username,1,12)UserName,
substr(DEFAULT_TABLESPACE,1,12)"DefaultTBS",
substr(TEMPORARY_TABLESPACE,1,12)"TemporaryTBS",
to_char(CREATED,’yyyy/mm/dd’)"CreateDate"
fromsys.dba_usersorderbyusername;
USERNAMEDefaultTBSTemporaryTBCreateDate
--------------------------------------------------------
DBSNMPSYSTEMSYSTEM2002/08/17
ENUSACT01TEMP2002/08/17
OUTLNSYSTEMSYSTEM2002/07/01
PAGEACT02TEMP2002/07/04
RACEACT02SYSTEM2003/05/06
RAPACT03TEMP2002/08/17
RAP00RAP00TEMP2002/10/22
RAPTESTACTTESTTEMP2002/09/10
SPOTLIGHTUSERSTEMP2003/04/24
SSPOTUSERSTEMP2002/07/01
SYSSYSTEMTEMP2002/07/01
SYSTEMTOOLSTEMP2002/07/01
TRACESVRSYSTEMSYSTEM2002/07/01
●察看数据库用户的权限/角色。
创建用户时,会给用户用户一些权限/角色,使用户可以进行相应的操作。
SQL>colgranteeformata20;
SQL>selectGRANTEE,GRANTED_ROLE,ADMIN_OPTIONfromdba_role_privswheregranteein(‘ENU