标签为 Oracle 的文章

关于Oracle专用模式与共享模式的请教

今天无意之中翻到一个Word文档,打开一看居然是我在2010年1月14日,也就是一年多以前和一阵风大哥的聊天记录,是关于向他请教Oracle专用模式与共享模式的区别的,当时正好在做项目的过程中遇到了这个问题,虽然也查找过一些资料,但心里其实还是没底,而经过一阵风大哥的经验分享之后,就放心的把Oracle设置为了专用模式。
在这里,我把当时的聊天记录帖给大家,以供大家参考。

Rainbow  15:03:58
一阵风大哥。
请教你个问题。

一阵风  15:05:08
呵呵 什么问题 彩虹男

Rainbow  15:05:35
一般你Oracle用dbca建库时,是指定的共享模式还是专用模式呢?

一阵风  15:05:51
一般都是专用模式的
也是默认模式

Rainbow  15:06:07
但公司里有个前辈,他说共享模式好。
让我以后都建成共享模式。

一阵风  15:06:25
那看多少并发  还有业务方面了

Rainbow  15:06:30
我不知道它们到底有什么区别。
一般怎么来判断它们哪一种更适合业务?

一阵风  15:07:22
专用模式会为每个连接创建专有的服务进程,会分配专有的PGA 
如果你的pga比较大  专用模式比较有优的
如果并发比较大 短连接的话 共享模式好一点

Rainbow  15:09:15
好一点的话,主要是好在哪里?
速度,还是主机的资源耗用?

一阵风  15:12:21
比如 并发比较高  用专用模式比较耗资源  你可以g一下 网上有这方面说明
在dedicated server里,当你有大量的用户连接(比如,同一时间超过5000个用户连上来),你的系统负担就会相当大。而这种情况shared servers就可以处理的相对好一些,因为加入同时有5000个用户连上来而且我们知道一般只有1%的连接是active,那我们只需要设置50个 shared servers就可以把所有的用户请求处理得很好,并节省了系统资源。

Rainbow  15:16:11
知道啦,谢谢咯

一阵风  15:16:11
共享连接只是把连接SESSION信息放在LARGE POOL,所以LARGE POOL要大一些。而专用连接的SESION信息放在PGA。
不客气

Rainbow  15:16:52
那我用的10g,参数那里还用默认的百分比行不行啊?

一阵风  15:17:41
默认就行 你把SGA设置系统自动分配就行

Rainbow  15:18:02
还有就是我们有一些中间件软件,比如用Tomcat,weblogic这些之后。

一阵风  15:18:07
只设置一个sga最大值就行

Rainbow  15:18:16
是不是用共享模式就不如专用模式?

一阵风  15:18:52
我这边全是专用模式  也是tomcat  目前主要并发不是很大

Rainbow  15:19:34
按你那边的经验,如果并发达到300左右。8G内存的Server性能上如何?

一阵风  15:20:54
就用专用模式  然后把PGA设置大一点比如:5G

Rainbow  15:21:35
太感谢啦。

一阵风  15:21:43
不客气  多多交流

下面是一些总结性的言论:
---------------------------------------------------------------
共享模式适用了一种类似连接池的概念,但实际应用中效果不是很好,不知道在10g中有没有改善。
---------------------------------------------------------------
专用模式和共享模式的本质区别就是: 用户进程对ORACLE内存区里"服务器进程"的专用还是共享。
具体表现在:
1、在共享模式下,多个用户进程共享一个服务器进程,在专用模式下,ORACLE为每一个用户进程准备一个服务器进程。
2、在实际情况中,应用系统与数据库的连接请求总是很多,导致用户进程也很多,如果你的内存和CPU是有限的,同时,用户进程对数据库的操作占用空间不多,那你就把数据库连接模式设置为共享模式,这样,ORACLE内存区的服务器进程只是有限的几个,这几个服务器进程会通过一个调度程序来应付若干用户进程的请求。
3、如果你的硬件资源比较好,就设置成专用模式,每一个用户进程都有一个服务器进程对应,这样,你的用户进程对数据的处理会非常快!
---------------------------------------------------------------
简单的说,连接数少,需要长时间占用数据库的,建议用专有模式,如果连接数众多而系统资源有限,使用共享模式。
---------------------------------------------------------------

No Comments

Oracle10g/11g 在SUSE/RHEL上的安装与配置[原创总结]

在过去对众多项目的支撑过程中,Oracle作为首选数据库,其安装与配置过程成了重复性最多的工作之一。
在此,我进行了总结,并分享出来,希望能对大家有所帮助。
随着Oracle版本的提升,从9i ->10g ->11g,其安装与配置过程其实越来越简单,尤其到了11g,会自动检测所缺少的系统软件包,并在系统参数配置方面进行自动调优。

在Linux下Oracle的安装配置过程我认为可分为三大步:
第一步 预安装的环境参数配置
在Windows下没有这一步,因为已经由安装程序直接完成了,Linux下目前也有相应的rpm软件包可进行快速设置,例如SUSE的orarun,但我强烈建议不要采用这类软件包,因为它们所完成的设置在参数、权限、目录规划等方面都存在不足。

第二步 实际的数据库安装过程
执行runInstaller安装数据库程序;
执行dbca创建数据库实例;
执行netca创建数据库监听和配置本地服务名;
这些过程与Windows平台上基本上没有什么差异。

