仅供参考:
4. ORACLE数据库的安装
4.1. 准备工作
用ora734 用户登录后执行cd $ORACLE_HOME/dbs目录,由于系统还没有安装数据库文件,所以要先创建设置文件,执行cp init.ora initora734.ora,然后执行vi initora734.ora,如找到db_block_size则修改,否则增加一行为db_block_size = 8192,如找到db_name则修改,否则增加一行为db_name=ora734,如找到COMPATIBLE则修改,否则增加一行为 COMPATIBLE=7.3.4.0,如找到unlimited_rollback_segments则修改,否则增加一行 unlimited_rollback_segments = TRUE,另外,在/usr/ora734下执行以下命令,
cd /usr/ora734
mkdir oradata
cd oradata
mkdir ora734
chown -R ora734:dab /usr/oracle/oradata
以便为创建库文件做好准备。
4.2. 建立数据库
在ora734用户登录后,执行svrmgrl命令并回车,再执行以下SQL语句,
connect internal;
startup nomount ;
CREATE DATABASE ora734
CONTROLFILE REUSE
LOGFILE
GROUP 1 ('/usr/ora734/oradata/ora734/log11.log') SIZE 10000K,
GROUP 2 ('/usr/ora734/oradata/ora734/log21.log') SIZE 10000K,
GROUP 3 ('/usr/ora734/oradata/ora734/log31.log') SIZE 10000K,
GROUP 4 ('/usr/ora734/oradata/ora734/log41.log') SIZE 10000K,
GROUP 5 ('/usr/ora734/oradata/ora734/log51.log') SIZE 10000K
MAXLOGFILES 20
MAXDATAFILES 20
NOARCHIVELOG
EXCLUSIVE
CHARACTER SET ZHS16GBK
DATAFILE
'/usr/ora734/oradata/ora734/sysora734.dbf'size 100m AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
建立数据库要注意:字符集的选定,如果要从旧的系统中将数据转换过来,字符集要与旧系统的字符集一致,如果只有一个磁盘,则redo log的member只选取一个,这样可以减少无关的I/O。
第二步:建立数据字典(在internal用户下)
@/usr/ora734/app/oracle/product/7.3.4/rdbms/admin/catalog.sql
/
@/usr/ora734/app/oracle/product/7.3.4/rdbms/admin/catproc.sql
/
第三步:建立回退段,临时表空间(在internal用户下)
create tablespace user_data
datafile '/usr/ora734/oradata/ora734/usr1ora734.ora' size 10M reuse autoextend on next 5M maxsize unlimited;
create tablespace rbs_pafront
datafile '/usr/ora734/oradata/ora734/rbs1ora734.ora' size 500M reuse autoextend on next 5M maxsize unlimited;
create tablespace temporary_data
datafile '/usr/ora734/oradata/ora734/tmp1ora734.ora' size 200M reuse autoextend on next 5M maxsize unlimited default storage( initial 256k next 256k minextents 20 pctincrease 0 maxextents unlimited) temporary;
-- Change the SYSTEM users' password, default tablespace and
-- temporary tablespace.
alter user system temporary tablespace user_data;
alter user system default tablespace user_data;
-- Create 16 rollback segments. Allows 16 concurrent users with open
-- transactions updating the database. This should be enough.
create public rollback segment rbs_card storage(initial 5m next 5m minextents 10 maxextents 1000) tablespace rbs_pafront;
create public rollback segment rb1 storage(initial 40K next 40K minextents 10 maxextents 50000 optimal 40m) tablespace rbs_pafront;
create public rollback segment rb2 storage(initial 40K next 40K minextents 10 maxextents 50000 optimal 40m) tablespace rbs_pafront;
create public rollback segment rb3 storage(initial 40K next 40K minextents 10 maxextents 50000 optimal 40m) tablespace rbs_pafront;
create public rollback segment rb4 storage(initial 40K next 40K minextents 10 maxextents 50000 optimal 40m) tablespace rbs_pafront;
create public rollback segment rb5 storage(initial 40K next 40K minextents 10 maxextents 50000 optimal 40m) tablespace rbs_pafront;
create public rollback segment rb6 storage(initial 40K next 40K minextents 10 maxextents 50000 optimal 40m) tablespace rbs_pafront;
在以上的建立中,rbs_pafront为应用建立的用于回退的表空间
建立要点:
* 建立临时表空间,INITIAL(in bytes)为n*SORT_AREA_SIZE+DB_BLOCK_SIZE,n的取值为同时进行排序操作的最小用户数,NEXT=INITIAL, PCTINCREASE为0,MINEXTENTS为最大同时连接的用户数。
* 建立回退段参数,INITIAL为最大表大小的0.1%,NEXT=INITIAL,MINEXTENTS=20(在每四个交易拥有一个回退段时,回退段的个数也据此建立)
第四步:建立默认的profile(以system用户登录)
@/usr/ora734/app/oracle/product/7.3.4/sqlplus/admin/pupbld.sql
/
至此,数据库ora734已经建立完成,关闭数据库,修改initora734.ora
rollback_segments = (rbs_card,rb1,rb2,rb3,rb4,rb5,rb6)
重新启动数据库。
4.3. 应用数据库的安装
第一步:建立应用系统用户和表空间(以system用户连入系统),以ora734用户执行sqlplus system/manager,其中manager是system用户的密码,如果密码被修改,请换成相应的密码,建议修改system和sys用户的密码,修改方法如下,在以system用户登录成功后,执行alter user system identified by NEWPWD;再执行alter user sys identified by NEWPWD1;其中NEWPWD是system用户新密码,NEWPWD1是sys用户新密码。当提示成功后,修改密码完成。当以system用户登录成功后再执行以下语句,以下语句中pa_front是前置的用户名,pa_paic是该用户的密码。如有变化,请相应更改。
drop user pa_front cascade;
create user pa_front identified by pa_paic ;
grant connect,resource to pa_front;
alter user pa_front temporary tablespace temporary_data;
drop tablespace pa_tablespace;
create tablespace pa_tablespace datafile '/usr/ora734/oradata/ora734/pafront.dbf' size 800m autoextend on next 10m maxsize unlimited
default storage( initial 16k next 16k minextents 1 maxextents unlimited
pctincrease 0 ) online;
drop tablespace pa_tablespace_idx;
create tablespace pa_tablespace_idx datafile '/usr/ora734/oradata/ora734/pa_tablespace_idx.dbf' size 400m autoextend on next 10m maxsize unlimited
default storage( initial 256k next 256k minextents 2 pctincrease 0 maxextents unlimited )
online;
alter user pa_front default tablespace pa_tablespace;
建立用户数据表空间和索引空间的要点:
* 如果有多个物理磁盘,将这些文件进行分布
* 数据表空间和索引表空间的数据文件一次给的足够大,同时也要允许自动扩展
第二步:建立应用系统对象(表,索引等)
在建立表的存贮参数的选取要点:
* INITIAL为2*k*db_block_size* db_file_multiblock_read_count 的整数倍,k的取值与表的大小相关,
* NEXT=INITIAL,PCTINCREASE为0
* 设置MINEXTENTS时如果已知表的大小,则设置此值使初始分配空间为此表的大小,即 table size = INITIAL(in bytes) * MINEXTENTS;如果未知表大小,则估算
* 设置MAXEXTENTS为UNLIMITED
4.4. 应用数据库的表的安装
请执行随应用程序分发的的SQL脚本来创建相应的表格及索引。详细的SQL文本请参阅应用程序清单。
5. 数据库性能调整
5.1. 内存调整
说明:以下统计参数中,要求系统运行一段时间后,统计参数才有意义,对于排序,应用程序应进行过排序操作。所有内存的增加要在不引起系统产生虚存交换的情况下进行(用sar -w 1 10000查看)。
5.1.1 shared_pool_size
服务器物理内存(M)
shared_pool_size
说明
64
6M
128
9M
256
20M
* shared_pool_size的确定依据:在连入一个正常操作用户时执行下面语句:
SELECT SUM(value) "session_total_mem"
FROM v$sesstat, v$statname
WHERE name like 'session uga memory'
AND v$sesstat.statistic# = v$statname.statistic#;
假如系统使用时的用户个数(指连接的session,下同)为n,则系统的总的shared_pool_size = n * session_total_max_mem
* shared_pool_size是否合适的检验
查看select sum(pins) pins,sum(reloads) reloads
from v$librarycache;
要求reloads / (pins + reloads) 越小越好,一般要小于0.01否则要增加shared_pool_size
另外要考虑v$rowcache
select sum(gets) gets,sum(getmisses) getmisses
from v$rowcache;
要求 gets*100/( gets + getmisses)接近于100%最好,一般要求大于90%
在shared_pool_size值增加到一定程度后,如果结果还没有明显变化,需要加大
SESSION_CACHED_CURSORS(注意:与OPEN_CURSORS的不同,OPEN_CURSORS只是对会话可打开最大CURSOR的限制,不影响性能)
select name,value
from v$sysstat
where name in (' session cursor cache count');
5.1.2 sort_area_size
以bytes为单位,查看
v$sysstat的sorts(memory),sorts(disk),sorts(rows)
在有较大的sorts(rows)时,sorts(disk)应尽可能小,sorts(disk)/sorts(memory)应小于0.1
5.1.3 log_buffer
log_buffer以bytes为单位,取值的参考为v$sysstat中的
redo entries /redo log space requests理想的情况,要求此值大于5000,如果过小,要增加log_buffer的值,但此值过大也不行。一般取值为163840或327680
5.1.4 db_block_buffers
服务器物理内存(M)
shared_pool_size
说明
64
20M
128
80M
256
120M
db_block_buffers以db_block_size为单位,取值的参考为v$sysstat中
physical reads/(db block gets+consistent gets)
该值接近与0最好
5.1.5 回退段
* 回退段的数量:设置回退段的个数为系统中最大事务数的四分之一,即每个回退段平均有四个事务运行。
* 如何判断系统中回退段是否足够?
连续执行下面两个语句,
SELECT class, count
FROM v$waitstat
WHERE class IN ('system undo header','system undo block','undo header','undo block');
SELECT SUM(value) total_gets
FROM v$sysstat
WHERE name IN ('db block gets','consistent gets');
执行结束后,计算下面的四个比值
system undo header/total_gets
system undo block/total_gets
undo header/total_gets
undo block/total_gets
要求这四个值均小于0.01,否则考虑增加回退段。
5.1.6 检查点调整
调整目标:减少检查点,要调整的参数有CHECKPOINT_PROCESS, LOG_CHECKPOINT_INTERVAL,LOG_CHECKPOINT_TIMEOUT
设置CHECKPOINT_PROCESS=TRUE, LOG_CHECKPOINT_TIMEOUT=0
对于LOG_CHECKPOINT_INTERVAL要考虑redo log file的大小,设置为
( redo log file in bytes)/ 512 ,其中redo log file in bytes为创建时指定的大小(不是存贮在系统上实际文件的大小),512为操作系统的块大小
5.1.7 redo log 设置
所有redo log文件的大小是相同的,为了减少检查点,设置redo log文件为5M-50M左右。如果只有一个磁盘或系统用RAID 5,则每个redo log组只有一个成员。
系统至少要有两个redo log组,设置合适的组使进行最大的数据更新(insert or update)操作时在alert文件中不出现thread 1 cannot allocate new log, sequence XXX,Checkpoint not complete为止。
对于单CPU系统,LOG_SMALL_ENTRY_MAX_SIZE和LOG_SIMULTANEOUS_COPIES参数不要做调整。
5.2. 不太重要的参数的调整
以下参数在上面的参数进行调整后,如果系统中内存还有较大的空闲内存时,进行调整。
* 内存参数
sort_direct_writes,sort_write_buffers,sort_write_buffer_size
设置sort_direct_writes为TRUE,系统将为每一个排序操作额外分配SORT_WRITE_BUFFERS * SORT_WRITE_BUFFER_SIZE的字节的内存用于直接磁盘操作。SORT_WRITE_BUFFERS * SORT_WRITE_BUFFER_SIZE为sort_area_size的十分之一。一般用系统默认值即可。
* 用户表和索引freelist的竞争
当有多个用户同时更新一个表时,可能会产生freelist的竞争,
SELECT class, count
FROM v$waitstat WHERE class = 'free list';
SELECT SUM(value) total_gets
FROM v$sysstat
WHERE name IN ('db block gets','consistent gets');
要求 count/total_gets越小越好,不要大于0.01,如果此值过大,只能在建表时增加FREELISTS的大小。
6. 数据库启动参数设置
6.1. 修改数据库监听设置和网络解析设置
1)用ora734用户登录,检查/etc目录下是否有listener.ora和tnsnames.ora这两个文件,如没有,执行cp $ORACLE_HOME.network/admin/listener.ora /etc/和cp $ORACLE_HOME/network/admin/tnsnames.ora /etc/,将这两个文件拷贝到/etc目录;
2)修改 /etc/listen.ora文件,将其中<oracle_sid>换成ORACLE_SID的内容,即ora734;修改 /etc/tnsnames.ora文件,将其中<oracle_sid>换成ORACLE_SID的内容,即ora734;
3)由于需要联接平保后台的ORACLE数据库,因此需要在/etc/tnsnames.ora文件中增加平保后台的ORACLE数据库联接,在文件后面增加以下内容:
lutest =
(DESCRIPTION =
(ADDRESS = (PROTOCOL= TCP)(Host= 10.16.100.2)(Port= 1528))
(CONNECT_DATA = (SID = lutest))
)
其中,第一个lutest是本地对应平保后台的SERVICE名字,10.16.100.2是平保主机地址,1528是平保主机ORACLE的监听端口,第二个lutest是平保主机ORACLE数据库的SID,请根据实际值进行相应修改。
4)试着启动ORACLE数据库;执行以下命令启动数据库:
svrmgrl
connect internal
startup
如提示already running.则先输入shutdown命令,再执行startup。
5)试着启动ORACLE监听器:执行以下命令启动监听器:
lsnrctl
start
如提示already started,则先输入stop命令,再执行start;
6.2. 设置成自动启动数据库
增加自动启动功能,即在SCO系统启动时自动启动ORACLE;
1)用root用户登录;
2)执行vi /etc/oratab,将其中最后面的N改成Y;
3)执行vi /etc/rc.d/7/udaemons,在文件后面增加以下几行:
su - ora734 -c /usr/ora734/app/oracle/product/7.3.4/bin/dbstart
su - ora734 -c /usr/ora734/app/oracle/product/7.3.4/bin/lsnrctl <<EOF
start
EOF
4)在正常关闭ORACLE数据库后,重启机器,检查是否生效。
6.3. 关闭和启动数据库的命令
先用ora734用户登录
* 启动数据库
svrmgrl
connect internal
startup
* 启动监听器
lsnrctl
start
* 检查监听器
lsnrctl
status
* 关闭监听器
lsnrctl
stop
* 关闭数据库
svrmgrl
connect internal
shutdown [ normal | immediate | abort ]
其中normal是正常关闭,默认值;immediate是立即关闭,如果有联接,则直接关闭;abort是无条件关闭,只在数据库发生错误时使用。
6.4. 常见问题解决
* 监听程序启动失败:
如果是TCP监听失败,请检查/etc/listener.ora中的对应TCP的参数如IP地址和PORT端口;
如果是IPC监听失败,请先删除/tmp/.oracle/sXXX,其中XXX是/etc/listener.ora中IPC监听的KEY值;
* 数据库关闭失败:
请先确认数据库已无其他联接,即无程序在使用数据库;如还无法关闭,则在执行svrmgrl后,输入shutdown abort强行关闭数据库;