一、RedHat5系统安装
1.已经安装好操作系统,不是按我们的标准安装,需要增加如下包
cd /media/"RHEL_5.2 i386 DVD"/Server/
rpm -Uvh setarch-2*
rpm -Uvh make-3*
rpm -Uvh glibc-2*
rpm -Uvh libaio-0*
rpm -Uvh compat-libstdc++-33-3*
rpm -Uvh compat-gcc-34-3*
rpm -Uvh compat-gcc-34-c++-3*
rpm -Uvh gcc-4*
rpm -Uvh libXp-1*
rpm -Uvh openmotif-2*
rpm -Uvh compat-db-4*
2.防火墙增加1521端口
二、Oracle的安装前准备
1、配置系统内核参数,以root用户登录,修改在/etc/sysctl.conf文件,在该文件中添加以下参数:
vi /etc/sysctl.conf
#32
kernel.shmall = 2097152
kernel.shmmax = 4294967295
#64
kernel.shmall=8388608
kernel.shmmax=30718312000
kernel.shmmni = 4096
kernel.sem = 256 32000 100 142
fs.file-max = 206173
net.ipv4.ip_local_port_range = 1024 65000
kernel.msgmax = 8192
kernel.msgmnb = 65535
kernel.msgmni = 2878
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
/sbin/sysctl -p
2.添加下面的行到以修改你的资源限制(不用设)
vi /etc/security/limits.conf
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
3、创建安装数据库时所需要使用的用户组oinstall,dba及Oracle用户,并将oinstall,dba组定义成oracle用户的主次组。命令参考如下:
groupadd oinstall
groupadd dba
useradd -m -g oinstall -G dba oracle
passwd oracle
4、以root用户身份登录系统创建Oracle系统的安装目录和数据库文件存放的目录
mkdir -p /opt/oracle10g/product/10.2.0
mkdir -p /opt/software/oracle10g
mkdir -p /opt/orabackup/
chown -R oracle:oinstall /opt
chmod -R 775 /opt/oracle10g /opt/software/oracle10g
5、拷贝软件到/opt/software/oracle10g
(如果不行用SSH文件传输)
mkdir -p /mnt/win
umount /mnt/win
mount -t cifs -o username=guest,passwd=cq2009 //10.1.3.29/software /mnt/win
--32
cp /mnt/win/oracle10g/10201_database_linux32.zip /opt/software/oracle10g/
cp /mnt/win/oracle10g/p6810189_10204_Linux-x86.zip /opt/software/oracle10g/
cd /opt/software/oracle10g/
unzip 10201_database_linux32.zip
unzip p6810189_10204_Linux-x86.zip
--64
cp /mnt/win/oracle10g/10201_database_linux_x86_64.cpio /opt/software/oracle10g/
cp /mnt/win/oracle10g/p5337014_10203_Linux-x86-64.zip /opt/software/oracle10g/
cd /opt/software/oracle10g/
cpio -idcmv < 10201_database_linux_x86_64.cpio
unzip p6810189_10204_Linux-x86-64.zip
如果已经安装9I
mv /etc/oraInst.loc /etc/oraInst9i.loc
6、配置oracle用户环境,以oracle用户登录,修改oracle用户下的 .bash_profile 文件。增加以下参数:
su - oracle
vi .bash_profile
export ORACLE_BASE=/opt/oracle10g/product/10.2.0
export ORACLE_HOME=$ORACLE_BASE/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=stud
export NLS_LANG=american_america.zhs16gbk
#安装时需要用英文版
#export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
source .bash_profile
三、Oracle10g的安装
xhost +
su - oracle
1、安装
export LC_ALL=en_CN
export LANG=eh_CN
/opt/software/oracle10g/database/runInstaller -ignoresysprereqs
注意:如果安装界面乱码,请使用英文界面安装,取消参数:
unset LANG
unset LC_ALL
unset LC_MESSAGE
2、点选“基本安装(A)”,主目录:/opt/oracle10g/product/10.2.0/db_1,安装类型:企业版;unix dba组:oinstall,取消创建启动数据库,继续安装请单击“下一步(N)”按键;
进入“指定产品清单目录和身份证明”窗口:确认产品清单目录的完整路径(D):sh /opt/software/oracle10g/database/runInstaller;指定操作系统组名(S):oinstall;
继续安装请单击 “下一步(N)”按键;
3、进入“产品特定的选决条件检查”窗口,经过一小段时间检查,会出现以下的检查信息窗口;
如果虚拟空间不够,没关系
下一步
4.执行脚本
/opt/oracle10g/product/10.2.0/oraInventory/orainstRoot.sh
/opt/oracle10g/product/10.2.0/db_1/root.sh
5.管理链接
iSQL*Plus URL:
http://studdb:5560/isqlplus
iSQL*Plus DBA URL:
http://studdb:5560/isqlplus/dba
连接地址:http://studdb:1158/em
6. 检查Oracle10g监听程序
四、升级到10.2.0.4
/opt/software/oracle10g/Disk1/runInstaller -ignoresysprereqs
执行脚本
/opt/oracle10g/product/10.2.0/db_1/root.sh
五、安装数据库
1.安装
dbca
2、选择“定制数据库”
3、实例名 sid,设为stud
4、使用EM配置数据库
5、所有帐户使用一个密码
6、数据库存储机制:文件系统
7、使用模板中数据库文件位置
8、启动自动恢复区,大小4096M,目录为{ORACLE_BASE}/flash_recovery_area/
设置归档,{ORACLE_BASE}/archdir/{DB_UNIQUE_NAME}/
9、数据库组件,将它们去掉,标准里面也附件也去掉,留下EM资料档案库
10、设置参数
内存比例:定制 (SGA:5G PGA:1G) 32位(sga:1.6G,pga:1g)
块大小: 16K
进程数: 800
字符集: ZHS16GBK
国家字符集:AL16UTF16
默认语言:简体中文
默认日期格式:中国
连接模式:专用服务器模式
--audit_trail=true
--cursor_force=similar
--lock_sga=true
--parallel_automatic_tuning=true
--job_processes=10
undo_retention=14400
db_flashback_retention_target=720
11、数据库存储
联机日志设置为5组,每组两个成员,日志文件切换为20-30分钟,这里大小设置为50M
表空间
system设置为500M
sysaux设置为500M
TEMP设置为200M,最大5000M
undotbs1设置为200M,最大5000M
users设置为200M,最大5000M
都设置为50M扩展
日志为五组,每组两成员,每个50M
12、系统安装
13.安装完成
12、数据库设置在闪存模式
shutdown immediate
startup mount
alter database flashback on;
alter database on;
六.监听网络配置
netca
七、所有表做分析
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'DBMS_STATS.GATHER_database_STATS (method_opt=>''FOR ALL INDEXED COLUMNS SIZE AUTO'',cascade=>true);'
,next_date => trunc(sysdate+31,'MM')+1/24
,interval => 'trunc(sysdate+31,''MM'')+1/24' -- 每月1日早上一点
);
commit;
END;
/
--建议在操作系统下执行作业
linux
su - oracle
crontab -e
00 19 1 * * /home/oracle/sql/dbstats.sh
mkdir -p /home/oracle/sql
touch /home/oracle/sql/dbstats.sh
chmod 700 /home/oracle/sql/dbstats.sh
vi /home/oracle/sql/dbstats.sh
source /home/oracle/.bash_profile
REF_LOG_NAME=/home/oracle/sql/dbstats.log
sqlplus system/*** <
spool $REF_LOG_NAME
select 'Current time is '||to_char(sysdate,'hh24:mi:ss.') from dual;
set timing on
set echo on
exec DBMS_STATS.GATHER_database_STATS(method_opt=>'FOR ALL INDEXED COLUMNS SIZE AUTO',granularity=>'all',cascade=>true)
select 'Current time is '||to_char(sysdate,'hh24:mi:ss.') from dual;
spool off
exit
SQLREF
八、EXP备份
1.目录创建
28机器上,创建e:risys_backup数据库名_bk
2.NFS服务设置
在10.1.100.28
onmi->nfs server
编辑/risys_backup
EXCEPT选择数据库IP
3.数据库端设置
mkdir /mnt/backup_ln28
mount 10.1.100.28:/risys_backup /mnt/backup_ln28
4.自动MOUNT
vi /etc/fstab
10.1.100.28:/risys_backup /mnt/backup_ln28 nfs mount 0 0
5、CRONTAB调度
oracle下
export db=lcl
mkdir -p /opt/orabackup/$db
touch /opt/orabackup/exp$db.sh
chmod 700 /opt/orabackup/exp$db.sh
vi /opt/orabackup/exp$db.sh
cd /home/oracle
source .bash_profile
rq=`date +%Y%m%d`
db=lcl
srcdir=/opt/orabackup/"$db"
dstdir=/mnt/backup_ln28/"$db"_bk
olddir=/mnt/backup_ln28/"$db"old_bk
file=$srcdir/"$db"_"$rq"
exp userid=system/*** file=$file.dmp full=y log=$file.log
echo 'after exp:' `date +"%Y%m%d %H:%M:%S"`>>$file.log
gzip -f -q $file.dmp
echo 'after gzip:' `date +"%Y%m%d %H:%M:%S"`>>$file.log
#copy to nfs server
cp -f $dstdir/* $olddir/
rm -f $dstdir/*
echo 'after mv:' `date +"%Y%m%d %H:%M:%S"`>>$file.log
cp -f $file* $dstdir/
echo 'after cp:' `date +"%Y%m%d %H:%M:%S"`>>$file.log
cp -f $file.log $dstdir/
echo '----------------------------------------------------------' >> /mnt/backup_ln28/dblog_bk/dblog_"$rq".txt
echo -----"$db"_alert.log ---'date:' `date +"%Y%m%d %H:%M:%S"`----- >> /mnt/backup_ln28/dblog_bk/dblog_"$rq".txt
echo '----------------------------------------------------------' >> /mnt/backup_ln28/dblog_bk/dblog_"$rq".txt
tail -n30 /opt/oracle10g/product/10.2.0/admin/$db/bdump/alert_$db.log >> /mnt/backup_ln28/dblog_bk/dblog_"$rq".txt
tail -n30 /opt/oracle/admin/$db/bdump/alert_$db.log >> /mnt/backup_ln28/dblog_bk/dblog_"$rq".txt
九、作业
oracle
crontab -e
00 23 * * * find /home/oracle/sql/*.log -mtime +7|xargs rm
00 23 * * * find /opt/orabackup/stud/stud* -mtime +7|xargs rm #把7天前的EXP备份删除掉
00 23 * * * find /opt/oracle10g/product/10.2.0/archdir/stud -mtime +7|xargs rm #把7天前的日志文件删除掉
00 23 * * * /opt/orabackup/expstud.sh
十.触发器创建
1.建立ddl触发器记录
--sys
--password命令不会记录
grant select on v_$session to system;
drop trigger system.ddl_watcher;
drop table system.ddl_event;
create table system.ddl_event (t_operate date, user_name varchar2(30), os_user varchar2(30), machine varchar2(64), ip_addr varchar2(30),program varchar2(48), event varchar2(30), object_name varchar2(100), object_type varchar2(30), object_owner varchar2(30), statement varchar2(4000));
create or replace trigger system.ddl_watcher
after ddl on database
when (user not in ('SYS'))
declare
v_osuser varchar2(30);
v_machine varchar2(64);
v_ip_addr varchar2(30);
v_program VARCHAR2(48);
event varchar2(30);
obj_name varchar2(100);
obj_type varchar2(30);
obj_owner varchar2(30);
sql_text ora_name_list_t;
stmt VARCHAR2(4000);
n number;
begin
select osuser,machine,nvl(program, 'sqlplus'),sys_context('userenv','ip_address')
into v_osuser,v_machine,v_program,v_ip_addr from v$session where audsid = userenv('sessionid');
event := ora_sysevent;
obj_name := ora_dict_obj_name;
obj_type := ora_dict_obj_type;
obj_owner := ora_dict_obj_owner;
n := ora_sql_txt(sql_text);
if n > 256 then
n:= 256;
end if;
if n>=1 then
FOR i IN 1..n LOOP
stmt:=substr(stmt||sql_text(i),1,3000);
END LOOP;
insert into system.ddl_event (t_operate, user_name, os_user, machine, ip_addr,
program, event, object_name, object_type, object_owner, statement)
values (sysdate, user, v_osuser, v_machine, v_ip_addr, v_program,event, obj_name, obj_type, obj_owner, stmt);
end if;
end;
/
2.数据库登录登出记录,以及IP限制
drop table system.login_info;
CREATE TABLE system.LOGIN_INFO
(
LOGINDATETIME DATE,
LOGOFFDATETIME DATE,
LOGGEDUSER VARCHAR2(30),
SESSIONID NUMBER,
TERMINAL VARCHAR2(200),
machine varchar2(200),
osuser varchar2(200),
PROGRAM VARCHAR2(200),
IP_ADD VARCHAR2(20)
);
CREATE INDEX system.IDX_LOGININFO_LOGINDATETIME ON system.LOGIN_INFO(LOGINDATETIME);
CREATE INDEX system.IDX_LOGININFO_sid ON system.LOGIN_INFO(sessionid);
grant select on sys.v_$session to system;
--IP登录记录及限制IP登录
CREATE OR REPLACE TRIGGER LOGON_AUDIT
AFTER LOGON
ON DATABASE
BEGIN
if USER NOT IN ('SYSMAN') THEN
--ip?T??
-- IF (USER='TS' AND sys_context('USERENV','IP_ADDRESS') NOT LIKE '10.1.%' AND sys_context('USERENV','IP_ADDRESS') NOT LIKE '10.2.%' AND sys_context('USERENV','IP_ADDRESS') NOT LIKE '10.248.%' AND sys_context('USERENV','IP_ADDRESS') NOT IN (
-- '10.10.1.90','10.10.1.88','10.8.0.13')) THEN
-- RAISE_APPLICATION_ERROR(-20099,'μ???ê§°ü,??áa?μ??óaè??±',FALSE);
-- END IF;
INSERT INTO SYSTEM.LOGIN_INFO
select sysdate,null,user,audsid,terminal,machine,osuser,program,sys_context('USERENV','IP_ADDRESS')
from sys.V_$SESSION where audsID=sys_context('USERENV','SESSIONID');
END IF;
END;
/
CREATE OR REPLACE TRIGGER SYSTEM.LOGOFF_AUDIT
BEFORE LOGOFF
ON DATABASE
BEGIN
if USER NOT IN ('SYSMAN') THEN
update system.login_info set LOGOFFDATETIME=sysdate where SESSIONID=sys_context('USERENV','SESSIONID');
END IF;
END;
/
3.重要表做DML监控
begin
dbms_fga.add_policy(object_schema => 'cc', --schema名(默认当前操作用户)
object_name => 't1', --被操作object对象
policy_name => 't1_audit', --policy名(唯一)
statement_types => 'insert,update,delete', --受影响的操作
);
end;
/
十二、做STATSTACK
1、 系统参数
JOB_QUEUE_PROCESSES=10
TIME_STATISTICS=TRUE
2、安装Statspack
cd $ORACLE_HOME/rdbms/admin
sqlplus "/ as sysdba"
创建存储数据的表空间,如果采样间隔较短,周期较长,打算长期使用,那么你可能需要一个大一点的表
空间,如果每个半个小时采样一次,连续采样一周,数据量是很大的。本例创建一个500M 的测试表空间。
create tablespace perfstat datafile '/opt/oracle10g/product/10.2.0/oradata/cscore/perfstat.dbf' size 500M autoextend on next 100m maxsize 1000m segment space management auto;
接下来我们就可以开始安装Statspack 了。这期间会提示你输入缺省表空间和临时表空间的位置,输入我们
为perfstat 用户创建的表空间和你的临时表空间。输入PERFSTAT的口令。
@spcreate
列出错误记录文件
$ ls *.lis
spauto.lis spcpkg.lis spctab.lis spcusr.lis spdtab.lis spdusr.lis
$ grep ORA- *.lis
$ grep err *.lis
在这一步,如果出现错误,那么你可以运行spdrop.sql 脚本来删除这些对象。然后重新运行spcreate.sql 来
创建这些对象。运行 SQL*Plus, 以具有SYSDBA 权限的用户登陆:
@spdrop.sql
3、测试安装好的Statspack
运行statspack.snap 可以产生系统快照,运行两次,然后执行spreport.sql 就可以生成一个基于两个时间点
的报告。
如果一切正常,说明安装成功。
execute statspack.snap
execute statspack.snap
@spreport.sql
4.修改参数
用spreport.sql生成statspack文件时,其中的SQL语句只显示了5行,往往显示不完整,有时又需要完整的SQL来进一步分析SQL的性能问题.以前一直不知道怎么办,今天查资料找到了解决办法.
9i
vi sprepins.sql
define top_n_events = 5;
define top_n_sql = 65;
define top_n_segstat = 5;
define num_rows_per_hash=50;
10g
vi sprepcon.sql
define num_rows_per_hash = 50;
5、规划自动任务
Statspack 正确安装以后,我们就可以设置定时任务,开始收集数据了。可以使用spatuo.sql 来定义自动任
务。
先来看看spauto.sql 的关键内容:
dbms_job.submit(:jobno, 'statspack.snap;',
trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);
这个job 任务定义了收集数据的时间间隔:
一天有24 个小时,1440 分钟,那么:
1/24 HH 每小时一次
1/48 MI 每半小时一次
1/144 MI 每十分钟一次
1/288 MI 每五分钟一次
我们可以修改spauto.sql 来更改执行间隔
@spauto
sqlplus perfstat/***
declare
jobno number;
begin
DBMS_JOB.submit(jobno,'statspack.snap;',trunc(sysdate,'HH')+1/24, 'trunc(SYSDATE,''HH'')+1/24');
commit;
end;
/
declare
jobno number;
begin
DBMS_JOB.submit(jobno,'statspack.snap;',trunc(sysdate+1/48,'MI'), 'trunc(SYSDATE+1/48,''MI'')');
commit;
end;
/
declare
jobno number;
begin
DBMS_JOB.submit(jobno,'statspack.snap;',sysdate, 'SYSDATE+0.5/24');
commit;
end;
/
自由报表运行一次得花很长时间
select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;
exec statspack.snap;
exec statspack.snap;
select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;
关于采样间隔,我们通常建议以15分-30分为时间间隔。因为statspack 的执行本身需要消耗资源,对于繁忙的生产系统,太短的采样对系统的性能会产生较大的影响(甚至会使statspack 的执行出现在采样数据中)。
6、生成分析报告
调用spreport.sql 可以生成分析报告:
@spreport
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值: 1
Begin Snapshot Id specified: 1
输入 end_snap 的值: 100
End Snapshot Id specified: 100
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_100. To use this name,
press
输入 report_name 的值: rep1205.txt
Using the report name rep1205.txt
这样就生成了一个报告,可是如果中间停过机,那么你可能收到错误信息:
一个statspack 的报告不能跨越一次停机,但是之前或之后的连续区间,收集的信息依然有效。你可以选
择之前或之后的采样声称report。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15357/viewspace-1024347/ ,如需转载,请注明出处,否则将追究法律责任。