linux下oracle数据库的安装

在linux系统中安装oracle

用root用户登录到操作系统
检查硬件配置
检查软件配置
检查网络设置
创建操作系统组和用户
配置内核参数
识别所要求的软件目录
标识或创建一个oracle基础目录
给数据库和恢复文件选择一个存储选项
给数据库或恢复文件创建一个目录
给一个自动存储管理安装准备磁盘组
配置裸分区或逻辑卷
停止现有的数据库进程
配置数据库用户环境变量

用root用户登录到操作系统
在你开始安装数据库软件之前,你必须用root用户完成以下一些任务:
1.启动一个本地终端会话
2.如果不是在本地系统安装软件,那么输入以下命令在本地的X服务器来显示远程的X应用程序

$ xhost fully_qualified_remote_host_name

例如:
$ xhost somehost.us.acme.com

3.如果不是在本地操作系统上安装软件,那么使用ssh,rlogin或telnet命令来连接系统
$ telnet fully_qualified_remote_host_name

4.如果你不是以root用户来登录的系统,那么在登录系统后可使用下面的命令来切换到root用户:

$ su -root
password:
#

检查硬件配置
系统必须要满足以下硬件要求
至少1GB的物理内存
下面的表格描述了在物理内存和配置的交接空间要求的相关关系.
RAM(物理内存) Swap Space(交换空间)
小于等于512MB 交接空间是ram的2倍
在1024MB和2048MB之间 交接空间是ram的1.5倍
在2049MB和8192MB之间 交接空间与ram的的大小相等
大于8192MB 交接空间是ram的0.75倍

/tmp目录要有400MB的磁盘空间

根据你的数据库安装类型,要给oracle软件给1.5GB到3.5GB的磁盘空间.

要给预定义的数据库使用的文件系统存储给1.2GB的磁盘空间

如果你选择配置了自动备份那么在文件系统或自动存储管理磁盘组中还要给快速恢复区保留额外的磁盘空间.

为了确保系统满足所必须的硬件要求:
1.判断物理内存的大小可以输入以下命令:
# grep MemTotal /proc/meminfo

[root@weblogic28 /]# grep MemTotal /proc/meminfo
MemTotal:     32949872 kB

如果物理内存的大小小于所要求的大小,那么在执行后面的操作之前你必须增加物理内存的大小

2.为了判断配置的交换空间的大小,输入以下命令:
# grep SwapTotal /proc/meminfo

[root@weblogic28 /]# grep SwapTotal /proc/meminfo
SwapTotal:    32764556 kB

如果需要,可以参考操作系统文档关于怎么配置交换空间

3.为了判断可用的物理内存和交换空间大小,可以输入以下命令:
#free

[root@weblogic28 /]# free
             total       used       free     shared    buffers     cached
Mem:      32949872   10721532   22228340          0     232296    1326880
-/+ buffers/cache:    9162356   23787516
Swap:     32764556          0   32764556

4.为了判断加载/tmp目录的可用的磁盘空间,输入以下命令:
# df -k /tmp (df -m /tmp)

[root@weblogic28 /]# df -k /tmp
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3            251322808  11730392 226619932   5% /
[root@weblogic28 /]# df -m /tmp
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/sda3               245433     11456    221309   5% /

如果/tmp目录的可用磁盘空间小于400MB,那么可以执行以下操作
从tmp目录下删除不必要的文件直到达到400MB的空间要求
当设置oracle用户环境时设置tmep和tmpdir环境变量.

扩展/tmp目录下的文件系统.如果需要,联系你的系统管理员

5.判断系统中已经加载的可用磁盘空间,输入以下命令:
# df -k(以k字节来显示大小) (df -m)(以兆字节显示)

[root@weblogic28 /]# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3            251322808  11730216 226620108   5% /
/dev/sda1               194442     11888    172515   7% /boot
tmpfs                 16474936         0  16474936   0% /dev/shm
[root@weblogic28 /]# df -m
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/sda3               245433     11456    221309   5% /
/dev/sda1                  190        12       169   7% /boot
tmpfs                    16089         0     16089   0% /dev/shm

下面的表格显示了安装各种类型数据库所要求的磁盘空间大小
安装类型 要求的磁盘空间大小(GB)
企业版 1.9
标准版 1.9
自定义 2.0

6.为了判断系统的体系结构能否运行数据库软件,可以输入以下命令:
#grep “model name” /proc/cpuinfo

[root@weblogic28 /]# grep "model name" /proc/cpuinfo
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz

注意:这个命令将显示处理器的类型,验证处理器的类型与你所要安装的数据库软件是否匹配.
如果你没有看到你所期望的输出,那么不能在这个操作系统上安装数据库软件.

检查软件配置
根据你所要安装的数据库软件,验证在系统中安装的软件.下面的表格描述了怎样验证这些要求
是否已经得到解决了.

注:数据库统一安装程序将会执行检查来验证你的系统是否满足所列出的各项要求.为了确保这
些检查通过,在你开始执行数据库统一安装程序之前就要验证这些要求.

项目 要求
操作系统 必须满足以下一种操作系统版本

                                    Red Hat Enterprise Linux AS/ES 3.0 (Update 4 or later)
                                    Red Hat Enterprise Linux AS/ES 4.0 (Update 1 or later)
                                    SUSE Linux Enterprise Server 9.0 with SP2 or later

内核版本 操作系统必须运行的是以下内核版本中的一种(或都最近的内核版本)

                                    Red Hat Enterprise Linux 3.0:
                                    2.4.21-27.EL
                                    Note: This is the default kernel version.
                                    Red Hat Enterprise Linux 4.0:
                                    2.6.9-11.EL
                                    SUSE Linux Enterprise Server 9.0:
                                    2.6.5-7.201

包 这下面列出的包(或最新版本的包)必须要安装

                                    Red Hat Enterprise Linux 3.0:
                                    make-3.79.1-17
                                    compat-db 4.0.14-5.1
                                    control-center-2.2.0.1-13
                                    gcc-3.2.3-47
                                    gcc-c++-3.2.3-47
                                    gdb-6.1post-1.20040607.52
                                    glibc-2.3.2-95.30
                                    glibc-common-2.3.2-95.30
                                    glibc-devel-2.3.2-95.30
                                    glibc-devel-2.3.2-95.20 (32 bit)
                                    compat-db-4.0.14-5
                                    compat-gcc-7.3-2.96.128
                                    compat-gcc-c++-7.3-2.96.128
                                    compat-libstdc++-7.3-2.96.128
                                    compat-libstdc++-devel-7.3-2.96.128
                                    gnome-libs-1.4.1.2.90-34.2 (32 bit)
                                    libstdc++-3.2.3-47
                                    libstdc++-devel-3.2.3-47
                                    openmotif-2.2.3-3.RHEL3
                                    sysstat-5.0.5-5.rhel3
                                    setarch-1.3-1
                                    libaio-0.3.96-3
                                    libaio-devel-0.3.96-3

                                    Red Hat Enterprise Linux 4.0:
                                    binutils-2.15.92.0.2-10.EL4
                                    compat-db-4.1.25-9
                                    control-center-2.8.0-12
                                    gcc-3.4.3-9.EL4
                                    gcc-c++-3.4.3-9.EL4
                                    glibc-2.3.4-2
                                    glibc-common-2.3.4-2
                                    gnome-libs-1.4.1.2.90-44.1
                                    libstdc++-3.4.3-9.EL4
                                    libstdc++-devel-3.4.3-9.EL4
                                    make-3.80-5
                                    pdksh-5.2.14-30
                                    sysstat-5.0.5-1
                                    xscreensaver-4.18-5.rhel4.2

                                    SUSE Linux Enterprise Server 9:
                                    binutils-2.15.90.0.1.1-32.5
                                    gcc-3.3.3-43.24
                                    gcc-c++-3.3.3-43.24
                                    glibc-2.3.3-98.28
                                    gnome-libs-1.4.1.7-671.1
                                    libstdc++-3.3.3-43.24
                                    libstdc++-devel-3.3.3-43.24
                                    make-3.80-184.1
                                    pdksh-5.2.14-780.1
                                    sysstat-5.0.1-35.1
                                    xscreensaver-4.16-2.6

