Linux下的Oracle在安装结束后

时间:2021-07-30 23:22:11


Linux下的Oracle在安装结束后是处于运行状态的。运行ps –ef或者top –u oracle可以看到以Oracle用户运行的进程。在图形化界面下,运行$/usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/sqldeveloper/sqldeveloper.sh可以出现Oracle自带的免费Oracle管理客户端SQL Developer。试着连接刚安装的Oracle,连接成功。

在浏览器里打开:https://localhost.localdomain:1158/em

 

 

常见问题及解决方法

1.   11gR2 输出中文显示的“补丁”

 


 

(1)利用系统的字体库

#mkdir –p /usr/share/fonts/zh_CN/TrueType

下载zysong.ttf并把它放到/usr/share/fonts/zh_CN/TrueType/下即可(在windows下载到优盘里并解压出来或者直接把windows字库下的.ttf字体拷贝到优盘,再cp /media/disk/zysong.ttf /usr/share/fonts/zh_CN/TrueType),然后在:/usr/share/fonts/zh_CN/TrueType 目录中执行:

#mkfontscale

#mkfontdir

或者

(2) 安装oracle产品(只安装软件时还未安装数据库)

解决安装时中文是"囗囗囗囗囗囗囗囗", 进入/home/oracle/database/stage/Components/oracle.jdk/1.5.0.17.0/1/DataFiles /all.jar就是JDK. 在/tmp/新建一个文件夹命名为fallback/找一个zysong.ttf中文字体放入里面去。再用归档管理器打开它进入 /jdk/jre/lib/fonts/(all.jar包的目录)把在桌面建好的fallback文件夹拖放进来,完成后的目录结构应该是/jdk /jre/lib/fonts/fallback/zysong.ttf。

 

#mkdir   /tmp/fallback

#cp /home/oracle/database/stage/Components/oracle.jdk/1.5.0.17.0/1/DataFiles/all.jar                   

 /tmp/jdk

#

(3) 安装数据库

安装数据库的时候(就是第20步安装产品)又出来囗囗囗囗囗囗囗这是因为oracle产品(软件)已经安装上了, 它不使用oracle安装文件里的JDK了而使用环境变量ORACLE_HOME下的jdk(也就是你配置的 ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; ) /usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/jdk这个JDK,但这个jdk下没有/jre/lib /fonts/fallback/zysong.ttf这个文件所以就出来了囗囗囗囗。

    ①有一种解决办法就在你安装oracle时当它生成/usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/jdk这个目录后你 把zysong.ttf字体复制到这个jdk/jre/lib/fonts/fallback/下当它执行到安装数据库的时候应该就是中文了。
注意:一定要在安装数据库之前跟它自己生成环境变量ORACLE_HOME/目录下的jdk之后复制进去。应该就在第20步安装产品时执行复制文件成功后,执行Oracle Database 配置 前这个时间里手动复制zysong.ttf到你环境变量 ORACLE_HOME/jdk下的jre/lib/fonts/fallback/(也就是/usr/share/oracle/oracle11gR2/product /11.2.0/dbhome_1/jdk/jre/lib/fonts/fallback/这个目录里)。

#mkdir  /usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/jdk/jre/lib/fonts/fallback

#cp /usr/share/fonts/zh_CN/TrueType/ zysong.ttf     /usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/jdk/jre/lib/fonts/fallback/

或者#ln -s /usr/share/fonts/zh_CN/TureType/zysong.ttf /usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/jdk/jre/lib/fonts/fallback

#cd  /usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/jdk/jre/lib/fonts/fallback/

#mkfontscale

#mkfontdir

 

如果你的系统是中文,安装完成之后你还要复制,这样在配置oracle时和使用SQL Developer才能显示中文界面。
    ②最简单的方法是直接把oracle自带的jdk删掉,将本地的jdk连接过去就OK!
sudo mv /opt/oracle11g/server/jdk /opt/oracle11g/server/jdk.bak
sudo ln -s /usr/local/lib/jdk1.6.0_20 jdk

 

(4) 解决终端中中文显示乱码问题

检查安装是否正确时SQL>conn / as sysdba 显示的是'???'

在终端菜单“终端”—“设定字符编码”—“简体中文(BGK)”

(5)解决Secure CRT显示乱码问题

选项->会话选项->外观->字符编码->uft-8

(6) 解决在环境sqlplus中使用backspace键出现乱码的问题