第三步 系统服务的创建与配置
创建管理数据库服务的shell脚本,实现数据库的开机自启动和关机自停止。
这一步过程在Windows平台上可直接通过 管理工具-服务 进行配置。

鉴于Oracle10g与11g的安装与配置步骤基本相同,我就把它们整合在了一起,具体步骤如下:
一、预安装的环境参数配置
阅读全文 »

No Comments

Oracle9i与10g SGA及PGA参数调优设置

关于Oracle的参数调优的文章很多,但是对于初学者来说要弄明白还是不容易的,下面是前辈提供的调优参数,让我们这些菜鸟们可以直接拿来用。

1.Oracle 10g上的调优参数:将PGA_aggreate_target 设一下,其它让它自己分配,一般就是内存的40%-60%之间。

2.Oracle9i上的调优参数:物理内存是4G Oracle优化,共享池200M(10% * 1024M*4),高速缓存1638M (40% * 1024M*4),大型池16M,java池128M,PGA 256M。SGA最大2500M (注:32位操作系统只能支持到1.7G)

3.Oracle9i上的调优参数:物理内存是8G oracle优化,共享池512M,高速缓存4G,大型池16M,JAVA池256M,PGA512M。SGA最大2500M (注:32位操作系统只能支持到1.7G)

另外,提供一个思路,通过配合压力测试,使用spotlight on Oracle工具来调整参数,一直调到全部为稳定运行为绿色,不出现红色告警,一个小时内黄色告警不超过2-3次,基本上就很不错了。

还有要明确的是,平台和硬件的调优是必要的,但绝非最关键的,最关键的是数据库的软件调优,数据库的设计,一个好的数据库设计能够极大的改善数据库的性能。

No Comments

一次 ORA-03113: end-of-file on communication channel 错误定位过程

手动关闭Oracle之后打算再次启动Oracle:
$sqlplus ‘/as sysdba’
SQL> startup

ORA-03113: end-of-file on communication channel
结果便出现了以上错误。

通过上网查询出错原因,常见的原因有以下几个:
1、Unix核心参数设置不当
2、Oracle执行文件权限不正确/环境变量问题
3、客户端通信不能正确处理
4、数据库服务器崩溃/操作系统崩溃/进程被kill
5、Oracle 内部错误
6、特定SQL、PL/SQL引起的错误
7、空间不够
8、防火墙的问题

因为oracle已经正常运行了一个月,因此unix参数不对、权限环境变量、防火墙这些在首次启动就会发现的问题不应该现在才出现;而对于客户端通信、特定的SQL引起的错误,因为在启动过程中就已经报错,所以也排除。

由此判断,数据库服务崩溃/系统崩溃/进程被kill、Oracle内部错误、空间不够可能是原凶。

首先从最容易查起的原因开始,查询磁盘空间,结果磁盘空间利用不到30%,剩余空间足够;

于是检查Oracle内部错误:
$cd $ORACLE_HOME/admin/SID/cdump

发现大量的core,看来原因找到了。但所有的core目录都是空的,没有任何文件。

使用ulimit –a查看,原因core的文件大小为0,这是什么原因导致的core呢?

现在原因不明,于是检查bdump目录下的日志。
$cd $ORACLE_HOME/admin/SID/bdump
$cat alert_SID.log

发现日志量很大,满屏的都是同一个错误,扩展表空间失败:
ORA-1654: unable to extend index SID.INDEX by 128 in tablespace TABLESPACE
ORA-1653: unable to extend table SID.TABLE by 1024 in tablespace TABLESPACE

看来表空间已经满了并且无法扩展导致oracle出现core的。
$cd $ORACLE_BASE/oradada/SID
$ls –lh
-rw-r----- 1 oracle oinstall 2.1G Oct 14 15:10 SID_DATA01.DBF
-rw-r----- 1 oracle oinstall 201M Oct 14 12:28 SID_INDEX01.DBF

原来是空间已经达到2G,但应该触发扩展才对。
安装数据库时并没有限制SID_DATA01.DBF文件大小。

查看创建表空间的脚本,发现在脚本中对该文件有限制。脚本如下:
CREATE TABLESPACE SID_DATA DATAFILE
‘/data/oracle/oradata/SID/SID_DATA01.DBF' SIZE 200M AUTOEXTEND ON NEXT 200M MAXSIZE 2048M’
MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL;

原来是在创建表空间时人为限制了表空间大小最大为2G,这是优化导致的问题,今后在新建数据库时都要记住,数据库要根据用户的使用场景来变更表空间。

很多程序只支持2G大小的文件,所以才定为2G,以避免此类问题,虽然使用的是ext3的文件系统,为了方便解决问题才定为2G。但数据库文件为2.1G,难道是文件太大导致的不能启动?

似乎问题找到了,只需要修改表空间即可解决问题。

但要修改表空间,首先要启动数据库,才能够修改表空间的参数,问题又绕回来了,数据库启不动。

于是再次在网上搜索资料,表空间满导致数据库启动不了的,还没有人遇见这样的问题,看来我们碰到的问题并不是前面所列出的八种原因,而是一种特殊原因。