PL/SQL native                       Intel C++ Compiler 8.1 or later and the version of GNU C and
compilation, Pro*C/C++,             C++ compilers listed previously for the distribution are supported
Oracle Call Interface,              for use with these products.
Oracle C++ Call Interface,
Oracle XML Developer's              Note: Intel C++ Compiler v8.1 or later is supported. However, it is
Kit (XDK)                           not required for installation. On Red Hat Enterprise Linux 3,
                                    OCCI is supported with version 3.2 of the GNU C++ compiler.
                                    This is the default compiler version. OCCI is also supported with
                                    Intel Compiler v8.1 with gcc 3.2.3 standard template libraries.
                                    Oracle XML Developer's Kit is not supported with GCC on Red
                                    Hat Linux 4.0. It is supported only with Intel C++ Compiler (ICC).
                                    On Red Hat Enterprise Linux 4.0, Oracle C++ Call Interface
                                    (OCCI) does not support GCC 3.4.3. To use OCCI on Red Hat
                                    Enterprise Linux 4.0, you need to install GCC 3.2.3.

Oracle JDBC/OCI Drivers             You can use the following optional JDK version with the Oracle
                                    JDBC/OCI drivers; however, it is not required for the installation:
                                    Sun JDK 1.5.0 (64-bit)
                                    Sun JDK 1.5.0 (32-bit)
                                    Sun JDK 1.4.2_09 (32-bit)

为了确保系统满足这些要求
1.判断linux系统所发布的版本请输入以下命令:
#cat /proc/version