使用sqlplus,在回删(backspace)时往往会出现 一串的乱码,出现乱码是由于oracle的sqlplus不使用gnu的readline库造成的。

  解决方法有两种:

  1.要使用回删键(backspace)时,同时按住ctrl键;

  2.设定环境变量  把 stty erase ^H 添加到.bash_profile中。

2. 出现agent nmhs解决办法(仅在Fedora中需要而在RHE中不需要)

主要因为C库的问题,fedora13后就不允许同时使用两个库原文http://download.oracle.com/docs/cd/E...如果忽略agent nmhs问题继续安装,那么em只能使用15分钟左右就再也连不上了。解决办法就是手动指定C库位置。出现agent nmhs问题后找到$ORACLE_HOME/sysman/lib/ins_emagent.mk文件,再文件里找 到$(MK_EMAGENT_NMECTL)字符串,然后在后面加上-lnnz11。和$(MK_EMAGENT_NMECTL)有个空格。然后点重试就 可以解决了

#vi /usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk

 

3. EM启动页面里的错误:到实例的代理连接状态失败详细资料ORA-12505:TNS:监听程序当前无法识别连接描述符中所给出的SID (DBD ERROR:OCIServerAttach) 和

$sqlplus /nolog

SQL>conn / as sysdba

SQL>startup

ORA-00845: MEMORY_TARGET not supported on this system

这两个问题其实是一回事,MEMORY_TARGET是11g才加入的新的内存参数,他是10g的ASMM的扩展,都是由于设置SGA的大小超过了操作系统/dev/shm的大小,如果没有设置size,它的大小是系统RAM的一半。

解决这个问题有三个方法:

(1) 一种是修改初始化参数,使得初始化参数中SGA的设置小于/dev/shm的大小,

# vi /etc/fstab

LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
LABEL=/data /data ext3 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
#tmpfs /dev/shm tmpfs defaults 0 0
tmpfs /dev/shm tmpfs defaults,size=1024M 0 0
LABEL=/home /home ext3 defaults 1 2
LABEL=/opt /opt ext3 defaults 1 2
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
LABEL=SWAP-sda8 swap swap defaults 0 0

…………

# umount /dev/shm
# mount /dev/shm
# df -k /dev/shm

(2) 另一种方法就是调整/dev/shm的大小

# mount -o remount,size=1G /dev/shm  //每次启动oracle都要用此命令

(3)调整MEMORY_TARGET的参数

SQL>alter system set memory_target=1024M;//启动oracle后用

 

安装完成后需要做的操作

1. 使用以下命令可以手动启动Oracle服务

以Root用户运行reboot命令重启Linux,重启完成后,默认情况下Oracle并不像Windows中的Oracle那样注册成服务,随机器一起启动的,所以需要手动敲入命令来启动。

一般情况下就启动数据库和监视器就够了,如果想用Oracle提供的EM来管理Oracle的话还需要启动EM控制台。

$ su – oracle

(1) 启动和停止数据库:
① 启动和停止数据库的最简单方法是从 OEM 控制台启动和停止。

② 要从命令行执行此操作,请在以 oracle 身份登录后使用 SQL*Plus,如下所示:

启动:
$ sqlplus
Enter user-name: / as sysdba
SQL> startup
SQL> exit

停止:
$ sqlplus
Enter user-name: / as sysdba
SQL> shutdown immediate
SQL> exit

③ 以下命令也可以启动和停止数据库(如果数据库在使用就不会停止掉)
$ dbstart
$ dbshut

(2) 启动和停止监听器:
监听器接受客户端的连接请求,并在验证证书后创建数据库连接。要使用 OEM,必须先启动监听器。
$ lsnrctl start
$ lsnrctl stop

  这样数据库的TNS也启动了,可以通过网络连接数据库了。

(3) 启动和停止 Oracle 企业管理器数据库控制:
$ emctl start dbconsole
$ emctl stop dbconsole

(4) 启动和关闭iSQL*Plus(在Oracle10g中)

$ isqlplusctl start
  $ isqlplusctl stop

(5) 以下是一些软件启动的命今
$netmgr             // Net Manager
$netca             // Net Configuration Assistant
$dbca              // Database Configuration assistant
$dbua              // Database Upgrade Assistant
$Locale Builder    // lbuilder

 

    配置Oracle为开机自动启动