尝试过多种启动方式:
Startup 直接启动
Startup mount 加载数据库
Startup unmount 不加载数据库
Startup force 强行启动

全是报同一个错误提示:ORA-03113: end-of-file on communication channel

经过几个小时,总结了一下,表空间满应用程序不停向数据库写数据,oracle出现异常,之后无法启动。但要解决数据库空间问题必须先启动。

于是在网上查询是否有办法在不启动数据库的情况下修改表空间,但找了很久没有此类方法。

难道真的要用删除数据库的方法才能够解决?

细心的人可能发现了我们问题解决过程,startup mount 和startup unmount执行结果都是相同的。或许是启动过程中碰到了什么问题导致无法启动,难道和数据库的文件大小根本没关系?是不是oracle启动时还需要其它文件,而这些文件也增大了?

于是使用find命令查询大于2G文件
$cd $ORACLE_BASE
$find . -size +2097160192c
./product/9.2.0.4/admin/SID/bdump/alert_SID.log
./oradata/SID/SID_DATA01.DBF

真的还有一个,清空该日志文件,启动….成功,再次修改oracle的表空间属性,日志中错误消失。

总结
1、经查询资料,了解到Oracle对自身日志文件有一个限制就是每个日志文件不能大于2G,大于2G以后会出现各种问题。且同样对日志文件有这样限制的软件还有不少,如Squid,RoseHA等。因此以后我们在今后要实际生产环境中部署的时候,一定要针对这一特点手工对Oracle做自动日志切割和清理。

2、千万不要删除oracle的数据库文件,即使备份后恢复数据也会丢掉,因为Oracle的数据文件是与磁盘物理位置有关联的,不像mysql那样。

No Comments

在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优[原创全面规范]

本文带有图片的完整文档下载地址:http://heyLinux.com/download/Oracle9i.zip

 

1 安装配置Oracle 9i数据库

本章描述内容如下所示:
1.1 安装前的准备工作
介绍在安装Oracle之前所需的准备工作。
1.2安装前的系统设置
介绍在安装Oracle之前所必须的系统设置。
1.3 安装所需软件补丁包
介绍在基于RedHat Enterprise Linux AS4操作系统上安装Oracle之前所需软件补丁包的安装。
1.4 安装所需软件补丁包
介绍在基于RedHat Enterprise Linux 5操作系统上安装Oracle之前所需软件补丁包的安装。
1.5 安装配置Oracle数据库
介绍如何安装设置Oracle数据库软件。
1.6 编辑配置Oracle启动脚本
介绍如何创建并配置Oracle自定义脚本。

 

1.1 安装前的准备工作
1.1.1 获取数据库安装包
确保已取得9.2.0.4版本的Oracle数据库安装文件;
-ship_9204_linux_disk1.cpio.gz
-ship_9204_linux_disk2.cpio.gz
-ship_9204_linux_disk3.cpio.gz

确保已取得安装所需的软件补丁包;
-oracle9i_rhel_sp.zip

1.1.2 检查操作系统版本
执行命令# cat /etc/redhat-release,检查操作系统版本信息。

屏幕显示信息为
Red Hat Enterprise Linux Server release 5.2 (Tikanga)
表示已是符合要求的RHEL 5.0以上版本。

Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
表示已是符合要求的RHEL AS4.0以上版本。

 

1.2 安装前的系统设置
1.2.1 创建用户和组
添加安装过程中需要用到的用户和组;
$ su – root  //直接使用root登录或切换到root身份
# groupadd oinstall  //添加用户组oinstall
# groupadd dba  //添加用户组dba
# useradd –g oinstall –G dba oracle  //添加用户oracle
# passwd oracle  //为oracle用户设置密码

1.2.2 创建安装目录
# mkdir –p /data/install
# cp ship_9204_linux_disk1.cpio.gz /data/install
# cp ship_9204_linux_disk2.cpio.gz /data/install
# cp ship_9204_linux_disk3.cpio.gz /data/install
# cp oracle9i_rhel_sp.zip /data/install

//将所有的安装包以及补丁包拷贝到该install文件夹里

# chown –R oracle.oinstall /data  //将目录权限属主更改为oracle用户

1.2.3 进行系统设置
a)设置内核参数
编辑/etc/sysctl.conf
kernel.shmmax = 2147483648  //这里设置为物理内存的一半,但32位RedHat最大仅支持4*1024*1024*1024 - 1 = 4294967295个字节
kernel.shmmni = 4096
kernel.shmall = 8388608
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

执行sysctl以反应修改,使内核参数立刻生效
# sysctl –p

b)设置Oracle对文件的要求
编辑/etc/security/limits.conf 添加以下内容到文档尾部
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

c)设置Oracle环境变量
编辑/home/oracle/.bash_profile 添加以下内容到文档尾部
export ORACLE_SID=SFENET   //根据需要填写
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=/data/oracle/product/9.2.0.4
export LD_LIBRARY_PATH=/data/oracle/product/9.2.0.4/lib:/lib:/usr/lib:/usr/local/lib:/usr/X11R6/lib
export TNS_ADMIN=/data/oracle/product/9.2.0.4/network/admin
export ORA_NLS33=/data/oracle/product/9.2.0.4/ocommon/nls/admin/data
export ORACLE_OWNER=oracle
export ORACLE_TERM=xterm
export PATH=/data/oracle/product/9.2.0.4/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