[root@weblogic28 /]# cat /proc/version
Linux version 2.6.18-164.el5 (mockbuild@x86-003.build.bos.redhat.com) (gcc versi
on 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Aug 18 15:51:48 EDT 2009

2.判断所安装的内核版本输入以下命令:
# uname -r

[root@weblogic28 /]# uname -r
2.6.18-164.el5

3.判断所要求包是否已经安装输入以下命令:

# rpm -q package_name

检查网络设置

配置命名解析
当你运行数据库统一安装程序时如果命名解析没有设置将会报错,为了避免这个错误,
在你安装之前,你必须通过/etc/hosts文件来解决主机命名

为了确保通过/etc/hosts文件来解决主机命名
1.验证/etc/hosts文件是否已经被用来命名解析.你可以通过输入nsswitch.conf文件来检查主机文件
# cat /etc/nsswitch.conf |grep hosts

[root@weblogic28 /]# cat /etc/nsswitch.conf |grep hosts
#hosts:     db files nisplus nis dns
hosts:      files dns

该命令输出应该包含一个文件条目

2.验证主机名是否已经设置可以使用hostname命令:
# hostname

[root@weblogic28 /]# hostname
weblogic28
这个输出类似于
myhost.mycomputer.com

3.验证域名是否已经被动态设置使用domainname命令:
# domainname

[root@weblogic28 /]# domainname
(none)

这个命令应该不会返回任何结果

4.验证主机文件是否包含完整的主机名使用以下命令:
# cat /etc/hosts | grep `eval hostname`

[root@weblogic28 /]# cat /etc/hosts | grep `eval hostname`
127.0.0.1               weblogic28    localhost

如果主机文件名不包含完整的主机名,那么打开文件修改它.

创建所需的操作系统的组和用户
根据是否第一次在该系统上安装数据库软件,你可能需要创建一些操作系统组和用户

如果你打算安装数据库软件那么这下面的操作系统组和用户是必须要创建的
OSDBA组(dba)
在系统中第一次安装数据库时你必须创建该组.它将识别操作系统用户账号有数据库管理权限
(sysdba权限).该组缺省的名字为dba
如果你想指定一个不是缺省的dba组名那么你必须选择自定义安装类型来安装软件或者
启动数据库统一安装程序作为了一个用户而不是这个组的一个成员.在这种情况下,
数据库统一安装程序提示你指定这个组名.

OSOPER组(oper)
这是一个可选组,如果你想有一个单独的操作系统用户组拥有一些受限的数据库管理权限
(sysoper权限).通常,OSDBA组的成员也有sysoper权限.
如果你想指定一个单独的osoper组,而不是缺省的dba组.那么你必须选择自定义安装类型
来安装软件或者启动数据库统一安装程序作为一个不是dba组的成员.在这种情况下,
数据库统一安装程序将提示你指定这个组名,这个组名通常是oper.

下面的操作系统组和用户是必须要创建
oracle目录组(oinstall)
在系统上第一次安装数据库软件时你必须创建这个用户组.通常这个组的名字为oinstall.
这个组拥有oracle详细目录,它是所有要安装的oracle软件的所在目录

oracle软件所有者用户(典型代表,oracle)
在第一次安装时你必须创建这个用户,在安装期间这个用户拥有所有要安装的软件.
这个用户必须首先是oracle目录组的成员,同时也还要是OSDBA和OSOPER组的成员

创建oracle软件清单目录组
判断系统中是否已经存在oracle软件清单目录组输入以下命令:
# more /etc/oraInst.loc

[root@weblogic28 ~]# more /etc/oraInst.loc
/etc/oraInst.loc: No such file or directory
如果这个命令的输出显示了oinstall的组名,那么这个oracle目录组已经存在了.
如果oraInst.loc文件存在,那么这个命令的输出和下面的相似
inventory_loc=/u01/app/oracle/oraInventory
inst_group=oinstall
inst_group参数显示了oracle目录组(oinstall)

如果oraInst.loc文件不存在那么通过下面的命令新建一个oracle目录组:

# /usr/sbin/groupadd oinstall

创建OSDBA组
当不存在osdba组或者你想对新安装的软件创建一个新的osdba组时你必须创建osdba组.
判断oadba组是否存在输入以下命令:
# grep dba /etc/group

[root@weblogic28 ~]# grep dba /etc/group

如果osdba组不存在,那么你可以使用下面的命令创建osdba组,这个组名为dba,如果这个名字
已经使用了就可以使用别的组名
# /usr/sbin/groupadd dba

[root@weblogic28 ~]# /usr/sbin/groupadd dba

创建OSOPER组(可选)
如果你想要标识一组操作系统用户有一些受限的数据库管理权限(sysoper操作权限)你就得创建osoper组.
对于大多数安装来说仅仅需要创建OSDBA组.如果你想创建osoper组,你可以执行以下命令
# /usr/sbin/groupadd oper

[root@weblogic28 ~]# /usr/sbin/groupadd oper

如果创建osoper组时你可以使用oper组名,如果这个oper组名已被使用可以输入其它名字

创建oracle软件所有者用户
如果oracle软件所有者用户不存在或者这个oracle软件所有者用户存在了,但是想创建另外的oracle
软件所有者用户

判断一个oracle软件所有者用户(oracle)是否存在输入以下命令:
# id oracle

[root@weblogic28 ~]# id oracle
id: oracle: No such user

如果这个oracle用户已经存在了那么输出和下面的类似:

uid=440(oracle) gid=200(oinstall) groups=201(dba),202(oper)

如果这个用户存在,然后你是想使用已经存在的这个用户还是想新建一个oracle用户.
如果你想使用已经存在的这个oracle用户那么要确保这个oracle用户的主组是oracle目录组,
并且同时还是osdba和osoper组的成员

为了创建一个新的oracle用户输入和以下相似的命令:
# /usr/sbin/useradd -g oinstall -G dba[,oper] oracle

[root@weblogic28 ~]# /usr/sbin/useradd -g oinstall -G dba,oper oracle

这个命令中的-g选项指定这个用户oracle主组,这个主组必须是oracle目录组例如oinstall
-G选项指定次组.它必须包含osdba组,osoper组是可选的.例如:dba 或者 dba,oper

给oralce用户设置密码
# passwd oracle

[root@weblogic28 ~]# passwd oracle
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

修改oracle软件所有者用户
如果oracle用户已经存在,但是oracle用户的主组不是oinstall组,或者oracle用户不是
osdba或osoper组的成员,那么输入和下面相似的命令进行修改.-g选项指定主组,
-G选项指定次组.

# /usr/sbin/usermod -g oinstall -G dba[,oper] oracle

验证nobody用户是否存在
在安装软件之前必须验证nobody用户是否已经存在

判断nobody用户是否存在输入以下命令:
# id nobody

[root@weblogic28 ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)

如果这个命令输出和上面一样显示了关于nobody用户的信息那么你不必创建这个用户

如果nobody用户不存在那么输入以下命令来创建:

# /usr/sbin/useradd nobody

配置内核参数
验证下面表格中所列出的内核参数值应该要大于或等于所建议的值.

Parameter                     Value                File
semmsl                        250                  /proc/sys/kernel/sem
semmns                        32000
semopm                        100
semmni                        128

shmall                        2097152              /proc/sys/kernel/shmall

shmmax                        Half the size of     /proc/sys/kernel/shmmax
                              physical
                              memory (in
                              bytes)

shmmni                        4096                 /proc/sys/kernel/shmmni
file-max                      65536                /proc/sys/fs/file-max

ip_local_port_range           Minimum:1024         /proc/sys/net/ipv4/ip_local_port_range
                              Maximum:
                              65000

rmem_default                  262144               /proc/sys/net/core/rmem_default
rmem_max                      262144               /proc/sys/net/core/rmem_max
wmem_default                  262144               /proc/sys/net/core/wmem_default
wmem_max                      262144               /proc/sys/net/core/wmem_max

如果这上面所示的参数的参数值比所列出的值大时不必做任何修改
可以输入以下命令来查看这些参数的参数值

Parameter                                Command
semmsl, semmns,                          # /sbin/sysctl -a | grep sem
semopm, and semmni                       这个命令将会显示这些信号参数的值
[root@weblogic28 ~]# /sbin/sysctl -a | grep sem
kernel.sem = 250        32000   32      128


shmall, shmmax, and                      # /sbin/sysctl -a | grep shm
shmmni                                   这个命令将会显示共享内存段大小的值
[root@weblogic28 ~]# /sbin/sysctl -a | grep shm
vm.hugetlb_shm_group = 0
kernel.shmmni = 4096
kernel.shmall = 4294967296
kernel.shmmax = 68719476736

file-max                                 # /sbin/sysctl -a | grep file-max
                                         这个命令将会显示能处理的最大文件数
[root@weblogic28 ~]# /sbin/sysctl -a | grep file-max
fs.file-max = 3224915


ip_local_port_range                      # /sbin/sysctl -a | grep ip_local_port_range
                                         这个命令将显示端口号的范围
[root@weblogic28 ~]# /sbin/sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 32768    61000

rmem_default                             # /sbin/sysctl -a | grep rmem_default
[root@weblogic28 ~]# /sbin/sysctl -a | grep rmem_default
net.core.rmem_default = 129024

rmem_max                                 # /sbin/sysctl -a | grep rmem_max
[root@weblogic28 ~]# /sbin/sysctl -a | grep rmem_max
net.core.rmem_max = 131071

wmem_default                             # /sbin/sysctl -a | grep wmem_default
[root@weblogic28 ~]# /sbin/sysctl -a | grep wmem_default
net.core.wmem_default = 129024

wmem_max                                 # /sbin/sysctl -a | grep wmem_max
[root@weblogic28 ~]# /sbin/sysctl -a | grep wmem_max
net.core.wmem_max = 131071

如果任何内核参数与建议值不同可以使用任何文本编辑器来创建或编辑/etc/sysctl.conf文件
来增加或修改这些内核参数
修改这些内核参数时要注意如果这些内核参数的当前值比建议值大的话那么就指定为两者中的大者

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144

当在/etc/sysctl.conf文件中指定这些内核参数后你要重启系统

给oracle用户设置shell限制
为了提高数据库软件在linux系统中的性能你必须给oracle用户增加以下shell限制:

shell limit                        item in limits.confg          hard limit
能打开文件的最大数量               nofile                        65536
单个用户可用的最大进程数           nproc                         16384

1.在/etc/security/limits.conf文件中增加以下限制:

oracle soft nproc  2047
oracle hard nproc  16384
oracle soft nofile 1024
oracle hard nofile 65536

2.在/ect/pam.d/login文件如果下面显示的参数没有就增加到该文件中

session required pam_limits.so

3.根据oracle用户的默认shell,对默认的shell启动文件进行以下更改:
对于Bourne, Bash, or Korn shell在/etc/profile文件中增加下面的代码

if [ $USER = "oracle" ]; then
      if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
      else
        ulimit -u 16384 -n 65536
      fi
fi

对C shell(csh or tcsh)在/etc/csh.login文件中增加以下代码

if ( $USER == "oracle" ) then
    limit maxproc 16384
    limit descriptors 65536
endif

识别所需的软件目录
必须要识别或创建以下oracle软件目录
oracle根目录
oracle软件清单目录
oracle Home目录

Oracle根目录是一个为安装数据库软件的顶级目录
/mount_point/app/oracle_sw_owner

/u01/app/oracle
/u01/app/orauser
/opt/oracle/app/oracle

oracle软件清单目录
oracle_base/oraInventory

oracle Home目录
是所有软件安装后存放的所在位置
oracle_base/product/10.2.0/db_1

为了查看是否已经存在oracle软件清单目录输入以下命令:
# more /etc/oraInst.loc
如果已经存在就是显示和以下相似的信息
inventory_loc=/u01/app/oracle/oraInventory
inst_group=oinstall
inventory_loc参数值就是oracle的软件清单目录,它的父目录就是oracle的根目录
在上面的输出中/u01/app/oracle就是oracle的根目录

为了查看是否已经存在oracle Home目录输入以下命令:
# more /etc/oratab
如果已经存在就显示和以下相似的信息
*:/u03/app/oracle/product/10.2.0/db_1:N
*:/opt/orauser/infra_904:N
*:/oracle/9.2.0:N

创建oracle根目录可以输入以下相似的命令:

# mkdir -p /mount_point/app/oracle_sw_owner
# chown -R oracle:oinstall /mount_point/app/oracle_sw_owner
# chmod -R 775 /mount_point/app/oracle_sw_owner

如果oracle根目录的加载点是/u01并且oracle软件使用者用户为oracle那么oracle根目录的路径为:
/u01/app/oracle

[root@weblogic28 ~]# mkdir -p /u01/app/oracle
[root@weblogic28 ~]# chown -R oracle:oinstall /u01/app/oracle
[root@weblogic28 ~]# chmod -R 775  /u01/app/oracle

当你配置oracle用户环境变量时设置ORACLE_BASE时就将oracle根目录的路径赋给ORACLE_BASE

创建存储数据库文件和数据库恢复文件的目录
创建存储数据库文件的目录的命令如下:

# mkdir /mount_point/oradata
# chown oracle:oinstall /mount_point/oradata
# chmod 775 /mount_point/oradata

将存放数据库文件的目录创建在oracle根目录下/u01/app/oracle/oradata

[root@weblogic28 ~]# mkdir  /u01/app/oracle/oradata
[root@weblogic28 ~]# chown oracle:oinstall /u01/app/oracle/oradata
[root@weblogic28 ~]# chmod 775 /u01/app/oracle/oradata

创建oracle Home目录/u01/app/oracle/10.2.0/db

[root@weblogic28 ~]# mkdir  /u01/app/oracle/10.2.0/db
[root@weblogic28 ~]# chown oracle:oinstall /u01/app/oracle/10.2.0/db
[root@weblogic28 ~]# chmod 775 /u01/app/oracle/10.2.0/db

创建存储数据库恢复文件的目录的命令如下:

# mkdir /mount_point/flash_recovery_area
# chown oracle:oinstall /mount_point/flash_recovery_area
# chmod 775 /mount_point/flash_recovery_area

将存放数据库恢复文件的目录创建在oracle根目录下/u01/app/oracle

[root@weblogic28 ~]# mkdir /u01/app/oracle/flash_recovery_area
[root@weblogic28 ~]# chown oracle:oinstall /u01/app/oracle/flash_recovery_area
[root@weblogic28 ~]# chmod 775 /u01/app/oracle/flash_recovery_area

创建一个/tmp目录

[root@weblogic28 ~]# mkdir /u01/tmp
[root@weblogic28 ~]# chmod a+wr /u01/tmp

切换到oracle用户来设置环境变量

[oracle@weblogic28 ~]$
 ls -a
查看.bash_profile文件
vi .bash_profile

TEMP=/u01/tmp
TMPDIR=/u01/tmp
export TEMP TMPDIR
export LD_ASSUME_KERNEL=2.6.9
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/10.2.0/db
export ORACLE_SID=jycs
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
export PATH=$PATH:$ORACLE_HOME/bin
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH




[oracle@weblogic28 tmp]$# umask
0022

umask命令将会显示22,022或0022

[oracle@weblogic28 tmp]$# env | more
HOSTNAME=weblogic28
SHELL=/bin/bash
TERM=ansi
HISTSIZE=1000
TMPDIR=/u01/tmp
KDE_NO_IPV6=1
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
USER=root
TEMP=/u01/tmp
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;0
1:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.b
tm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:
*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*
.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;3
5:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
ORACLE_SID=jycs
ORACLE_BASE=/u01/app/oracle
KDEDIR=/usr
MAIL=/var/spool/mail/root
PATH=/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:
/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
INPUTRC=/etc/inputrc

上面显示了你所设置的环境变量

也可以用下面的命令来查看环境变量

[oracle@weblogic28 tmp]$ echo $ORACLE_HOME[$ORACLE_SID,$ORACLE_BASE]

将数据库软件包拷贝到linux系统中
然后解压文件
$ gunzip filename.cpio.gz

[oracle@weblogic28 tmp]$ gunzip 10201_database_linux_x86_64.cpio.gz

执行上面的命令后会出现在 10201_database_linux_x86_64.cpio文件包
再执行如下命令解压文件
$ cpio -idmv < filename.cpio

[oracle@weblogic28 tmp]$ cpio -idmv <10201_database_linux_x86_64.cpio
database/stage/prereq/db/refhost_Custom.xml
database/stage/prereq/db/refhost.xml
database/stage/prereq/db/db_prereq.xml
database/stage/prereq/db/dbprereq.jar
database/stage/prereq/db
database/stage/prereq/oui/knowledgesrc.xml
database/stage/prereq/oui/rulemap.xml
database/stage/prereq/oui/OraPrereqChecks.jar
database/stage/prereq/oui
database/stage/prereq/common/rulemap.xml
database/stage/prereq/common
……

会出现以上信息

如果是远程安装可以使用VNC远程连接到linux服务器上来执行安装
1、配置并开启vnc服务
[oracle@localhost ~]$ vncserver
You will require a password to access your desktops.
Password:              ---这里要求输入vnc客户端登录的密码并重复
Verify:
New 'localhost.localdomain:2 (oracle)' desktop is localhost.localdomain:2
Creating default startup script. /home/oracle/.vnc/xstartup
Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/localhost.localdomain:2.log

—-如上告诉你vnc终端已经创建好,用的是第二个终端
2、在创建vnc服务的用户目录下会生成一个.vnc的隐藏目录

[oracle@localhost ~]$ ls -a
.              .bash_profile  Disk1     .gconfd          .gstreamer-0.10    .metacity                        README.htm  .viminfo
..             .bashrc        .eggcups  .gnome           .gtkrc-1.2-gnome2  .mozilla                         .redhat     .vnc
.bash_history  .chewing       .emacs    .gnome2          .ICEauthority      .nautilus                        .scim       .Xauthority
.bash_logout   Desktop        .gconf    .gnome2_private  .kde               p8202632_10205_Linux-x86-64.zip  .Trash      .zshrc

3、进入.vnc目录,找到xstartup可执行文件,用vi 编辑器打开

[oracle@localhost ~]$ cd .vnc/
[oracle@localhost .vnc]$ ls
localhost.localdomain:2.log  localhost.localdomain:2.pid  passwd  xstartup
[oracle@localhost .vnc]$ vi xstartup
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
 exec /etc/X11/xinit/xinitrc                                          ---去掉前面的#号即可  --保存退出
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &
~
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
"xstartup" 12L, 333C 已写入
[oracle@localhost .vnc]$ vncserver
New 'localhost.localdomain:3 (oracle)' desktop is localhost.localdomain:3
Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/localhost.localdomain:3.log

4、清除刚才创建的vnc虚拟终端

[oracle@localhost .vnc]$ vncserver  -kill :1
Can't find file /home/oracle/.vnc/localhost.localdomain:1.pid
You'll have to kill the Xvnc process manually
[oracle@localhost .vnc]$ vncserver  -kill :2
Killing Xvnc process ID 11889
[oracle@localhost .vnc]$ vncserver  -kill :3
Killing Xvnc process ID 11945
[oracle@localhost .vnc]$ vncserver  -kill :4
Can't find file /home/oracle/.vnc/localhost.localdomain:4.pid
You'll have to kill the Xvnc process manually

5、重新建立新的vnc虚拟终端

[oracle@localhost .vnc]$ vncserver
New 'localhost.localdomain:2 (oracle)' desktop is localhost.localdomain:2
Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/localhost.localdomain:2.log              --该终端号为 :2

6、在windows客户端用RealVNC软件中的Run VNC Viewer客户端连接。
7、在Run VNC Viewer 只需输入linux服务器的地址和刚才生成的终端号:2
格式:192.168.1.56:2
8、输入刚才配置vnc服务的时候配的即可登录linux服务器图形界面
9. 运行runInstaller来进行安装

如果是本地安装的话执行下面的步骤
用root用户登录

[root@weblogic28 ~]#xhost +

让任何用户都是启用图形界面
切换到oracle用户

[root@weblogic28 ~]su - oracle
[oracle@localhost ~]$ cd /database
[oracle@weblogic28 database]$./runInstaller

Oracle ORA-01102故障: cannot mount database in EXCLUSIVE mode

SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
oracle instance started.

Total System Global Area 276824064 bytes
Fixed Size 778736 bytes
Variable Size 137371152 bytes
Database Buffers 138412032 bytes
Redo Buffers 262144 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode

出现这个问题,可能是由于断电的问题,解决方法是

出现1102错误可能有以下几种可能:

一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;

二、说明 oracle 被异常关闭时,有资源没有被释放,一般有以下几种可能,

1、 oracle 的共享内存段或信号量没有被释放;

2、 oracle 的后台进程(如SMON、PMON、DBWn等)没有被关闭;

3、 用于锁内存的文件lk和sgadef.dbf文件没有被删除。

首先,虽然我们的系统是HA系统,但是备节点的实例始终处在关闭状态,这点通过在备节点上查数据库状态可以证实。

其次、是因系统掉电引起数据库宕机的,系统在接电后被重启,因此我们排除了第二种可能种的1、2点。最可疑的就是第3点了。

查$ORACLE_HOME/dbs目录:

$ cd $ORACLE_HOME/dbs
$ ls sgadef*
sgadef* not found
$ ls lk*
lkORA92

果然,lk文件没有被删除。将它删除掉

$ rm lk*

再启动数据库,成功。

如果怀疑是共享内存没有被释放,可以用以下命令查看:

$ipcs -mop
IPC status from /dev/kmem as of Thu Jul 6 14:41:43 2006
T ID KEY MODE OWNER GROUP NATTCH CPID LPID
Shared Memory:
m 0 0×411c29d6 –rw-rw-rw- root root 0 899 899
m 1 0×4e0c0002 –rw-rw-rw- root root 2 899 901
m 2 0×4120007a –rw-rw-rw- root root 2 899 901
m 458755 0×0c6629c9 –rw-r—– root sys 2 9113 17065
m 4 0×06347849 –rw-rw-rw- root root 1 1661 9150
m 65541 0xffffffff –rw-r–r– root root 0 1659 1659
m 524294 0×5e100011 –rw——- root root 1 1811 1811
m 851975 0×5fe48aa4 –rw-r—– oracle oinstall 66 2017 25076

然后它ID号清除共享内存段:

$ipcrm –m 851975

对于信号量,可以用以下命令查看:

$ ipcs -sop
IPC status from /dev/kmem as of Thu Jul 6 14:44:16 2006
T ID KEY MODE OWNER GROUP
Semaphores:
s 0 0×4f1c0139 –ra——- root root
… …
s 14 0×6c200ad8 –ra-ra-ra- root root
s 15 0×6d200ad8 –ra-ra-ra- root root
s 16 0×6f200ad8 –ra-ra-ra- root root
s 17 0xffffffff –ra-r–r– root root
s 18 0×410c05c7 –ra-ra-ra- root root
s 19 0×00446f6e –ra-r–r– root root
s 20 0×00446f6d –ra-r–r– root root
s 21 0×00000001 –ra-ra-ra- root root
s 45078 0×67e72b58 –ra-r—– oracle oinstall

根据信号量ID,用以下命令清除信号量:

$ipcrm -s 45078

如果是 oracle 进程没有关闭,用以下命令查出存在的 oracle 进程:

$ ps -ef|grep ora
oracle 29976 1 0 Jun 22 ? 0:52 ora_dbw0_ora92
oracle 29978 1 0 Jun 22 ? 0:51 ora_dbw1_ora92
oracle 5128 1 0 Jul 5 ? 0:00 oracleora92 (LOCAL=NO)
… …

然后用kill -9命令杀掉进程

$kill -9 

总结:

当发生1102错误时,可以按照以下流程检查、排错:

1.如果是HA系统,检查其他节点是否已经启动实例;
2.检查 oracle 进程是否存在,如果存在则杀掉进程;
3.检查信号量是否存在,如果存在,则清除信号量;
4.检查共享内存段是否存在,如果存在,则清除共享内存段;
5.检查锁内存文件lk和sgadef.dbf是否存在,如果存在,则删除

当丢失控制文件但重做日志文件还在时如何恢复数据库

在使用resetlogs选重建控制文件后在打开数据库时会报错,错误信息如下:

ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced

而一般情况下如果数据文件和日志文件都在使用noresetlogs创建控制文件
后recover数据库是打开数据库.就是不明白为什么会报ora-01092这个错误
所以我就删除原来的重做日志文件

SQL> CREATE CONTROLFILE   set Database ocp  noresetlogs
  2    MAXLOGFILES 16
  3    MAXLOGMEMBERS 3
  4    MAXDATAFILES 100
  5    MAXINSTANCES 8
  6    MAXLOGHISTORY 292
  7  LOGFILE
  8  GROUP 1 'D:\oracle\product\10.2.0\oradata\ocp\RED001.LOG'SIZE 50M,
  9  GROUP 2 'D:\oracle\product\10.2.0\oradata\ocp\RED002.LOG'SIZE 50M,
 10  GROUP 3 'D:\oracle\product\10.2.0\oradata\ocp\RED003.LOG'SIZE 50M
 11  DATAFILE
 12  'D:\oracle\product\10.2.0\oradata\ocp\SYSTEM01.DBF',
 13  'D:\oracle\product\10.2.0\oradata\ocp\UNDOTBS01.DBF',
 14  'D:\oracle\product\10.2.0\oradata\ocp\SYSAUX01.DBF',
 15  'D:\oracle\product\10.2.0\oradata\ocp\USERS01.DBF'
 16  CHARACTER SET ZHS16GBK
 17  ;

控制文件已创建。

SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??


SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01194: ?? 1 ?????????????
ORA-01110: ???? 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\SYSTEM01.DBF'


SQL> alter database add logfile group 1;
alter database add logfile group 1
*
第 1 行出现错误:
ORA-01184: ????? 1 ???


SQL> select group#,sequence#,members,bytes,status,archived from v$log;

    GROUP#  SEQUENCE#    MEMBERS      BYTES STATUS           ARC
---------- ---------- ---------- ---------- ---------------- ---
         1          0          1   52428800 UNUSED           YES
         3          0          1   52428800 CURRENT          YES
         2          0          1   52428800 UNUSED           YES

SQL> ALTER DATABASE ADD LOGFILE GROUP 4
  2      ('D:\oracle\product\10.2.0\oradata\ocp\redo04a.log','D:\oracle\product\
10.2
  3  .0\oradata\ocp\redo04b.log')
  4      SIZE 512 M;
ALTER DATABASE ADD LOGFILE GROUP 4
*
第 1 行出现错误:
ORA-00301: ?????? 'D:\oracle\product\10.2
.0\oradata\ocp\redo04b.log' ??? - ??????
ORA-27040: ??????, ??????
OSD-04002: ????????????
O/S-Error: (OS 123) ????????????????????????????????


SQL> ALTER DATABASE ADD LOGFILE GROUP 4
  2      ('D:\oracle\product\10.2.0\oradata\ocp\redo04a.log','D:\oracle\product\
10.2.0\oradata\ocp\redo04b.log')
  3      SIZE 50 M;

数据库已更改。

SQL>  alter database drop logfile group 1;

数据库已更改。

SQL>  alter database drop logfile group 2;

数据库已更改。

SQL> recover database until cancel;
ORA-00283: ??????????
ORA-01610: ?? BACKUP CONTROLFILE ??????????


SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01194: ?? 1 ?????????????
ORA-01110: ???? 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\SYSTEM01.DBF'


SQL> recover database;
ORA-00283: ??????????
ORA-01610: ?? BACKUP CONTROLFILE ??????????


SQL> create pfile from spfile;

文件已创建。

在创建的initSID.ora的初始化参数文件中加入以下参数:

_allow_resetlogs_corruption=true
_allow_terminal_recovery_corruption=true
undo_tablespace='SYSTEM'
undo_management='MANUAL'
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup mount pfile=D:\oracle\product\10.2.0\db_1\database\initocp.ora
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size              88083332 bytes
Database Buffers          515899392 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。


SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\SYSTEM01.DBF'

SQL> recover datafile 1;
完成介质恢复。
SQL> recover datafile 2;
完成介质恢复。
SQL> recover datafile 3;
完成介质恢复。
SQL> recover datafile 4;
完成介质恢复。
SQL> recover datafile 5;
ORA-01179: 文件 5 不存在


SQL> alter database open;

数据库已更改。

dbms_metadata.get_ddl()来获得对象的定义语句

今天打算将一个数据库的索引在另一个测试库上重新创建一遍,研究了一下。

set pagesize 0
set long 90000
set feedback off
set echo off
spool all_index.sql
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
FROM USER_INDEXES u;
spool off;
最后找个编辑器替换一下表空间名,在表空间名后面加上个;
然后让ORACLE慢慢执行吧
其实是调用DBMS_METADATA.GET_DDL这个外部过程来获得创建DLL语句,还能获得很多东西

这个是所有用户的创建DLL
SELECT DBMS_METADATA.GET_DDL('USER',U.username)
FROM DBA_USERS U;
这个是所有表的DLL
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
FROM USER_TABLES u;

所有表空间的DLL

SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)
FROM DBA_TABLESPACES TS;

组合一下,所有表,索引存储过程

SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)
  FROM USER_OBJECTS u
 where U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE');

