以前都是用oracle 10g 现在也顺便用用11g 顺便就帖上安装过程,简单记录一下,做一个存档。
一、 安装数据库软件
1. 创建oracle用户
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)
passwd oracle # set password "oracle"
2. 创建相关目录及授权
cd /data
mkdir u01 u03 u04 u05
chown oracle:oinstall u01 u03 u04 u05
mkdir -p /data/u01/app/oracle
chown -R oracle:oinstall /data/u01/app/oracle
chmod -R 775 /data/u01/app/oracle
3. 配置内核参数
vim /etc/sysctl.conf 然后添加下列参数
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 7000
net.core.netdev_max_backlog = 2000
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.igmp_max_memberships = 1000
net.core.optmem_max = 40960
然后
sysctl -p
使配置生效
4. 修改用户限制
vim /etc/security/limits.conf
添加内容
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536
5. 修改安全限制
vim /etc/pam.d/login
增加:
session required /lib64/security/pam_limits.so
6. 设置环境变量
su - oracle
vi /home/oracle/.bash_profile
注释
#PATH=$PATH:$HOME/bin
#export PATH
添加:
export ORACLE_TERM=xterm
export ORACLE_TERM=xterm
export TMP=/tmp
export ORACLE_SID=psprd1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/1020
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$ORACLE_HOME/bin:/usr/bin:/bin:/usr/local/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
umask 022
vim .bashrc
添加:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8export
vim /etc/profile
添加:
HISTFILESIZE=2000
HISTSIZE=2000
HISTTIMEFORMAT="%Y%m%d-%H:%M:%S:"
export HISTTIMEFORMAT
7. 检查依赖包
可以使用下列命令查看需要安装的包:
rpm -q --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" binutils \
compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc \
glibc-common glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel
以及
rpm -q gcc make binutils openmotif setarch compat-db compat-gcc compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel libXp
8. 安装oracle 软件
- 载安装包并解压
[版本 11.2.0.1.0]
下载地址:官网下载地址
这里下载的是
linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
然后解压就可以。
unzip linux.zseries64_11gR2_database_1of2.zip && unzip linux.zseries64_11gR2_database_2of2.zip
解压后会生成一个database文件夹,两个压缩文件都会解压到database文件夹中
- 图形化界面安装
切换到图像界面 startx 或vnc都可以 root 下 xhost +
cd database
./runInstaller 或者 ./runInstaller –ignoreSysPrereqs
这里需要你填写邮件地址,可以不填报错没关系。
这里选择只安装oracle 软件即可
选择单库安装,如果你是rac就选择下面那个选项
增加中文的支持
选择安装的版本,这里选择企业版
指定base和home目录,保证两个目录以及存在并具有写权限
下一步
环境检查,如果有问题需要开启另外的会话修改后重新检查直到最后剩下图里面的哪些包,然后忽略即可。
下一步
下一步
切换到root用户按顺序执行下述两个文件即可
看到这里,Oracle 11g数据库软件就安装完成了。
二、 图形化界面创建数据库
还是那句话,一切为了方便!
切换到oracle 用户下 su - oracle
执行dbca 然后就创建吧,主要注意的就是SGA设置大概60-65% ,
PGA 16-20% 的物理内存,同时注意字符集建议使用Unicode utf8最大兼容中文,这里就不截图了。
三、 配置监听和本地服务名
1,配置监听
进入/data/u01/app/oracle/product/11.2.0.2/network/admin
创建监听文件vim listener.ora 添加如下内容:
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.253.150)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)
)
)
启动并查看监听状态:
lsnrctl start
过5分钟后查看状态
lsnrctl status
看到这样的内容差不多就算配置成功:
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
2,配置本地服务名
进入/data/u01/app/oracle/product/11.2.0.2/network/admin
创建监听文件vim tnsnames.ora 添加如下内容:
vba1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.253.150)(PORT =1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
测试本地服务名是否可用
tnsping vba1
看到如下内容说明配置成功:
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =10.1.253.15)(PORT =1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))
OK (10 msec)
3,添加oracle自启动
1, Root用户修改/etc/oratab 添加
2, Root用户修改$ORACLE_HOME/bin/dbstart和dbshut
找到ORACLE_HOME_LISTNER=$1将此处改为
ORACLE_HOME_LISTNER=$ORACLE_HOME
3,root用户下创建/etc/init.d/oracle 文件然后添加如下内容:
#==================Script File Start==================
#!/bin/bash
#
#chkconfig: 345 51 49
#description: init script to start/stop oracle database 10G,TNS listener
#match these values to your environment.
export ORACLE_TERM=xterm
export TMP=/tmp
export ORACLE_SID=orcl
export ORACLE_OWNER=oracle
export ORACLE_USER=oracle
export ORACLE_BASE=/data/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.2
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$ORACLE_HOME/bin:/usr/bin:/bin:/usr/local/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
#see how we are called:
case "$1" in
start)
echo -n "Starting oracle"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart" &
su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
touch /var/lock/subsys/oracle
echo
;;
stop)
echo -n "Shutting down oracle"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut" &
su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
rm -f /var/lock/subsys/oracle
echo
;;
restart)
echo -n "Restarting oracle"
$0 stop
$0 start
echo
;;
*)
echo "Usage: basename $0 {start|stop|restart}"
exit 1
esac
exit 0
#====end============================
然后chmod +x /etc/init.d/oracle
最后chkconfig --add oracle
四、 参数的调整
在调整参数前记得先备份一份spfile和init.ora
相关目录如下:
/data/u01/app/oracle/admin/orcl/pfile
cp init.ora.3172014132717 init.ora.3172014132717.bak
sqlplus sys用户登陆导数据
SQL> show parameter control files;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /data/u02/orcl/control01.ctl,
/data/u01/app/oracle/flash_rec
overy_area/orcl/control02.ctl
control_management_pack_access string DIAGNOSTIC+TUNING
如果觉得备份保留时间太长可以调整
SQL> alter system set control_file_record_keep_time = 3 scope=both;
参数调整后记得备份一份spfile或创建一份pfile保存到相应目录下即可。
SQL>create pfile='/data/u04/pfile_dir/orclpfile.ora' from spfile;
另外如果备份时间觉得太长的话可以适当加到large pool size 的大小,这里就不一一列出。
附注
0, 创建表空间(临时)设置自动扩展
create tablespace vba datafile '/data/u03/oradata/orcl/vba1.dbf' size 10G autoextend on next 100m maxsize 30G, '/data/u03/oradata/orcl/vba2.dbf' size 10G autoextend on next 100m maxsize 30G, '/data/u03/oradata/orcl/vba3.dbf' size 10G autoextend on next 100m
maxsize 30G;
#删除表空间及其对应的文件
drop tablespace stream_tbs including contents and datafiles
# 创建streams管理员帐号并授予权限("DEFAULT" 必须是大写)
create user vba profile "DEFAULT" identified by xxx default tablespace vba_tmp quota unlimited on vba;
1,创建dump目录:
create directory dump_dir as '/data/u04/dump_dir';
grant read,write on directory dump_dir to vba;
select * from dba_directories;
2,备份spfile:
create pfile='/data/u04/pfile_dir/orclpfile.ora' from spfile;
3,创建oracle命令行帮助:
su –oracle 进入cd $ORACLE_HOME/sqlplus/admin/help
Sqlplus system/xxx 登陆
执行@helpbld.sql会提示输入两个参数,第一个输入. 表示当前目录
第二个是helpus.sql 文件然后回车执行即可
4,Undo表空间预估大小语句 :
SELECT TRUNC(((UR * (UPS * DBS)) + (DBS * 24))/1024,2) ||' MB' AS "UNDO ESTIMATES SIZE"
FROM (SELECT VALUE AS UR FROM V$PARAMETER WHERE NAME = 'undo_retention'),
(SELECT (SUM(UNDOBLKS)/SUM(((END_TIME - BEGIN_TIME)*86400))) AS UPS FROM V$UNDOSTAT),
(SELECT BLOCK_SIZE AS DBS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME=
(SELECT UPPER(VALUE) FROM V$PARAMETER WHERE NAME = 'undo_tablespace'));
5,查询表结构:
select DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') from dual;
6,查看导入导出job情况:
select owner_name,job_name ,state from dba_datapump_jobs;
expdp ATTACH=job_name
impdp ATTACH=job_name
7,常用备份脚本
导出
expdp xxxx/xxxx@vba1 dumpfile=dp_reporttemp%U.dmp schemas=reporttemp logfile=dump_reporttemp_exp.log directory=DATA_PUMP_DIR job_name=vreporttemp_dump_job PARALLEL=2 compression=all
导入
impdp xxxx/xxxx@vba1 dumpfile=dp_reporttemp01.dmp,dp_reporttemp02.dmp schemas=reporttemp logfile=dump_reporttemp_exp.log directory=DUMP_DIR job_name=reporttemp_imdp_job PARALLEL=4 TABLE_EXISTS_ACTION=replace
8,杀死会话
SELECT 'alter system kill session ''' || c.sid || '' || ',' || c.serial# ||''';', a.object_id, a.session_id, b.object_name, c.* FROM v$locked_object a, dba_objects b, v$session c WHERE a.object_id = b.object_id AND a.SESSION_ID = c.sid(+) AND
schemaname = 'Unmi' ORDER BY logon_time;
9,查询表空间的大小
select a.tablespace_name,total,free,total-free used from
( select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files
group by tablespace_name) a,
( select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space
group by tablespace_name) b
where a.tablespace_name=b.tablespace_name;
#查看表空间和用户的关系
select tablespace_name, owner,sum(bytes) from dba_segments
group by tablespace_name, owner
#查看表空间资源限制
select * from dba_ts_quotas
ps:如果之前某个用户具有dba权限,后来进行回收那么需要资源控制赋权
grant unlimited tablespace to user_name;
或
alter user user_name quota unlimited on tablespace_name;
否则会出现空间不足的问题 ,回收用
revoke unlimited tablespace from user_name;
10,查看段的大小
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name ;
11,查询oracle正在执行的语句及用户信息
set linesize 200;
col sid for 99999;
col username for a10;
col sql_text for a25;
col machine for a15;
SELECT b.sid ,
b.username ,
spid ,
sql_text ,
b.machine
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value;
或者下面这个更好
Set linesize 200;
Col OSUSER for a10;
Col PROGRAM for a30;
Col SCHEMANAME for a15;
Col Cpu_Time for 999999999.99;
Col STATUS for a10;
Col SQL_TEXT for a25;
SELECT OSUSER,
PROGRAM,
USERNAME,
SCHEMANAME,
B.Cpu_Time,
STATUS,
B.SQL_TEXT
FROM V$SESSION A
LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS
AND A.SQL_HASH_VALUE = B.HASH_VALUE
ORDER BY b.cpu_time DESC;
12,查询sql锁情况
SELECT 'alter system kill session'||' '''||l.session_id||',' || s.serial# ||' '';' as killsql,
l.session_id sid,
s.serial#,
l.locked_mode ,
l.oracle_username ,
l.os_user_name ,
s.machine ,
s.terminal ,
o.object_name 被锁对象名,
s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
完!