1.3 安装所需软件补丁包(基于RedHat Linux AS 4)
a)解压准备好的补丁压缩包
# cd /data/install
# unzip oracle9i_rhel_sp.zip
# cd /data/install/oracle9i_rhel_sp/

b)打p3006854_9204_LINUX.zip
# unzip p3006854_9204_LINUX.zip
# chmod +x 3006854/rhel3_pre_install.sh
# 3006854/rhel3_pre_install.sh

c)安装其它软件补丁包
# rpm -ivh compat-db-4.1.25-9.i386.rpm
# rpm -ivh compat-gcc-32-3.2.3-47.3.i386.rpm
# rpm -ivh compat-gcc-32-c++-3.2.3-47.3.i386.rpm
# rpm -ivh libaio-devel-0.3.105-2.i386.rpm
# rpm -ivh libaio-0.3.105-2.i386.rpm
# rpm -ivh compat-oracle-rhel4-1.0-5.i386.rpm
# rpm -ivh compat-libcwait-2.1-1.i386.rpm
# rpm -ivh compat-libgcc-296-2.96-132.7.2.i386.rpm
# rpm -ivh compat-libstdc++-296-2.96-132.7.2.i386.rpm
# rpm -ivh compat-libstdc++-33-3.2.3-47.3.i386.rpm
# rpm -ivh openmotif21-2.1.30-11.RHEL4.6.i386.rpm
# rpm -ivh giflib-4.1.3-8.i386.rpm
# rpm -ivh glib-1.2.10-26.fc7.i386.rpm
# rpm -ivh libpng10-1.0.18-2.i386.rpm
# rpm -ivh ORBit-0.5.17-22.rhel5.i386.rpm
# rpm -ivh gtk+-1.2.10-57.fc7.i386.rpm
# rpm -ivh imlib-1.9.15-2.fc7.i386.rpm
# rpm -ivh gnome-libs-1.4.1.2.90-44.1.i386.rpm
# rpm -ivh gnome-libs-devel-1.4.1.2.90-44.1.i386.rpm
# rpm -ivh xorg-x11-deprecated-libs-devel-6.8.2-1.EL.13.36.i386.rpm
# rpm -ivh xorg-x11-deprecated-libs-6.8.2-1.EL.13.36.i386.rpm

1.4 安装所需软件补丁包(基于RedHat Enterprise Linux 5)
a)解压准备好的补丁压缩包
# cd /data/install
# unzip oracle9i_rhel_sp.zip
# cd /data/install/oracle9i_rhel_sp/

b)打p3006854_9204_LINUX.zip
# unzip p3006854_9204_LINUX.zip
# chmod +x 3006854/rhel3_pre_install.sh
# 3006854/rhel3_pre_install.sh

c)安装其它软件补丁包
# rpm -ivh compat-libcwait-2.1-1.i386.rpm
# rpm -ivh compat-db-4.2.52-5.1.i386.rpm
# rpm -ivh libXp-1.0.0-8.i386.rpm
# rpm -ivh libXp-devel-1.0.0-8.i386.rpm
# rpm -ivh openmotif-2.3.0-0.3.el5.i386.rpm
# rpm -ivh openmotif-devel-2.3.0-0.3.el5.i386.rpm
# rpm -ivh giflib-4.1.3-8.i386.rpm
# rpm -ivh glib-1.2.10-26.fc7.i386.rpm
# rpm -ivh libpng10-1.0.18-2.i386.rpm
# rpm -ivh ORBit-0.5.17-22.rhel5.i386.rpm
# rpm -ivh gtk+-1.2.10-57.fc7.i386.rpm
# rpm -ivh imlib-1.9.15-2.fc7.i386.rpm
# rpm -ivh gnome-libs-1.4.2-7.rhel5.i386.rpm

d)创建软链接
# ln -s /usr/lib/libstdc++-libc6.2-2.so.3 /usr/lib/libstdc++-libc6.1-1.so.2

1.5 安装配置Oracle数据库
a)重新登录操作系统
注销当前用户后通过oracle用户登录到图形界面

b)解压Oracle安装文件
$ cd /data/install
$ zcat ship_9204_linux_disk1.cpio.gz | cpio -idmv
$ zcat ship_9204_linux_disk2.cpio.gz | cpio -idmv
$ zcat ship_9204_linux_disk3.cpio.gz | cpio -idmv

c)安装Oracle9i数据库服务器
$ export LANG=en_US.UTF-8  //更改系统语言为English
$ Disk1/runInstaller  //启动安装程序

弹出Oracle安装向导界面,如下图所示。
选择“Next”。

出现如下图所示对话框,保持默认不变,继续下一步“OK”。

弹出“UNIX Group Name”窗口,如下图所示。

设置数据库组名。
在“UNIX Group Name”文本框中填写数据库组名“oinstall”。
在“UNIX Group Name”窗口单击“Next”。
安装程序将弹出“Oracle Universal Installer”对话框,要求以root用户执行/tmp/orainstRoot.sh脚本,如下图所示。

新建一个终端窗口,切换到root用户身份并执行脚本
$ su - root
# /tmp/orainstRoot.sh