另外一个相关的语句生成删除某个用户全部索引的语句

select 'drop index '||index_name||';' form. user_indexes;

undo表空间不能回收的解决方法

若UNDO表空间的使用不超过 10G,你可以用下列语句去將它收回到10G

alter database datafile 'D:\ORACLE\ORADATA\ABC\RBS01.DBF' RESIZE 1000M

若UNDO表空间的使用己起過10G, 你可能要创建一个新的10G undo表空间, 之后用

 alter system set undo_tablespace = 'XXX' 

来告诉数据库去用新的UNDO表空间

分区表无法导入数据库

10G版本以前分区表导入的方法:
分区表在导入时,一般来说,有两种情况

1、在导入数据库中,与被导入表的分区相关的表空间已对等建立好(表空间名也是与exp数据库中一致的),那么这种情况,与普通表的imp操作是一样的

2、但多数情况下,我们不知道exp数据库中该表的物理结构,此时,可以执行以下步骤
(1)、从dmp文件中获取分区表的物理结构,执行如下命令

                C:\Documents and Settings\qcui>imp qcui/qcui@ora9 file=d:\temp\p.dmp fromuser=bi
touser=qcui ignore=y tables=(dhfa_revenue_base) indexfile=d:\temp\dhfa.sql


经由直接路径导出由EXPORT:V09.02.00创建的导出文件