虽然说Oracle作为服务器不会经常关机,但是偶尔重启一下,每次都要去手动启动Oracle还是太麻烦了,希望它能够像在Windows中一样,每次开机的时候自动启动Oracle,只需要将Oracle配置为Linux的服务就可以了。

有下面两种方法:

(1) 如果需要重启服务器后,希望Oracle服务器也自动正常启动,那么需要修改/etc/oratab中下面一行的标志为”Y”

# vi /etc/oratab

zwm8168://usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1:Y

(2) 建立脚本文件,操作如下:

① 以root用户建立/etc/rc.d/init.d/oracle11g脚本文件,内容如下(环境变量设置根据实际情况进行修改):

#!/bin/bash
#
# chkconfig: 35 95 1
# description: init script to start/stop oracle database 11g, TNS listener, EM
#
#
#
# match these values to your environment:

ORACLE_BASE=/usr/share/oracle/oracle11gR2
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
ORACLE_SID=zwm8168
ORACLE_UNQNAME=zwm8168
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
LANG=C

export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_UNQNAME PATH LD_LIBRARY_PATH LANG

# see how we are called:
case $1 in
start)
su - oracle<<EOO
lsnrctl start
sqlplus /nolog<<EOS
connect / as sysdba
startup
EOS
emctl start dbconsole
EOO
;;

stop)
su - oracle<<EOO
lsnrctl stop
sqlplus /nolog<<EOS
connect / as sysdba
shutdown immediate
EOS
emctl stop dbconsole
EOO
;;

*)
echo "Usage: $0 {start|stop}"
;;
esac

② 以root用户执行以下命令

chmod 755 /etc/rc.d/init.d/oracle11g

chkconfig --add oracle11g

③ 重启服务

service oracle11g stop

service oracle11g start

这样在开关机的时候oracle自动启动和停止。

3.添加系统服务

用root用户创建一个叫做/etc/init.d/dbora的文件,包括下面的内容:

#!/bin/sh
# description: Oracle auto start-stop script.
# chkconfig: - 20 80
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
ORA_HOME=/usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1

ORA_OWNER=oracle
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
su - $ORA_OWNER -c "emctl start dbconsole"
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
su - $ORA_OWNER -c "emctl stop dbconsole"
;;
'restart')
$0 stop
$0 start
;;
esac
修改权限为750
chmod 750 /etc/init.d/dbora
设置服务自动启动
chkconfig --level 345 dbora on

如果你遇上:cannot restore segment prot after reloc: Permission denied, 应该是SELinux的问题,可以考虑把它关闭。

 

4. 将专用服务器模式改为共享服务器模式。

第一步:启动Oracle服务和监听程序

$ sqlplus /nolog    // sqlplus sys/yourpassword as sysdba

SQL> conn /as sysdba

SQL> startup

SQL> exit

$ lsnrctl start

$ emctl start dbconsole

第二步:由SPFILE生成PFILE

SQL>  create pfile from spfile;

第三步,编辑生成的PFILE:initzwm8168.ora

$ vi /usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/dbs/init zwm8168.ora

# 删除以下行

*.dispatchers='(PROTOCOL=TCP) (SERVICE=zwm8168XDB)'

# 加入以下行

*.dispatchers='(PROTOCOL=TCP)'

*.shared_servers=4

*.max_shared_servers=20

第四步:重新启动数据库

SQL> shutdown immediate

SQL> startup pfile=initzwm8168.ora

第五步:生成新的SPFILE文件

SQL> create spfile from pfile;

第六步:编辑/usr/share/oracle/oracle11gR2/product/11.2.0/dbhome_1/network/admin/tnsnames.ora文件

(SERVER = DEDICATED)

# 将以上行改为

(SERVER = SHARED)

第七步:重启数据库、LISTENER和OEM

# 关闭数据库、LISTENER和OEM

SQL> shutdown immediate

$ lnsrctl stop

$ emctl stop dbconsole

# 启动数据库、LISTENER和OEM

SQL> startup

$ lsnrctl start

$ emctl start dbconsole

第八步:通过浏览器访问OEM

https://localhost.localdomain:1158/em

 

5. 卸载Oracle

LINUX下完全卸载Oracle数据库的步骤如下:

# rm -rf /usr/share/oracle/oracle11gR2/*

# rm -rf  /etc/oraInst.loc /etc/oratab

# rm –rf  /usr/local/bin/coraenv /usr/local/bin/dbhome /usr/local/bin/oraenv