屏幕显示类似如下信息即表示执行成功
Creating Oracle Inventory pointer file (/etc/oraInst.loc)
Changing groupname of /data/oracle/oraInventory to oinstall.

脚本执行完毕后,返回到当前图形安装界面
在“Oracle Universal Installer”对话框中单击“Continue”。

安装程序进入“File Locations”窗口,设置“File Locations”,如下图所示。

在“File Locations”窗口单击“Next”

安装程序进入“Available Products”窗口,如下图所示。

在“Select a product to install”下的产品类型选项中选择“Oracle9i Database 9.2.0.4.0”单选框。

在“Available Products”窗口单击“Next”。安装程序进入“Installation Types”窗口,如下图所示。

选择“Enterprise Edition”企业版安装类型。
在“Installation Types”窗口单击“Next”。

安装程序进入“Database Configuration”窗口,如下图所示。

在“Select a database suited to your needs.”下的数据库配置方式选项中选择“Software Only”单选框,只安装软件,实例创建到后面有描述。
在“Database Configuration”窗口单击“Next”。

安装程序进入“Summary”窗口,如下图所示。

确认安装选项后单击“Install”。

安装程序进入“Install”窗口,如下图所示。

弹出“Setup Privileges”提示框,

要求执行root.sh脚本,如下图所示。

在等待安装的过程中,系统会弹出“Setup Privileges”提示框,要求以root用户执行/data/oracle/product/ 9.2.0.4/root.sh脚本。请根据以下步骤继续安装。

新建一个终端窗口,切换到root用户身份并执行脚本
$ su - root
# /data/oracle/product/ 9.2.0.4/root.sh
脚本执行过程中,对系统提示需配置的配置项,请保持默认配置,直接按“Enter”键即可。
如出现“Now product-specific root actions will be performed.”字样表示执行成功。
脚本执行完毕后,返回到当前图形安装界面。

在“Setup Privileges”提示框单击“OK”。

请等待安装至100%。

安装至100%后安装程序进入“End of Installation”窗口,单击“Exit”。