警告: 此对象由 BI 导出, 而不是当前用户

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. . 正在跳过分区 "DHFA_REVENUE_BASE":"PART_2004"

. . 正在跳过分区 "DHFA_REVENUE_BASE":"PART_2005"

. . 正在跳过分区 "DHFA_REVENUE_BASE":"PART_2006"

. . 正在跳过分区 "DHFA_REVENUE_BASE":"PART_2007"

. . 正在跳过分区 "DHFA_REVENUE_BASE":"PART_2008"

成功终止导入,但出现警告。

(2)、根据需要编辑该表的DDL脚本(在本例中就是 d:\temp\dhfa.sql)。
– 如果希望重新规划该表的物理存储结构,则可以先创建好表空间,然后直接编辑DDL脚本,并创建该表
– 如果希望分区表相关的分区表空间就按照exp库组织,那么创建好相关的表空间,直接执行该DDL脚本,即可

3、执行分区表的导入,导入时比一般的imp操作,参数上多增加一个 ignore=y 就可以了
如果是10g及以上版本,可以使用参数REMAP_TABLESPACE 来映射表空间

1.在ascii数据库中建立3个tablespaces:tbs1,tbs2,tbs3;

SQL> create tablespace tbs1 datafile 'tbs1_data1' size 10M;

Tablespace created.

SQL> create tablespace tbs2 datafile 'tbs2_data1' size 10M;

Tablespace created.

SQL> create tablespace tbs3 datafile 'tbs3_data1' size 10M;

Tablespace created.

2.建立分区数据库表tbs_t:

SQL> create table tbs_t(a int ) partition by range(a)
  2  (
  3  partition tbs1 values less than (100),
  4  partition tbs2 values less than (200),
  5  partition tbs3 values less than (maxvalue));

Table created.

3.在tbs_t中插入数据commit后数据:

SQL> select * from tbs_t;

         A
----------
         1
         2
         3
       100
       101
       102
       103
       202
       402
       502
       602

11 rows selected.

4.使用expdp导出数据表tbs_t:

E:/tmp>expdp scott/tiger directory=dump_dest tables=tbs_t parallel=2

Export: Release 10.2.0.1.0 - Production on Wednesday, 20 April, 2011 16:41:46

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Starting "SCOTT"."SYS_EXPORT_TABLE_01":  scott/******** directory=dump_dest tables=tbs_t parallel=2
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "SCOTT"."TBS_T":"TBS1"                      4.937 KB       3 rows
. . exported "SCOTT"."TBS_T":"TBS2"                      4.945 KB       4 rows
. . exported "SCOTT"."TBS_T":"TBS3"                      4.945 KB       4 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
  E:/TMP/EXPDAT.DMP
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 16:41:55

5.将产生的”E:/TMP/EXPDAT.DMP”文件导入无分区数据库ocp10g;

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
ocp10g

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
UNDOTBS2
EXAMPLE
USERTBS
USERTBS1
UNDO_SMALL

10 rows selected.

E:/tmp>impdp scott/tiger dumpfile=expdat.dmp directory=dump_dest remap_tablespace=tbs1:usertbs remap_tablespace=tbs2:usertbs remap_tablespace=tbs3:usertbs

Import: Release 10.2.0.1.0 - Production on Wednesday, 20 April, 2011 16:47:09

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Master table "SCOTT"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_IMPORT_FULL_01":  scott/******** dumpfile=expdat.dmp directory=dump_dest remap_tablespace=tbs1:usertbs remap_tablespace=tbs2:use
rtbs remap_tablespace=tbs3:usertbs
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."TBS_T":"TBS1"                      4.937 KB       3 rows
. . imported "SCOTT"."TBS_T":"TBS2"                      4.945 KB       4 rows
. . imported "SCOTT"."TBS_T":"TBS3"                      4.945 KB       4 rows
Job "SCOTT"."SYS_IMPORT_FULL_01" successfully completed at 16:47:22

6.imp数据成功:

SQL> conn scott/tiger
Connected.
SQL> select * from tbs_t;

         A
----------
         1
         2
         3
       100
       101
       102
       103
       202
       402
       502
       602

11 rows selected.

ORA-01000:超出最多允许打开的游标数

问题描述

Oracle 使用 OPEN_CURSORS 参数指定一个会话一次最多可以打开的游标的数量。超过此数量时,Oracle 将报告 ORA-01000 错误。当此错误传播到 WebLogic Server 时,就会抛出 SQLException。

java.sql.SQLException: ORA-01000: maximum open cursors exceeded

本模式阐述在使用 WebLogic Server 时出现该错误的可能成因及解决办法。

故障排除请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。

快速链接

诊断查询
常见成因及解决办法
代码惯例
Statement 缓存
数据库驱动程序

诊断查询
以下 SQL 查询有助于诊断 ORA-01000 问题。要执行这些查询,需要以管理员身份登录数据库,或获得数据库管理员从那些 v$ 视图中进行选择的授权。

1. 检查数据库中的 OPEN_CURSORS 参数值。
Oracle 使用 init.ora 中的初始化参数 OPEN_CURSORS 指定一个会话一次最多可以拥有的游标数。缺省值为 50。遗憾的是,此缺省值通常对 WebLogic Server 这样的系统来说过小。要获得数据库中 OPEN_CURSORS 参数的值,可以使用以下查询:

SQL> show parameter open_cursors;
NAME TYPE VALUE
------------------------------------ ----------- ---------------
open_cursors integer 1000

重要的是将 OPEN_CURSORS 的值设置得足够大,以避免应用程序用尽所有打开的游标。应用程序不同,该值也不同。即便会话打开的游标数未达 OPEN_CURSORS 指定的数量(即设置的值高于实际需要的值),也不会增加系统开销。

2. 获取打开的游标数。

select s.USERNAME,S.sid,s.SERIAL#,p.SPID, osuser, machine, count(*) num_curs
 from v$open_cursor o, v$session s,v$process p
 where /*user_name = '' and*/ o.sid=s.sid  and p.ADDR=s.PADDR
 group by s.USERNAME,S.sid,s.SERIAL#,p.SPID, osuser, machine
 order by num_curs desc;

下面的查询按降序显示用户“SCOTT”为每个会话打开的游标数。

SQL> select o.sid, osuser, machine, count(*) num_curs
2 from v$open_cursor o, v$session s
3 where user_name = 'SCOTT' and o.sid=s.sid
4 group by o.sid, osuser, machine
5 order by num_curs desc;
SID OSUSER MACHINE NUM_CURS
-----------------------------------------------------
217 m1 1000
96 m2 10
411 m3 10
50 test 9

在 WebLogic Server 中使用连接池时,此查询中的 user_name 应为用于创建连接池的 user_name(假定是从连接池得到连接)。该查询结果还给出了计算机名称。请在查询结果中找出打开游标数量大的 SID 和运行 WebLogic Server 的计算机的名称。
请注意,v$open_cursor 可以跟踪会话中 PARSED 和 NOT CLOSED 的动态游标(使用 dbms_sql.open_cursor() 打开的游标)。它不会跟踪未经分析(但已打开)的动态游标。在应用程序中使用动态游标并不常见。本模式的前提是未使用动态游标。

3. 获取为游标执行的 SQL。使用在以上查询结果中找到的 SID 运行下面的查询:

SQL> select q.sql_text
2 from v$open_cursor o, v$sql q
3 where q.hash_value=o.hash_value and o.sid = 217;
SQL_TEXT
------------------------------------------------------------------------------------------------------------------------
select * from empdemo where empid='212'
select * from empdemo where empid='321'
select * from empdemo where empid='947'
select * from empdemo where empid='527'
...

结果将显示正在连接上执行的查询。它提供了一个入手点,让您可以反向跟踪到打开游标的来源。返回页首

常见成因及解决办法
下面是查找问题成因及可能的解决办法的步骤。

代码惯例
此问题的最常见成因是未正常关闭 JDBC 对象。使用诊断查询中第三个查询的结果在应用程序代码中反向跟踪,确保将所有 JDBC 对象都正常关闭。BEA 建议在 finally 块中显式关闭 Connection、Statement 和 ResultSet 等 JDBC 对象,以确保无论是在正常还是异常情况下都将所有 JDBC 对象关闭。下面是一个常规示例:

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection(); //Method getConnection will return a JDBC Connection
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from empdemo");
// do work
} catch (Exception e) {
// handle any exceptions
} finally {
try {
if(rs != null)
rs.close();
} catch (SQLException rse) {}
try {
if(stmt != null)
stmt.close();
} catch (SQLException sse) {}
try {
if(conn != null)
conn.close();
} catch (SQLException cse) {}
}

请避免采用任何放弃 JDBC 对象的代码惯例。下面的代码惯例在每个循环迭代中都获得一个新的 Connection、Statement 和 ResultSet,但它没有关闭每个迭代的 JDBC 对象。因此,它会导致 JDBC 对象泄漏。

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String[] queries = new String[10];
//Define queries
try {
for(int i = 0; i < 10; i++) {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(queries[i]);
// do work
}
} catch (Exception e) {
// handle any exceptions
} finally {
try {
if(rs != null)
rs.close();
} catch (SQLException rse) {}
try {
if(stmt != null)
stmt.close();
} catch (SQLException sse) {}
try {
if(conn != null)
conn.close();
} catch (SQLException cse) {}
}