d)解决安装Configuration Tools中的错误
解决Agent Configuration Assistant启动失败的问题
$cd /data/oracle/install/oracle9i_rhel_sp/
$ unzip p3238244_9204_LINUX.zip
$ cp 3238244/files/lib/stubs/* $ORACLE_HOME/lib/stubs/
$ cd $ORACLE_HOME/network/lib/
$ make -f ins_oemagent.mk install

解决Oracle Net Configuration Assistant, Oracle Database Configuration Assistant启动失败的问题
$ rm $ORACLE_HOME/JRE
$ ln -s $ORACLE_BASE/jre/1.3.1/ $ORACLE_HOME/JRE
$ ln -s $ORACLE_HOME/JRE/bin/java $ORACLE_HOME/JRE/bin/jre
$ ln -s $ORACLE_HOME/JRE/bin/i386/native_threads/java $ORACLE_HOME/JRE/bin/i386/native_threads/jre

解决Net Manager启动失败的问题
$cd $ORACLE_HOME/bin/
$vi netmgr

进行下面的修改
# Run Net Manager
$JRE -classpath $CLASSPATH oracle.net.mgr.container.NetApplication oracle.net.mgr.container.NetApplication
修改为:
# Run Net Manager
$JRE -noverify -classpath $CLASSPATH oracle.net.mgr.container.NetApplication oracle.net.mgr.container.NetApplication

e)执行dbca配置并创建数据库
在控制台执行命令dbca,显示安装准备界面如下图所示。
$ dbca

安装准备完毕后,显示安装欢迎窗口如下图所示。

单击“Next”,显示操作类型选择窗口如下图所示。

选择“Create a database”后,单击“Next”,显示数据库模式选择窗口如下图所示。

选择“New Database”后,单击“Next”,显示数据库信息设置窗口如下图所示。

设置“Global Database Name”和“SID”为“SFENET”,单击“Next”,显示“Database Features”窗口如下图所示。
Global Database Name:全局数据库名称。
SID:Oracle数据库实例名。

将“Database Features”页签中所选中的内容全部取消。
在取消各项内容时,弹出提示窗口示例如下图所示。

单击“Yes”,显示下图所示窗口。

单击“Standard database features...”,显示窗口如下图所示。

将“Standard database features”页签中所选中的内容全部取消。

在取消各项内容时,弹出提示窗口示例如下图所示。

单击“Yes”,显示下图所示窗口。

单击“OK”,再单击“Next”,显示下图所示窗口。

选择“Dedicated Server Mode”,单击“Next”,显示参数设置窗口如下图所示。

在“Memory”页签中设置“Shared Pool”为“400”,“Buffer Cache”为“1000”,“Java Pool”为“100”,“Large Pool”为“40”,“PGA”为“24”后,选择“Character Sets”页签如下图所示。

根据实际应用不同,考虑到中文支持良好的情况,选择“ZHS16GBK”为佳,若是多语言国际性应用系统则应选择“UTF8”。
在“Character Sets”页签中设置数据库字符集为“UTF8”,选择“DB Sizing”页签如下图所示。

保持“Block Size”和“Sort Area Size”参数为默认即可。然后选择“File Locations”页签如下图所示。

保持此页签所有选项为默认即可,然后选择“Archive”页签,设置以下参数,如下图所示。

在海量数据下做数据恢复的时候,开启了该归档模式会导致恢复时磁盘空间不足,从而导致数据恢复失败。
于是这里选择非归档模式,即不要选择“Archive Log Mode”复选框。

然后点击“Next”按钮,进入“Database Storage”窗口,如下图所示。

选择“Controlfile”,显示数据库控制文件信息如下图所示。

单击“Options”页签,如下图所示。

修改“Maximum no. of datafiles”参数为“500”,修改“Maximum no. of redo log files”参数为“40”,修改“Maximum no. of  log members”参数为“3”。

在“Storage”目录树中选择“Tablespaces”中的“INDX”目录,如下图所示。
“INDX”目录“General”页签

按照所示修改Tablespaces目录中INDX的文件名,路径和容量。
Storage-Tablespaces-INDX            File Name                                                  File Directory Size
indx01.dbf                                  {ORACLE_BASE}/oradata/{DB_NAME}/    100MB

Tablespaces分支文件属性的设置方法如下:
双击File Name、File Directory或Size的值域框,弹出“Edit Datafile”对话框。
进入“General”页签,在“Name”文本框中输入“File Directory/File name”,在File Size文本框中输入文件大小。
进入“Storage”页签,去掉“Automatically extend datafile when full(AUTOEXTEND)”复选框。
后面的Tablespaces分支文件都要按照上述方法进行操作。

按照所示修改Tablespaces目录中SYSTEM的文件名,路径和容量。
Storage-Tablespaces-SYSTEM     File Name                                                     File Directory Size
system01.dbf                             {ORACLE_BASE}/oradata/{DB_NAME}/       2000MB

按照所示修改Tablespaces目录中TEMP的文件名,路径和容量。
Storage-Tablespaces-TEMP         File Name                                                     File Directory Size
temp01.dbf                                {ORACLE_BASE}/oradata/{DB_NAME}/      2000MB
temp02.dbf                                {ORACLE_BASE}/oradata/{DB_NAME}/      2000MB

按照所示修改Tablespaces目录中TOOLS的文件名,路径和容量。
Storage-Tablespaces-TOOLS       File Name                                                      File Directory Size
tools01.dbf                                {ORACLE_BASE}/oradata/{DB_NAME}/       100MB

按照所示修改Tablespaces目录中UNDOTBS1的文件名,路径和容量。
Storage-Tablespaces- UNDOTBS1   File Name                                                      File Directory Size
undotbs01.dbf                               {ORACLE_BASE}/oradata/{DB_NAME}/       2000MB
undotbs02.dbf                               {ORACLE_BASE}/oradata/{DB_NAME}/       2000MB
undotbs03.dbf                               {ORACLE_BASE}/oradata/{DB_NAME}/       2000MB
undotbs04.dbf                               {ORACLE_BASE}/oradata/{DB_NAME}/       2000MB

按照所示修改Tablespaces目录中USERS的文件名,路径和容量。
Storage-Tablespaces- USERS          File Name                                                     File Directory Size
users01.dbf                                   {ORACLE_BASE}/oradata/{DB_NAME}/       40MB

在“Storage”目录树中选择“Redo Log Groups”中的“1”目录,按照所示修改大小。
Storage-Redo Log Groups- 1           File Name                                                      File Directory Size
redo01.log                                    {ORACLE_BASE}/oradata/{DB_NAME}/        1024MB

在“Storage”目录树中选择“Redo Log Groups”中的“2”目录,按照所示修改大小。
Storage-Redo Log Groups- 2           File Name                                                      File Directory Size
redo02.log                                    {ORACLE_BASE}/oradata/{DB_NAME}/        1024MB

在“Storage”目录树中选择“Redo Log Groups”中的“3”目录,按照所示修改大小。
Storage-Redo Log Groups-3          File Name                                                       File Directory Size
redo03.log                                   {ORACLE_BASE}/oradata/{DB_NAME}/        1024MB

单击“Next”,显示“Creation Options”窗口如下图所示。

单击“Finish”,显示“Summary”窗口如下图所示。

单击“OK”,显示数据配置脚本生成成功如下图所示。

单击“OK”,显示数据服务创建进度如下图所示。

在创建数据的过程中,会出现如下提示,单击“ignore”即可。

成功创建数据库实例后,设置sys和system用户的密码,如下图所示。

请牢记sys用户密码、system用户密码。

单击“Exit”,退出安装。

f)执行netca配置数据库监听服务
在控制台执行命令netca,显示监听配置界面如下图所示。
$ netca

单击“Next”,显示操作类型选择窗口如下图所示。

选择“Add”后,单击“Next”,显示监听名称配置窗口如下图所示。

单击“Next”,显示监听协议配置窗口如下图所示。

单击“Next”,显示监听端口配置窗口如下图所示。

单击“Next”,显示监听配置结束画面如下图所示。
选择“No”,单击“Next”,然后单击“Finished”退出。
在终端中出现“Listener Started successfully.”字样表示监听成功配置并启动。

g)安装Oracle9i数据库客户端
$ export LANG=en_US.UTF-8  //更改系统语言为English
$ Disk1/runInstaller  //启动安装程序
弹出Oracle安装向导界面,如下图所示。

选择“Next”。

安装程序进入“File Locations”窗口,设置“File Locations”,如下图所示。

在“File Locations”窗口单击“Next”
安装程序进入“Available Products”窗口,如下图所示。

在“Select a product to install”下的产品类型选项中选择“Oracle9i Client 9.2.0.4.0”单选框。
在“Available Products”窗口单击“Next”。

安装程序进入“Installation Types”窗口,如下图所示。

选择“Administrator”管理员安装类型。
在“Installation Types”窗口单击“Next”。

安装程序进入“Oracle Universal Installer”窗口,如下图所示。
确认安装选项后单击“Install”。

安装程序进入“Install”窗口,如下图所示

安装至100%后安装程序进入“End of Installation”窗口,如下图所示。

在“End of Installation”窗口单击“Exit”。

1.6 编写配置Oracle启动脚本
a)编辑 /etc/oratab文件

编辑 /etc/oratab文件,配置以下常用选项:
#*:/data/oracle/product/9.2.0.4:N  //注释掉该选项;
SFENET:/data/oracle/product/9.2.0.4:Y  //修改该选项最后的“N”为“Y”;

b)创建软链接
# ln -s /data/oracle/product/9.2.0.4/dbs/spfileSFENET.ora /data/oracle/product/9.2.0.4/dbs/initSFENET.ora

c)修改dbshut脚本

编辑 /data/oracle/product/9.2.0.4/bin/dbshut文件,修改以下内容:

修改第80行与第85行的 shutdown 为 shutdown immediate

d)编写自定义脚本
创建用于启动、关闭与重启Oracle服务的自定义脚本并命名为oracle9i,内容如下:

================================================================
# !/bin/sh
# chkconfig: 2345 80 03
# description: oracle dabase deamons
# filename:oracle9i

ORACLE_HOME=/data/oracle/product/9.2.0.4
ORACLE_OWNER=oracle

case "$1" in
'start')

ORACLE_PROCESS=`ps -e |grep oracle |wc -l`

if [ $ORACLE_PROCESS -ne 0 ];
then
echo "ERROR: Oracle already running."
sleep 1
else
echo -n "Starting Oracle: "
su - $ORACLE_OWNER -c $ORACLE_HOME/bin/dbstart
touch /var/lock/subsys/oracle9i
sleep 2
fi

ORACLE_LISTENER=`ps -e |grep tnslsnr |wc -l`

if [ $ORACLE_LISTENER -ne 0 ];
then
echo "ERROR: Listener already running."
sleep 1
else
echo -n "Starting Listener: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
sleep 2
fi

echo
;;

'stop')

ORACLE_LISTENER=`ps -e |grep tnslsnr |wc -l`

if [ $ORACLE_LISTENER -ne 0 ];
then
echo -n "Shutting down Listener: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"
sleep 2
else
echo "ERROR: Listener already shutdown."
sleep 1
fi

ORACLE_PROCESS=`ps -e |grep oracle |wc -l`

if [ $ORACLE_PROCESS -ne 0 ];
then
echo -n "Shutting down Oracle: "
su - $ORACLE_OWNER -c $ORACLE_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle9i
sleep 2
else

echo "ERROR: Oracle already shutdown."
sleep 1
fi

echo
;;

'restart')

echo "Restarting Oracle: "

$0 stop
$0 start

echo
;;

*)

echo "Usage: oracle { start | stop | restart }"
exit 1

esac

exit 0
================================================================

 

e)配置自定义脚本

通过以下命令将自定义脚本添加至系统自动启动与自动关闭管理服务中:
# cp oracle9i /etc/rc.d/init.d/
# chmod 744 /etc/rc.d/init.d/oracle9i
# chown oracle:oinstall /etc/rc.d/init.d/oracle9i
# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc3.d/S99oracle9i
# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc5.d/S99oracle9i
# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc0.d/K01oracle9i
# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc6.d/K01oracle9i

这样,系统在开启时将会最后自动启动Oracle,而在关闭时会最先自动关闭Oracle。

f)使用自定义脚本
/etc/init.d/oracle9i start  //启动数据库
/etc/init.d/oracle9i stop  //关闭数据库
/etc/init.d/oracle9i restart  //重启数据库

1 Comment

Linux下自动启动和关闭Oracle数据库

自动启动oracle9i
在/home/oracle下建立文件StartOra.sh:
vi StartOra.sh
--------------------------------
echo "Begin to start the oracle!"
lsnrctl start
sqlplus /nolog < connect /as sysdba
startup
exit
EOF
echo "Oracle just have been started!"
exit
--------------------------------
给StartOra.sh执行权限
chmod a+x StartOra.sh

自动关闭oracle9i
在/oracle下建立文件StopOra.sh:
vi StopOra.sh
--------------------------------
echo "Begin to stop the oracle!"
sqlplus /nolog < connect /as sysdba
shutdown immediate
exit
EOF
lsnrctl stop
echo "Oracle just have been stopped!"
exit
--------------------------------
给StopOra.sh执行权限
chmod a+x StopOra.sh

将启动和关闭oracle脚本加到系统的开机自启动
vi /etc/rc.local
su - oracle -c "/home/oracle/StartOra.sh" #启动oracle

后续:其实这个脚本并不是最好的,最好的解决方案是通过调用Oracle自带的dbstart和dbshut来实现。

文章见此:http://heylinux.com/archives/371.html

No Comments

Linux下Oracle数据库的启动、关闭和数据字典的利用

注:该文章系网上多篇文档和资料的查询,并结合实际操作而完成,未能一一列举出处,仅在此表示感谢。
注意$代表shell命令提示符,这里的oracle是9.0以上版本。

启动步骤:
$ su - oracle
$ sqlplus / nolog
sql> conn / as sysdba
sql> startup (一般不需要加参数,只要设置好环境变量)
sql> quit (退出sql模式)
$ lsnrctl start (启动监听器)

【startup】等于以下三个命令:
startup nomount
alter database mount
alter database open
startup有七个参数,七个参数的含义如下:
【nomount】非安装启动, 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
这种方式启动下可执行:重建控制文件、重建数据库。
【mount dbname 】安装启动,执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文件和日志文件进行校验检查。
这种方式启动下可执行:数据库日志归档、数据库介质恢复、使数据文件联机或脱机,重新定位数据文件、重做日志文件。
【open dbname 】先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件。
这种方式下可访问数据库中的数据。
【restrict 】约束方式启动
这种方式能够启动数据库,但只允许具有一定特权的用户访问,非特权用户访问时,会出现以下提示:
ERROR:
ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用
【force】强制启动方式,先关闭数据库,再执行正常启动数据库命令。
当不能关闭数据库时,可以用startup force来完成数据库的关闭 。
【pfile=参数文件名 】带初始化参数文件的启动方式,先读取参数文件,再按参数文件中的设置启动数据库。
例:startup pfile=E:Oracleadminoradbpfileinit.ora
【EXCLUSIVE】

关闭步骤:
$ lsnrctl stop(关闭监听器,在这之前,应该先关闭应用程序)
$ sqlplus /nolog
sql>shutdown

shutdown有四个参数,四个参数的含义如下:
【normal】需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!在执行这个命令后不允许新的连接
【immediate】在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。
【transactional】 在拥护执行完当前事物后断开连接,并不允许新的用户连接数据库。
【abort】 执行强行断开连接并直接关闭数据库。
前三种方式不回丢失用户数据,第四种在不的已的情况下,不建议采用!
经常遇到的问题:
1)权限问题,解决方法,切换到oracle用户;
2)没有关闭监听器 ,解决方法:关闭监听器
3)有Oracle实例没有关闭,解决办法:关闭oracle实例
4)环境变量设置不全,解决办法:修改环境变量。

用户如何有效地利用数据字典:
ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化,
体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。
数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。
我们不能手工修改数据字典里的信息。
很多时候,一般的ORACLE用户不知道如何有效地利用它。
dictionary 全部数据字典表的名称和解释,它有一个同义词dict
dict_column 全部数据字典表里字段名称和解释
如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句:
SQL>select * from dictionary where instr(comments,'index')>0;
如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:
SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';
依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。
下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。
1、用户
查看当前用户的缺省表空间
SQL>select username,default_tablespace from user_users;
查看当前用户的角色
SQL>select * from user_role_privs;
查看当前用户的系统权限和表级权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
2、表
查看用户下所有的表
SQL>select * from user_tables;
查看名称包含log字符的表
SQL>select object_name,object_id from user_objects where instr(object_name,'LOG')>0;
查看某表的创建时间
SQL>select object_name,created from user_objects where object_name=upper('&table_name');
查看某表的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&table_name');
查看放在ORACLE的内存区里的表
SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
3、索引
查看索引个数和类别
SQL>select index_name,index_type,table_name from user_indexes order by table_name;
查看索引被索引的字段
SQL>select * from user_ind_columns where index_name=upper('&index_name');
查看索引的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&index_name');
4、序列号
查看序列号,last_number是当前值
SQL>select * from user_sequences;
5、视图
查看视图的名称
SQL>select view_name from user_views;
查看创建视图的select语句
SQL>set view_name,text_length from user_views;
SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小
SQL>select text from user_views where view_name=upper('&view_name');
6、同义词
查看同义词的名称
SQL>select * from user_synonyms;
7、约束条件
查看某表的约束条件
SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('&table_name');
SQL>select c.constraint_name,c.constraint_type,cc.column_name
   from user_constraints c,user_cons_columns cc
   where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
   and c.owner = cc.owner and c.constraint_name = cc.constraint_name
   order by cc.position;
8、存储函数和过程
查看函数和过程的状态
SQL>select object_name,status from user_objects where object_type='FUNCTION';
SQL>select object_name,status from user_objects where object_type='PROCEDURE';
查看函数和过程的源代码
SQL>select text from all_source where owner=user and name=upper('&plsql_name');

查看数据库的SQL:
1、查看表空间的名称及大小
SQL>select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
   from dba_tablespaces t, dba_data_files d
   where t.tablespace_name = d.tablespace_name
   group by t.tablespace_name;
2、查看表空间物理文件的名称及大小
SQL>select tablespace_name, file_id, file_name,
   round(bytes/(1024*1024),0) total_space
   from dba_data_files
   order by tablespace_name;
3、查看回滚段名称及大小
SQL>select segment_name, tablespace_name, r.status,
   (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
   max_extents, v.curext CurExtent
   From dba_rollback_segs r, v$ro

No Comments