尽管根据 JDBC 规范的规定,关闭 Connection 时正常情况下也会将 Statement 和 ResultSet 关闭,但好的做法是:如果在一个 Connection 对象上创建了多个 Statement,则在使用完 Statement 和 ResultSet 后立即显式将它们关闭。如果未立即显式关闭 Statement 和 ResultSet,游标可能会积聚并在关闭 Connection 前超过数据库允许的最大数量。例如,在以下代码片断中,正常情况下通过 finally 块关闭 Connection 时,也会将 ResultSet 和 Statement 关闭。不过,此代码片断在一个连接上创建了多个 Statement 和 ResultSet。因此在循环完成前,可能已发生“超出最多允许打开的游标数”问题。

Connection conn = null;
try{
conn = getConnection();

for(int i = 0; i < NUM_STMT; i++) {
Statement stmt = null;
ResultSet rs = null;

stmt = conn.createStatement();
rs = stmt.executeQuery(/*some query*/);
//do work
}
} catch(SQLException e) {
// handle any exceptions
} finally {
try{
if(conn != null)
conn.close();
} catch(SQLException ignor) {}
}

返回页首

语句缓存
为提高性能,WebLogic Server 提供了一种功能,让您可以在使用连接池时将预处理语句和可调用语句载入缓存。当 WebLogic Server 将预处理语句或可调用语句载入缓存时,在许多情况下,DBMS 将为每个打开的语句都保留游标。因此,语句缓存可能是“超出最多允许打开的游标数”问题的成因。“语句缓存大小”属性决定在每个连接池实例中为每个连接缓存的预处理和可调用语句的总数。如果缓存的语句过多,可能会导致超过数据库服务器上打开游标数的上限。
请注意,各版本 WebLogic Server 的缺省语句缓存大小是有差异的。示例:

在 WebLogic Server 6.1 中,缺省的预处理语句缓存大小为 0 (http://e-docs.bea.com/wls/docs61/adminguide/jdbc.html#1133404 (English))。
在 WebLogic Server 7.0 中,非 XA 和 XA 预处理语句的缺省缓存大小为 5/语句 (http://e-docs.bea.com/wls/docs70/adminguide/jdbc.html#1144702 (English))。
在 WebLogic Server 8.1 中,预处理语句和可调用语句的缺省缓存大小合计为 10 (http://e-docs.bea.com/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1107805 (English))。
此外,在不同的 WebLogic Server 版本中,语句缓存的连接池属性名称和缓存算法的可配置性是不同的(有关详细信息,请参阅文档)。因此,如果最近对旧版本 WebLogic Server 进行了升级,语句缓存的行为变化可能会影响打开游标的数量。请将这种情况考虑在内。
要确定“超出最多允许打开的游标数”问题是否与语句缓存有关,可以通过将语句缓存大小设置为 0 将此功能关闭或减少缓存大小,再确认是否仍会出现错误。如果在减少缓存大小后问题没有发生,则说明连接池原有的语句缓存过大或 DBMS 中打开游标数的上限过低。可能需要考虑调整其中的一个值。如果发现连接上打开的游标数持续增加,但在将语句缓存大小设置为 0 后没有出现这种现象,则可能说明存在游标泄漏问题。这可能是由使用的 JDBC 驱动程序所致,也可能是 WebLogic Server 本身的一个错误。请尝试使用其它 JDBC 驱动程序。如果使用其它 JDBC 驱动程序后仍发生同样的问题,请将此问题报告给 BEA,这样支持工程师可以对问题做进一步探查,以确定该问题是否为 WebLogic Server 自身的一个错误。

返回页首

数据库驱动程序
“超出最多允许打开的游标数”问题的另一个可能成因是 JDBC 驱动程序有问题。为分清问题是驱动程序问题还是 WebLogic 连接池问题,如果有可重现的测试案例,可以尝试执行以下步骤。

1. 直接从驱动程序获取连接。
在测试案例中,绕过 WebLogic 连接池直接从驱动程序获取 JDBC 连接。但请不要关闭连接,只需让它们以数组或某种其它结构形式保持打开状态,然后确认游标泄漏是否仍然存在。不关闭连接是因为要模拟使用连接池时的行为。使用连接池时,connection.close() 并未真正地关闭物理连接,而是将连接返回到池中。

2. 尝试使用其它 JDBC 驱动程序。
可以尝试使用其它供应商的 JDBC 驱动程序或升级版的驱动程序,然后确认问题是否仍然存在。可以使用元数据来验证所使用的驱动程序是否正确。示例代码与下面的类似:

Connection conn = getConnection();
DatabaseMetaData dmd = conn.getMetaData();
System.out.println("JDBC Driver Name is " + dmd.getDriverName());
System.out.println("JDBC Driver Version is " + dmd.getDriverVersion());

3. XA 驱动程序错误。
如果使用的是 Oracle XA 驱动程序,并且数据库中出现了大量类似“SELECT count (*) FROM SYS.DBA_PENDING_TRANSACTIONS”的查询,则可能是 Oracle XA 驱动程序存在游标泄漏问题。在有关 MetaLink 的案例 3151681 中有对此问题的描述,并且版本 10.1.0.2 中已修正了该问题。
此外,在使用 XA 驱动程序时,请确保按在 http://e-docs.bea.com/wls/docs81/jta/thirdpartytx.html#1075181 (English) 中所述,在 Database Server 上启用 XA(例如,grant select on dba_pending_transactions to public)。

如果问题是 JDBC 驱动程序问题,但又不得不使用该驱动程序,一种以变通方式解决游标泄漏问题的方法是不时重设 WebLogic 连接池,或收缩连接池。有关重设或收缩连接池的方法,请参阅 WebLogic 文档(如果是 8.1 版本,该文档位于 http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_jdbcconnectionpool_control.html (Enlish))。

ORA-00600: internal error code, arguments: [qkabix], [0], [], [], [], [], [], []

最近应用程序当运行特定查询语句时会报 错.

ORA-00600: internal error code, arguments: [qkabix], [0], [], [], [], [], [], []
Fri Jul 13 09:49:12 2012
Thread 1 advanced to log sequence 78 (LGWR switch)
  Current log# 1 seq# 78 mem# 0: /redo/oradata/chdyl/redo01a.log
  Current log# 1 seq# 78 mem# 1: /redo/oradata/chdyl/redo01b.log
Fri Jul 13 11:27:34 2012
ORA-01555 caused by SQL statement below (SQL ID: fssnk8qfdvts5, Query Duration=0 sec, SCN: 0x0bad.b50d20a2):
Fri Jul 13 11:27:34 2012
select * from ab13  as of timestamp to_timestamp(:"SYS_B_0",:"SYS_B_1") where aae064=:"SYS_B_2"
在oracle的metalink的回复如下:
Note: This is INTERNAL ONLY research.  No action should be taken by the customer on this information.
This is research only, and may NOT be applicable to your specific situation.

KNOWLEDGE
-----------------
Keywords ora-600 qkabix

Note 743212.1: ORA-00600[Qkabix] Error Caused by a Particular Query

Platforms: 1-914CU;

This document is being delivered to you via Oracle Support's Rapid Visibility (RaV) process and therefore has not been subject to an independent technical review.'

Applies to:
Oracle Server - Enterprise Edition - Version: 10.2.0.1 to 10.2.0.5 - Release: 10.2 to 10.2

Symptoms

The following internal error is reported in the alert log:
ORA-00600: internal error code, arguments: [qkabix], [0], [], [], [], [], [], []

The error is reported running a Select statement.

The call stack looks like:
qkabix qkaix qkatab qkajoi qkaqkn qkadrv opitca kksFullTypeCheck rpiswu2 kksSetBindType kksfbc
kkspfda kpodny kpoal8
Cause

The problem could be related to a CBO ( Cost Based Optimizer ) issue when a query uses a bitmap access paths for b-tree indexes.

It was reported in Bug 5945798 but could not be confirmed.
Solution

One possible workaround to avoid the error is to disable the optimizer to produce bitmap plans for B-Tree indexes, even if there is no bitmap index anywhere in sight.

- at session level:
sql> alter session set "_b_tree_bitmap_plans"=false;

- or at system level:
sql> alter system set "_b_tree_bitmap_plans"=false;

- or in the init.ora/spfile:
_b_tree_bitmap_plans = false

解决方法是对b树索引禁用位图访问计划

在ORACLE中移动数据库文件

在ORACLE中移动数据库文件

a.shutdown immediate关闭数据库
b.在os下拷贝数据文件到新的地点
c.Startup mount 启动到mount下
d.Alter database rename datafile ‘老文件’ to ‘新文件’;
e.Alter database open; 打开数据库
2、利用Rman联机操作

RMAN> sql "alter database datafile ''file name'' offline";
RMAN> run {
2> copy datafile 'old file location'
3> to 'new file location';
4> switch datafile ' old file location'
5> to datafilecopy ' new file location';
6> }
RMAN> sql "alter database datafile ''file name'' online";

说明:利用OS拷贝也可以联机操作,不关闭数据库,与rman的步骤一样,利用rman与利用os拷贝的原理一样,在rman中copy是拷贝数据文件,相当于OS的cp,而switch则相当于alter database rename,用来更新控制文件。

–ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成。
–由于磁盘空间的变化,或者基于数据库磁盘I/O性能的调整等,
–我們可能会考虑移动数据库文件。
–下面以LUNIX平台为例,分别讨论三种数据库文件的移动方法。

一.移动数据文件:
— 可以用ALTER DATABASE,ALTER TABLESPACE两种方法移动数据文件。

1. ALTER DATABASE方法;
— 用此方法,可以移动任何表空间的数据文件。

STEP 1. 下数据库:

$ sqlplus /nolog
SQL> conn / as sysdba
SQL> SHUTDOWN;
SQL> EXIT;

STEP 2.用操作系统命令移动数据文件:
— 将数据文件 ‘test.ora’ 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:

$ mv /ora/oracle/data1/test.ora /ora/oracle/data2

STEP 3. Mount数据库,用ALTER DATABASE命令将数据文件改名:

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RENAME FILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora';

STEP 4. 打开数据库:.

SQL> ALTER DATABASE OPEN;
SQL>SELECT NAME,STATUS FROM V$DATAFILE;

2. ALTER TABLESPACE方法:
— 用此方法,要求此数据文件既不属于SYSTEM表空间,也不属于含有ACTIVE回滚段或临时段的表空间。

STEP1. 将此数据文件所在的表空间OFFLINE:

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> ALTER TABLESPACE test OFFLINE;
SQL> EXIT;

STEP2. 用操作系统命令移动数据文件:
将数据文件 ‘test.ora’ 从/ora/oracle/
data1目录移动到/ora/oracle/data2目录下:

$ mv /ora/oracle/data1/test.ora /ora/oracle/data2

STEP3. 用ALTER TABLESPACE命令改数据文件名:

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> ALTER TABLESPACE test RENAME DATAFILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora';

STEP4. 将此数据文件所在的表空间ONLINE:

SQL> ALTER TABLESPACE test ONLINE;
SQL> SELECT NAME,STATUS FROM V$DATAFILE;

二. 移动控制文件:

— 控制文件 在 INIT.ORA文件中指定。移动控制文件相对比较简单,下数据库,
— 编辑INIT.ORA,移动控制文件,重启动数据库。

STEP 1. 下数据库:

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> SHUTDOWN;
SQL> EXIT;

STEP 2.用操作系统命令 移动控制文件:
–将控制文件’ctl3orcl.ora’ 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:

$ mv /ora/oracle/data1/ctrlorcl3.ora /ora/oracle/data2

STEP 3. 编辑INIT.ORA文件:
INIT.ORA文件的在$ORACLE_HOME/dbs目录下,
修改参数 “control_files”,其中指定移动后的控制文件:

control_files = (/ora/oracle/data1/ctrlorcl1.ora,/ora/oracle/data1/ctrlorcl2.ora,/ora/oracle/data2/ctrlorcl3.ora)

STEP 4. 重启动数据库:

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> STARTUP;
SQL>SELECT name FROM V$CONTROLFILE;
SQL> EXIT;

三. 移动联机日志文件:
STEP 1. 停数据库:

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> SHUTDOWN;
SQL> EXIT;

STEP 2. 用操作系统命令移动联机日志文件:
–将联机日志文件’redolog1.ora’ 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:

$ mv /ora/oracle/data1/redolog1.ora /ora/oracle/data2

STEP 3. Mount数据库,用ALTER DATABASE 命令改联机日志文件名:.

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> STARTUP MOUNT ;
SQL> ALTER DATABASE RENAME FILE '/ora/oracle/data1/redolog1.ora' TO '/ora/oracle/data2/redolog1.ora';

STEP 4.重启动数据库: .

SQL> ALTER DATABASE OPEN;
SQL>SELECT MEMBER FROM V$LOGFILE

Oracle中like效率正则表达式浅析

Oracle 中like常用但是其效率不是高。

特别是使用%a%—–》全局扫描,没有利用到任何索引。
情况可以的条件尽量下使用a%——》可以利用正序的索引。
%a——》可以利用反序的索引(当然得已有反序的索引)。
使用instr函数取代like查询,可提高效率,在海量数据中效果尤其明显。

1.%a%方式:

select * from pub_yh_bm t
where instr(t.chr_bmdm,'2')>0

等份于:

select * from pub_yh_bm t
where t.chr_bmdm like '%2%'

2.%a方式:

select * from pub_yh_bm t
where instr(t.chr_bmdm,'110101')=length(t.chr_bmdm)-length('110101')+1

等份于:

select * from pub_yh_bm t
where t.chr_bmdm like '%110101'

3.a%方式:

select * from pub_yh_bm t
where instr(t.chr_bmdm,'11010101')=1

等份于:

select * from pub_yh_bm t
where t.chr_bmdm like '11010101%'

ORACLE中的支持正则表达式的函数主要有下面四个:
1,REGEXP_LIKE :与LIKE的功能相似
2,REGEXP_INSTR :与INSTR的功能相似
3,REGEXP_SUBSTR :与SUBSTR的功能相似
4,REGEXP_REPLACE :与REPLACE的功能相似
它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,
但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
POSIX 正则表达式由标准的元字符(metacharacters)所构成:
‘^’ 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
‘$’ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹
配 ‘\n’ 或 ‘\r’。
‘.’ 匹配除换行符之外的任何单字符。
‘?’ 匹配前面的子表达式零次或一次。
‘+’ 匹配前面的子表达式一次或多次。
‘*’ 匹配前面的子表达式零次或多次。
‘|’ 指明两项之间的一个选择。例子’^([a-z]+|[0-9]+)$’表示所有小写字母或数字组合成的
字符串。
‘( )’ 标记一个子表达式的开始和结束位置。
‘[]’ 标记一个中括号表达式。
‘{m,n}’ 一个精确地出现次数范围,m=< 出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少 出现m次。 \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。 字符簇: [[:alpha:]] 任何字母。 [[:digit:]] 任何数字。 [[:alnum:]] 任何字母和数字。 [[:space:]] 任何白字符。 [[:upper:]] 任何大写字母。 [[:lower:]] 任何小写字母。 [[:punct:]] 任何标点符号。 [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。 各种操作符的运算优先级 \转义符 (), (?:), (?=), [] 圆括号和方括号 *, +, ?, {n}, {n,}, {n,m} 限定符 ^, $, anymetacharacter 位置和顺序 范例:

–regexp_like
–查询value中以1开头60结束的记录并且长度是7位
select * from fzq where value like ‘1____60′;
select * from fzq where regexp_like(value,’1….60′);
–查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。
–使用like就不是很好实现了。
select * from fzq where regexp_like(value,’1[0-9]{4}60′);
— 也可以这样实现,使用字符集。
select * from fzq where regexp_like(value,’1[[:digit:]]{4}60′);
— 查询value中不是纯数字的记录
select * from fzq where not regexp_like(value,’^[[:digit:]]+$’);
— 查询value中不包含任何数字的记录。
select * from fzq where regexp_like(value,’^[^[:digit:]]+$’);
–查询以12或者1b开头的记录.不区分大小写。
select * from fzq where regexp_like(value,’^1[2b]’,’i’);
–查询以12或者1b开头的记录.区分大小写。
select * from fzq where regexp_like(value,’^1[2B]’);
— 查询数据中包含空白的记录。
select * from fzq where regexp_like(value,'[[:space:]]’);
–查询所有包含小写字母或者数字的记录。
select * from fzq where regexp_like(value,’^([a-z]+|[0-9]+)$’);
–查询任何包含标点符号的记录。
select * from fzq where regexp_like(value,'[[:punct:]]’);

select * from Dba_Tables b where regexp_like(b.table_name,’^[[A-Z]]$’) And b.owner=’SSCP2′