2009 年 11 月 03日, 星期二
虚拟机安装10g rac的几点备忘
一、重新安装CRS需要做的事
dd清除ocr和vote disk
dd if=/dev/zero of=/dev/sdb1 bs=1M count=256
dd if=/dev/zero of=/dev/sdc1 bs=1M count=256
dd if=/dev/zero of=/dev/sdd1 bs=1M count=256
dd if=/dev/zero of=/dev/sde1 bs=1M count=256
dd if=/dev/zero of=/dev/sdf1 bs=1M count=256
rm -rf /var/tmp/.oracle /tmp/.oracle /etc/oracle /etc/oraInst.loc
rm -rf /etc/init.d/init.cssd /etc/init.d/init.crs /etc/init.d/init.crsd /etc/init.d/init.evmd
rm -rf /etc/rc2.d/K96init.crs /etc/rc2.d/S96init.crs
rm -rf /etc/rc3.d/K96init.crs /etc/rc3.d/S96init.crs
rm -rf /etc/rc5.d/K96init.crs /etc/rc5.d/S96init.crs
rm -rf /opt/app/oracle/oraInventory/* /opt/crs/oracle/product/10.2.0/crs_1/*
chown -R oracle:oinstall /opt/crs
chown -R oracle:oinstall /opt/app/oracle
chown -R oracle:oinstall /dev/raw
chown -R oracle:oinstall /dev/sd[b-f]1
rm -f /etc/inittab.crs
cp /etc/inittab.no_crs /etc/inittab
二、VMware Linux安装RAC出现Failure at final check of Oracle CRS stack 10的解决
1、开通了root的ssh
2、/dev/sd[b-f]1在配置文件中加入了shared
scsi1:0.shared = "true"
scsi1:1.shared = "true"
scsi1:2.shared = "true"
scsi1:3.shared = "true"
scsi1:4.shared = "true"
三、dbca配置asm时报:ORA-27102 out of memory解决方法:
#cat /proc/sys/kernel/shmmax
0
sysctl -p =>kernel.shmmax = 60129542144
因为:在32位Linux中共享内存段最大不能超过4G。如果在32位系统上设置SHMMAX值大于或等于4294967296 bytes (4 * 1024 * 1024 * 1024 = 4GB),参数SHMMAX会变为0。也就是说在32位系统上SHMMAX不能超过4294967295(4G-1byte)。这是32位系统的限制,升级到64位系统能够规避此问题。
解决方法:修改/etc/sysctl.conf中的kernel.shmmax = 4294967295,sysctl -p后dbca正常。
四、重启后无法oracleasm listdisks/scandisks
现象:
[root@dbrac2 kernel]# /etc/init.d/oracleasm listdisks
[root@dbrac2 kernel]# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks: [FAILED]
[root@dbrac2 kernel]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdg1
Marking disk "/dev/sdg1" as an ASM disk: Error opening manager: No such file or directory
[FAILED]
解决方法:双机重新执行#/etc/init.d/oracleasm configure
再执行/etc/init.d/oracleasm listdisks(/scandisk)均OK。
五、asm需要的CSS服务起不来
现象:
ps -ef|grep css
一个/bin/sh /etc/init.d/init.cssd fatal
几个/bin/sh /etc/init.d/init.cssd startcheck
解决方法:重新执行/etc/init.d/oracleasm configure重新配置一遍即可。
六、重启后/dev/raw/raw[1-5]和/dev/sd[b-n]1的属主重新变为root:disk的解决
之前我一直采用的是在/etc/rc.d/rc.local中增加以下两行:
chown -R oracle:oinstall /dev/raw
chown -R oracle:oinstall /dev/sd[b-n]1
可以临时解决。永久解决的方法如下:
在/etc/udev/permissions.d/50-udev.permissions中:
1、修改一行:
raw/*:root:disk:0660 --> raw/*:oracle:oinstall:0660
2、在sd*:root:disk:0660后增加如下一行:
sd[b-n]1:oracl3:oinstall:0660
七、双机时间同步的解决方法
在1号机的/etc/rc.d/rc.local中增加一行:service ntpd restart
在2号机运行while true; do; sleep 1; ntpdate dbrac1(1号机主机名); done
八、创建磁盘组时报:无法使用连接服务dbrac2:1521:+ASM2将磁盘组装载到远程节点dbrac2。请确保监听程序在此节点上运行,并且ASM实例已注册到监听程序。收到以下错误:
Listener refused the connection with the following err:
ORA-12523,......
此时,可用磁盘组的“状态”栏均为“MOUNTED(1/2)”
dbrac1上:v$asm_diskgroup的state均为MOUNTED
export ORACLE_SID=+ASM1
SQL>select name,stat from v$asm_diskgroup;
dbrac2上:均为DISMOUNTED。
解决方法:
在lsnrctl status有问题的节点运行netca重新配置监听,可能要在两节点间来回多次配置,我有一次就配置了4次才两遍都OK。
然后再次装载,所有可用磁盘组“状态”均为“MOUNTED(2/2)”,即为OK。
九、crs_stat -t显示db和inst Target=ONLINE State=OFFLINE处理
虚拟机自动启动后,报
[oracle@dbrac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.dbrac.db application ONLINE OFFLINE
ora....c1.inst application ONLINE OFFLINE
ora....c2.inst application ONLINE OFFLINE
ora....SM1.asm application ONLINE ONLINE dbrac1
ora....C1.lsnr application ONLINE ONLINE dbrac1
ora.dbrac1.gsd application ONLINE ONLINE dbrac1
ora.dbrac1.ons application ONLINE ONLINE dbrac1
ora.dbrac1.vip application ONLINE ONLINE dbrac1
ora....SM2.asm application ONLINE ONLINE dbrac2
ora....C2.lsnr application ONLINE ONLINE dbrac2
ora.dbrac2.gsd application ONLINE ONLINE dbrac2
ora.dbrac2.ons application ONLINE ONLINE dbrac2
ora.dbrac2.vip application ONLINE ONLINE dbrac2
手工启动数据库报:
SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DGARC/dbrac/spfiledbrac.ora'
ORA-17503: ksfdopn:2 Failed to open file +DGARC/dbrac/spfiledbrac.ora
ORA-15077: could not locate ASM instance serving a required diskgroup
解决方法:
将两边+ASM1/2实例shutdown后再startup即可从srvctl启动数据库。
后来,重启+ASM实例也没用了,解决方法就是运行/etc/init.d/oracleasm configure,重新配置后能listdisks,再重启+ASM实例可mount diskgroup。
后来的后来,发现执行oracleasm enable时,也能liskdisks,但是重启后又失效了。只好暂时将/etc/init.d/oracleasm enable写在/etc/rc.d/rc.local,能够正常启动数据库和实例。可能是因为ASMLIB的问题。
2009 年 11 月 01日, 星期日
VMware Linux安装RAC出现Failure at final check of Oracle CRS stack 10的解决
困扰我好几天的“VMware Linux安装10g RAC出现Failure at final check of Oracle CRS stack 10”今晚总算得到了解决,先将解决方法说明如下,明天再逐一确认:
1、开通了root的ssh
2、/dev/sd[b-f]1(ocr和voting disk盘)在配置文件中加入了shared
scsi1:0.shared = "true"
scsi1:1.shared = "true"
scsi1:2.shared = "true"
scsi1:3.shared = "true"
scsi1:4.shared = "true"
第二天发现:仅开通root的ssh是不够的,必须shared=true才行。
附:干净清理CRS文件,重新安装(dd清除ocr和vote disk,并使用下面语句清理旧的crs配置文件)
dd if=/dev/zero of=/dev/sdb1 bs=1M count=256
dd if=/dev/zero of=/dev/sdc1 bs=1M count=256
dd if=/dev/zero of=/dev/sdd1 bs=1M count=256
dd if=/dev/zero of=/dev/sde1 bs=1M count=256
dd if=/dev/zero of=/dev/sdf1 bs=1M count=256
rm -rf /var/tmp/.oracle /tmp/.oracle /etc/oracle /etc/oraInst.loc
rm -rf /etc/init.d/init.cssd /etc/init.d/init.crs /etc/init.d/init.crsd /etc/init.d/init.evmd
rm -rf /etc/rc2.d/K96init.crs /etc/rc2.d/S96init.crs
rm -rf /etc/rc3.d/K96init.crs /etc/rc3.d/S96init.crs
rm -rf /etc/rc5.d/K96init.crs /etc/rc5.d/S96init.crs
rm -rf /opt/app/oracle/oraInventory/* /opt/crs/oracle/product/10.2.0/crs_1/*
chown -R oracle:oinstall /opt/crs
chown -R oracle:oinstall /opt/app/oracle
chown -R oracle:oinstall /dev/raw
chown -R oracle:oinstall /dev/sd[b-f]1
rm -f /etc/inittab.crs
cp /etc/inittab.no_crs /etc/inittab
2009 年 05 月 31日, 星期日
Oracle9i SET用法简介2
Oracle9i SET用法简介2
SET MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [TABLE text] [ENTMAP {ON|OFF}][SPOOL {ON|OFF}] [PRE[FORMAT] {ON|OFF}]
输出HTML为文本,这是iSQL*Plus使用的输出。由于它可能破坏浏览器屏幕,谨慎使用生成无效的HTML输出选项。对于动态报表和保存在本地的报告,HEAD和BODY选项是有用的。
SET MARKUP仅仅指定SQL*Plus输出将会是HTML编码。你必须使用SET MARKUP HTML ON SPOOL ON和SQL*Plus的SPOOL命令来生成和命名一个spool文件,并且开始写HTML输出进这个文件。SET MARKUP有和SQLPLUS –MARKUP一样的选项和功能。
更多细节信息参考"MARKUP Options"。用例参考SET MARKUP。
使用SHOW MARKUP命令来查看MARKUP选项状态。
举例
下面的脚本用SET MARKUP HTML命令来使得HTML输出为文本,这个文本被spool到一个指定的文件:
注意: 为了可读性,SET MARKUP的举例使用连接符"-"和空格进行排版。命令选项用正常条目链接。 |
使用你喜欢的文本编辑器来输入必要的命令以设置HTML选项和查询你想要的报表。
SET MARKUP HTML ON SPOOL ON HEAD "<TITLE>SQL*Plus Report</title> -
STYLE TYPE='TEXT/CSS'><!--BODY {background: ffffc6} --></STYLE>"
SET ECHO OFF
SPOOL employee.htm">
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE SALARY>12000;
SPOOL OFF
SET MARKUP HTML OFF
SET ECHO ON
由于这个脚本包含SQL*Plus命令,不要试图从buffer中以/(斜线)运行它,因为它将会失败。在你的文本编辑器中保存脚本,并且使用START运行它:
START employee.sql
当写html输出文件employee.htm">/EM>,因为SET TERMOUT默认是ON,输出也会显示在屏幕上。你可以用你的网页浏览器查看这个spool文件employee.htm">/EM>。它应该显示一些像下面的东西:
SET NEWP[AGE] {1|n|NONE}
SET NEWPAGE在iSQL*Plus中不支持
设置从每一页的顶部到顶部标题之间要打印的空白行数。0值放置一个进纸在每一页的开始(包括首页),并且在多数终端清除屏显。如果你设置NEWPAGE为NONE,SQL*Plus不会打印一个空白行,也不会在报表页之间进纸。
SET NULL text
设置在一个SQL SELECT命令的结果中null值表示的text文本。使用COLUMN命令的NULL字句来覆盖对一个给定的列的NULL变量的设置。
SET NUMF[ORMAT] format
设置显示数字的默认格式。输入一个数字格式为format。关于数字格式描述,参考本章COLUMN命令的FORMAT子句。
SET NUM[WIDTH] {10|n}
设置显示数字的默认宽度。关于数字格式描述,参考本章COLUMN命令的FORMAT子句。
SET PAGES[IZE] {24|n}
设置每一页的行数。你可以设置PAGESIZE为0来禁止显示所有的标题、页分隔符、题头、初始的空行和其他格式化的信息。
SET PAU[SE] {ON|OFF|text}
SET PAUSE在iSQL*Plus中不支持。
当你运行报表时允许你控制终端的滚动。ON使得SQL*Plus在输出报表的每一页都中止。你必须按回车键进入下一页。你输入的text指定text文本会在每次SQL*Plus中止时显示。如果你输入的是多个字,必须用单引号括起来。
你可以在PAUSE命令中嵌入终端依赖的退出序列。这些序列允许你生成反转的视频消息或者支持这样特征的终端的其他影响。
SET RECSEP {WR[APPED]|EA[CH]|OFF}
RECSEP通知SQL*Plus在何处对记录进行分隔。例如,如果你设置RECSEP为WRAPPED,SQL*Plus仅仅在换行后打印一个记录分隔。如果你设置RECSEP为EACH,SQL*Plus在每一行后打印一个记录分隔。如果你设置RECSEP为OFF,SQL*Plus不会打印记录分隔。
SET RECSEPCHAR {_|c}
定义显示或打印分隔记录的字符。一个记录分隔符包含一行重复LINESIZE次的RECSEPCHAR(记录分隔符)。默认是一个空格。
SET SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]}]
控制SQL*Plus中的存储过程或PL/SQL块是否显示输出(也就是DBMS_OUTPUT.PUTLINE)OFF表示DBMS_OUTPUT.PUT_LINE禁止输出;ON表示显示输出。
SIZE设置在Oracle8i或Oracle9i数据库服务器中可以缓存的输出的字节数。n默认值是2000。n的取值范围在2000到1000000。
当WRAPPED被启用,SQL*Plus在达到SET LINESIZE指定的行大小时会换行输出,需要的时候开始新的行。
当WORD_WRAPPED被启用,在SET LINESIZE指定的行大小内,服务器输出的每一行都会换行。行被截断在字边界。SQL*Plus在每行会对齐调整,会跳过所有的行间插入的空格。
当TRUNCATED被启用,服务器输出的每一行都会按照SET LINESIZE指定的行大小进行截断。
对于每一个FORMAT,每一个服务器输出行在一个新的输出行开始。
更多关于BMS_OUTPUT.PUT_LINE的信息,参考你的Oracle9i Application Developer's Guide - Fundamentals。
举例
要在一个PL/SQL块中启用DBMS_OUTPUT.PUT_LINE输出文本显示,输入
SET SERVEROUTPUT ON
下面的例子显示了当你使用SET SERVEROUTPUT ON执行一个匿名过程时会发生什么:
BEGIN
DBMS_OUTPUT.PUT_LINE('Task is complete');
END;
/
Task is complete.
PL/SQL procedure successfully completed.
下面的例子显示当你使用SET SERVEROUTPUT ON创建一个触发器时会发生什么:
CREATE TRIGGER SERVER_TRIG BEFORE INSERT OR UPDATE -
OR DELETE
ON SERVER_TAB
BEGIN
DBMS_OUTPUT.PUT_LINE('Task is complete.');
END;
/
Trigger created.
INSERT INTO SERVER_TAB VALUES ('TEXT');
Task is complete.
1 row created.
要设置输出为WORD_WRAPPED,输入
SET SERVEROUTPUT ON FORMAT WORD_WRAPPED
SET LINESIZE 20
BEGIN
DBMS_OUTPUT.PUT_LINE('If there is nothing left to do');
DBMS_OUTPUT.PUT_LINE('shall we continue with plan B?');
END;
/
If there is nothing
left to do
shall we continue
with plan B?
要设置输出为TRUNCATED,输入
SET SERVEROUTPUT ON FORMAT TRUNCATED
SET LINESIZE 20
BEGIN
DBMS_OUTPUT.PUT_LINE('If there is nothing left to do');
DBMS_OUTPUT.PUT_LINE('shall we continue with plan B?');
END;
/
If there is nothing
shall we continue wi
SET SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}
SET SHIFTINOUT在iSQL*Plus中不支持
允许显示转义字符的终端进行正确的对齐。SET SHIFTINOUT命令对于那些转义字符和数据一起显示的终端(比如IBM 3270终端)是有用的。你只能使用敏感的转义字符集(例如JA16DBCS)来设置这个命令。
使用VISIBLE来显示转义字符作为一个可见的字符(例如一个空格或冒号)。INVISIBLE则相反,不显示任何转义符。
举例
为了启用终端支持的转义字符显示,输入
SET SHIFTINOUT VISIBLE
SELECT LAST_NAME, JOB_ID FROM EMP_DETAILS_VIEW
WHERE SALARY > 12000;
LAST_NAME JOB_ID
---------- ----------
:JJOO: :AABBCC:
:AA:abc :DDEE:e
这里的":" 等于可见的转义字符
大小表示多字节的字符
小写表示单字节的字符
SET SHOW[MODE] {ON|OFF}
SET SHOWMODE在iSQL*Plus中不支持
当你使用SET改变设置时,控制SQL*Plus是否列出SQL*Plus系统变量的old和new设置。ON会列出设置;OFF禁止列出。SHOWMODE ON和舍弃的SHOWMODE BOTH有一样的性能。
SET SQLBL[ANKLINES] {ON|OFF}
SET SQLBLANKLINES在iSQL*Plus中不支持
控制SQL*Plus在SQL命令或脚本中是否允许空行。ON解释空行和新行作为SQL命令或脚本的一部分。OFF是默认值,在SQL命令或脚本中不允许空行或新行。
输入BLOCKTERMINATOR不需要运行SQL命令就可以停止SQL命令的输入。输入SQLTERMINATOR字符来停止SQL命令的输入,并且运行这个SQL语句。
举例
为了在SQL语句中允许空白行,输入
SET SQLBLANKLINES ON
REM Using the SQLTERMINATOR (default is ";")
REM Could have used the BLOCKTERMINATOR (default is ".")
SELECT * FROM DUAL;
输出结果如下:
D
-
X
SET SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}
仅在执行前转换SQL命令和PL/SQL块的大小写。SQL*Plus转换命令中的所有文本,包括加引号的文字和标示符。如果SQLCASE为UPPER转换成大写,如果SQLCASE为LOWER转换成小写,如果SQLCASE为MIXED什么也不改变。
SQLCASE在SQL缓存自身是不会改变的。
SET SQLCO[NTINUE] {> |text}
SET SQLCONTINUE在iSQL*Plus中不支持
在你使用连接符(-)在另一行继续一个SQL*Plus命令后,设置SQL*Plus显示的字符序列作为提示。
举例
为了设置SQL*Plus命令继续提示为一个感叹号加一个空格,输入
SET SQLCONTINUE '! '
SQL*Plus将会如下提示继续:
TTITLE 'MONTHLY INCOME' -
! RIGHT SQL.PNO SKIP 2 -
! CENTER 'PC DIVISION'
默认的继续提示符是"> "。
SET SQLN[UMBER] {ON|OFF}
SET SQLNUMBER在iSQL*Plus中不支持
设置SQL命令或PL/SQL块的第二行和随后的行的提示。ON设置提示为行号。OFF设置提示为SQLPROMPT的值。
SET SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
设置VARIABLE的状态或输出格式为版本指定的x.y[.z]。x是版本号,y是发行版本号,z是更新版本号。例如,8.1、8.1.7或9.0.0。在最近的版本中,SQLPLUSCOMPATIBILITY可能会影响不同于VARIABLE的特征。
设置SQLPLUSCOMPATIBILITY的值低于9.0.0版本将会导致NCHAR或NVARCHAR2数据类型的VARIABLE定义还原为Oracle8i的状态,由此变量的大小按字节计算,或者字符依赖于被选的本地字符集。
默认的glogin.sql文件包含SET SQLPLUSCOMPAT 8.1.7。推荐加SET SQLPLUSCOMPAT 9.0.0到你的脚本来最大化和SQL*Plus未来版本的兼容性。
SET SQLPRE[FIX] {#|c}
SET SQLPREFIX在iSQL*Plus中不支持
设置SQL*Plus的前缀符。当你正在输入一个SQL命令或者PL/SQL块时,你可以在一个分割的行上输入一个SQL*Plus命令,前缀加上SQL*Plus前缀符。SQL*Plus将会立即执行这个命令,不影响你正在输入的SQL命令或PL/SQL块。前缀符必须是一个不包含字符和数字的字符。
SET SQLP[ROMPT] {SQL>|text}
SET SQLPROMPT在iSQL*Plus中不支持
设置SQL*Plus命令的提示符。
举例
你需要有Select Any Table的权限来成功运行下面例子的脚本。
为了改变你的SQL*Plus提示来显示你的用户名和SID,输入:
SET SQLPROMPT '&_CONNECT_IDENTIFIER > '
为了改变你的SQL*Plus提示来显示你的SID,输入
SET TERMOUT OFF
COLUMN X NEW_VALUE Y
SELECT RTRIM(INSTANCE, CHR(0)) X FROM V$THREAD;
SET SQLPROMPT '&Y SQL>'
SET TERMOUT ON
为了设置SQL*Plus命令提示来显示当前的用户,输入
SET TERMOUT OFF
COLUMN D22 NEW_VALUE VAR
SELECT USERNAME D22 FROM USER_USERS;
SET SQLPROMPT '&&VAR>'
SET TERMOUT ON
这些设置不是动态的。任何时候你改变实例,你需要重新设置它们,比如当你使用同一个连接命令登陆另一个实例。
SET SQLT[ERMINATOR] {;|c|ON|OFF}
设置用来结束和执行SQL命令的字符为c。它不能是一个数字与字母的字符,也不能是一个空格。OFF意味着SQL*Plus认为没有命令结束符号;你通过输入一个空行终止一个SQL命令。如果SQLBLANKLINES设置为ON,你必须使用BLOCKTERMINATOR来终止一个SQL命令。ON重设结束符号为默认的分号(;)。
SET SUF[FIX] {SQL|text}
SET SUFFIX在iSQL*Plus中不支持
设置脚本调用的SQL*Plus命令的默认的文件扩展名。SUFFIX不控制spool文件的扩展名。
举例
为了将默认的命令文件扩展名从默认的.SQL改为.UFI,输入
SET SUFFIX UFI
如果接着输入
GET EXAMPLE
SQL*Plus将会查找一个叫EXMPLE.UFI的文件代替EXAMPLE.SQL。
SET TAB {ON|OFF}
SET TAB在iSQL*Plus中不支持
决定SQL*Plus如何在终端输出中规定空白的格式。OFF表示使用空格,ON表示使用TAB。TAB设置是每8个字符。是否默认为TAB依赖于系统。
SET TERM[OUT] {ON|OFF}
SET TERMOUT在iSQL*Plus中不支持。
控制脚本执行的命令生成的输出显示。OFF表示禁止显示,这样你可以从脚本spool输出,而不会有屏显。ON表示显示输出。TERMOUT OFF不会影响来自你交互输入的命令的输出。
SET TI[ME] {ON|OFF}
SET TIME在iSQL*Plus中不支持。
控制当前时间的显示。ON表示在没一个SQL>提示符前显示当前时间。OFF禁止时间的显示。
SET TIMI[NG] {ON|OFF}
控制语句执行耗时统计的显示。ON表示显示每一个SQL命令或者PL/SQL块运行的耗时统计。OFF禁止显示每一个命令的耗时。查询关于SET TIMING ON显示的更多信息,参考为不同操作系统提供的Oracle installation and user's manual(s)。查阅TIMING命令以得到关于timing命令的更多信息。
SET TRIM[OUT] {ON|OFF}
SET TRIMOUT在iSQL*Plus中不支持
决定SQL*Plus是否允许在每个显示行的行尾保留空格。ON表示在每行的行尾删除空格,特别是当你从一个慢的通信设备访问SQL*Plus时能提高性能。OFF表示允许SQL*Plus显示行尾的空格。TRIMOUT ON不会影响spool输出。
SET TRIMS[POOL] {ON|OFF}
SET TRIMSPOOL在iSQL*Plus中不支持。
决定SQL*Plus是否允许每个spool行的行尾保留空格。ON表示在每行的行尾删除空格。OFF允许SQL*Plus包含行尾空格。TRIMSPOOL ON不会影响terminal输出。
SET UND[ERLINE] {-|c|ON|OFF}
设置用来对报告中的列标题进行下划线c注释的字符,c可能不是一个包含文字和数字的字符或者空白。ON或OFF表明是否打开或关闭下划线。ON改变c的值回到默认的“-”。
SET VER[IFY] {ON|OFF}
在用值代替替换变量前后控制是否列出一个SQL语句或PL/SQL命令的文本。ON表示列出文本;OFF表示禁止列出。
SET WRA[P] {ON|OFF}
控制如果一个被选行对于行宽太长,是否截断被选行的显示。OFF表示截断被选行;ON表示允许被选行换行显示到下一行。
对于指定的列,使用COLUMN命令的WRAPPED和TRUNCATED子句来覆盖WRAP的设置。
查看全文2009 年 05 月 28日, 星期四
Oracle9i SET用法简介1
Oracle9i SET用法简介1
设置一个系统变量来改变你当前会话的SQL*Plus环境设置,比如:
- 数据的显示宽度
- 自定义的HTML格式
- 启用或者禁用列标题的打印
- 每页行长度
你也可以在iSQL*Plus中使用系统变量屏幕来设置系统变量。
SET 系统变量 值
系统变量和值都会显示在SET命令中。
用法
SQL*Plus维护系统变量(也称之为SET命令变量)来使你对一个SQL*Plus会话建立一个特定的环境。你可以使用SET命令改变这些系统变量,并使用SHOW命令列出它们的值。
SET ROLE和SET TRANSACTION是SQL命令(详情参考Oracle9i SQL Reference)。当后面不接TRANSACTION或ROLE关键字时,SET默认是一个SQL*Plus命令。
SET APPI[NFO]{ON|OFF|text}
通过DBMS_APPLICATION_INFO包设置脚本的自动注册。它使得DBA能监控每个脚本的性能和资源使用情况。注册的名字显示在V$SESSION和V$SQLAREA视图中的MODULE字段。你可以使用DBMS_APPLICATION_INFO.READ_MODULE过程来获取注册的名字。
ON注册被@,@@或START命令调用的脚本。OFF禁用脚本注册。替代的,text的当前值被注册。当没有脚本在运行或者当APPINFO设为OFF(这是默认设置)时,Text指定注册text。对于text,默认是“SQL*Plus”。如果你在text中输入多个字,你必须使用引号把它们括起来。Text的最大长度受DBMS_APPLICATION_INFO包的限制。
注册的名字有nn@xfilename的格式,其中nn是脚本的深度水平;当脚本名被截断时,x是’<’,否则它是空的;filename是脚本名,可能会被截断成DBMS_APPLICATION_INFO包接口所允许的长度。
注意: 为了使用这个特征,你必须可以访问DBMS_APPLICATION_INFO包。以SYS用户运行DBMSUTIL.SQL(这个名字可能根据你的操作系统不同而不同)来创建DBMS_APPLICATION_INFO包。DBMSUTIL.SQL是Oracle9i数据库服务器产品的一部分。 |
更多关于DBMS_APPLICATION_INFO包的信息,参考Oracle9i Database Performance Tuning Guide and Reference手册。
举例:
由于它的默认是SET OFF,为了显示APPINFO的设置,输入
SET APPINFO ON
SHOW APPINFO
APPINFO值为ON,并被设置给了”SQL*Plus”
为了改变默认的text值,输入
SET APPINFO 'This is SQL*Plus'
为了确信注册已经被替代,输入
VARIABLE MOD VARCHAR2(50)
VARIABLE ACT VARCHAR2(40)
EXECUTE DBMS_APPLICATION_INFO.READ_MODULE(:MOD, :ACT);
PL/SQL procedure successfully completed.
PRINT MOD
MOD
---------------------------------------------------
This is SQL*Plus
为了改变APPINFO回它的默认值,输入
SET APPI OFF
SET ARRAY[SIZE] {15|n}
设置SQL*Plus一次从数据库里获取的行数--称之为一个batch。取值范围从1到5000。取大值会增加获取多行的查询和子查询的效率,但是需要更多的内存。值大于100之后,性能变化不大。ARRAYSIZE对SQL*Plus操作的结果没有影响,出了增加效率。
SET AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
控制Oracle什么时候提交对数据库的挂起的改变。ON表示在数据库成功执行每一个INSERT、UPDATE、DELETE命令或者PL/SQL块之后提交对数据库的挂起的改变。OFF禁止自动提交,因而你必须手动提交改变(例如,使用SQL命令COMMIT)。IMMEDAITE方式的功能和ON选项一样。n表示在数据库成功执行n条INSERT、UPDATE、DELETE命令或者PL/SQL块之后提交对数据库的挂起的改变。n必须大于0小于2,000,000,000。在成功执行n条INSERT、UPDATE、DELETE命令或者PL/SQL块、commit、rollback、SET AUTOCOMMIT命令之后,语句的计数器会重置为0。
注意: 对于这个特征,一个PL/SQL块被当做一个事物,不管包含多少个实际的SQL命令个数。 |
SET AUTOP[RINT] {ON|OFF}
设置绑定变量的自动打印。ON或OFF控制SQL*Plus是否自动显示绑定变量(参考EXECUTE命令执行PL/SQL块)。更多关于现实绑定变量的信息,参考本章的PRINT命令。
SET AUTORECOVERY [ON|OFF]
ON表示在恢复期间, RECOVER命令自动应用所需的默认归档日志文件名。当AUTORECOVERY设置为ON时,不需要交互,需要提供的文件以特定的文件名存在于特定的目录。当AUTORECOVERY为0N时所用用的文件名是由初始化参数LOG_ARCHIVE_DEST and LOG_ARCHIVE_FORMAT的值决定的。
在iSQL*Plus中,你必须设置使用RECOVERY命令将AUTORECOVERY设置为ON。试图使用AUTORECOVERY OFF时将会报错:
SP2-0872 在iSQL*Plus中必须使用SET AUTORECOVERY ON
OFF为默认值,要求你手工输入文件名,或者接受给定的默认文件名。关于数据库恢复的更多信息参考本章的RECOVER命令。
举例
为了设置恢复模式为AUTOMATIC,输入
SET AUTORECOVERY ON
RECOVER DATABASE
SET AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
显示有关SQL DML语句(SELECT、INSERT、UPDATE或DETETE)成功执行的报告。这个报告可能包含执行统计和查询执行路径。
OFF不会显示跟踪报告。ON显示跟踪报告。TRACEONLY显示跟踪报告,但即便要,也不打印查询数据。EXPLAIN通过执行一个EXPLAIN PLAN显示查询执行路径。STATISTICS显示SQL语句的统计信息。更多EXPLIAN PLAN信息参考Oracle9i SQL Reference手册。
使用ON或TRACEONLY不带显式选项,默认为EXPLAN STATISTICS。
TRACEONLY选项对于禁止大查询的查询数据可能是有用的。如果STATISTICS被指定,SQL*Plus仍然会从服务器获得查询数据,只不过这些数据不会被显示。
在一个语句成功完成后,AUTOTRACE报告会被打印。
Oracle9i Database Performance Tuning Guide and Reference手册有关于执行计划和统计信息的文档。
当SQL*Plus生成一个STATISTICS报告时,又一个数据库连接会自动生成。当STATISTICS选项被设置成OFF或者你退出SQL*Plus时,这个连接关闭。
你的AUTOTRACE报告的格式会根据你连接和配置的服务器的版本不同而不同。
当FIPS标志启用时,AUTOTRACE不可用。
更多AUTOTRACE信息参考"Tracing Statements"。
SET BLO[CKTERMINATOR] {.|c|ON|OFF}
设置用来结束PL/SQL块的字符为c。它不能是一个包含文字与数字的字符,也不能是空白。为了执行这个块,你必须使用RUN或者/(斜线)命令。
OFF意味着SQL*Plus认为没有PL/SQL块结束符号。ON改变c的值回默认的句号(.),而不是最近使用的符号。
SET CMDS[EP] {;|c|ON|OFF}
将用来分割一行内输入的多个SQL*Plus命令的非字符与数字的字符设置成c。ON或OFF控制你在一行内是否可以输入多个命令。ON自动地设置命令分隔符为分号(;)。
举例
为了以TTITLE指定标题和以COLUMN格式化一列,两者在同一行,输入
SET CMDSEP +
TTITLE LEFT 'SALARIES' + COLUMN SALARY FORMAT $99,999
SELECT LAST_NAME, SALARY FROM EMP_DETAILS_VIEW
WHERE JOB_ID = 'SH_CLERK';
SALARIES
LAST_NAME SALARY
------------------------- --------
Taylor $3,200
Fleaur $3,100
Sullivan $2,500
Geoni $2,800
Sarchand $4,200
Bull $4,100
Dellinger $3,400
Cabrio $3,000
Chung $3,800
Dilly $3,600
Gates $2,900
Perkins $2,500
Bell $4,000
Everett $3,900
McCain $3,200
Jones $2,800
SALARIES
LAST_NAME SALARY
------------------------- --------
Walsh $3,100
Feeney $3,000
OConnell $2,600
Grant $2,600
20 rows selected.
SET COLSEP {_|text}
在iSQL*Plus中,SET COLSEP决定了列的分隔符,这些分隔符作为标志显示在输出列的中间。HTML表输出是默认。为了生成预定格式的输出,你必须使用SET MARKUP HTML PREFORMAT ON命令设置PREFORMAT ON。
设置text显示在被选的列之间。如果COLSEP变量包含多个空格或者标点符号,你必须用单引号括起来。Text的默认值是一个字符。
在多行的记录中,列分隔符不会显示在那些开始在不同的行的列之间。通过使用BREAK…SKIP n,列分隔符不会显示在空行,并且不会覆盖记录分隔符。更多信息参考SET RECSEP章节。
举例
为了将列分隔符设置成"|",输入
SET COLSEP '|'
SELECT LAST_NAME, JOB_ID, DEPARTMENT_ID
FROM EMP_DETAILS_VIEW
WHERE DEPARTMENT_ID = 20;
LAST_NAME |JOB_ID |DEPARTMENT_ID
-------------------------|----------|-------------
Hartstein |MK_MAN | 20
Fay |MK_REP | 20
SET COM[PATIBILITY]{V7|V8|NATIVE}
指定使用的Oracle SQL语法的版本。对于Oracle7,设置COMPATIBILITY为V7,Oracle8为V8,以此类推。COMPATIBILITY总是默认为NATIVE。COMPATIBILITY应该正确设置为与你所连的数据库SQL语法版本一致,否则你可能不能运行任何SQL命令。
举例
为了运行一个脚本,用Oracle7 SQL语法生成的SALARY.SQL,输入
SET COMPATIBILITY V7
START SALARY
在运行这个文件后,重新设COMPATIBILITY为NATIVE以运行Oracle9i所生成的脚本:
SET COMPATIBILITY NATIVE
你也可以在脚本的开头增加SET COMPATIBILITY V7命令,在文件的结尾重设COMPATIBILITY为NATIVE。
SET CON[CAT] {.|c|ON|OFF}
当SQL*Plus将解释下一个字符作为变量名的一部分时,设置用来终止一个替换变量引用的字符。当你接通CONNCAT时,SQL*Plus重设CONCAT值。
SET COPYC[OMMIT] {0|n}
在COPY命令提交改变到数据库后,控制批量处理的数量。COPY提交行到目的数据库,每次它复制n行批量处理。取值范围为0到5000.你可以设置一个批量的值为ARRAYSIZE变量。如果你设置COPYCOMMIT为0,COPY仅仅在复制操作结束时执行提交。
SET COPYTYPECHECK {ON|OFF}
当使用COPY命令插入或追加到表时,设置禁止数据类型比较。这是为了便于复制到DB2,它要求CHAR型被复制成一个DB2 DATE型。
SET DEF[INE] {&|c|ON|OFF}
将作为前缀替换变量的字符设置为c。ON或OFF控制是否SQL*Plus将会扫描替换变量的命令,并用它们的值进行替换。ON改变c的值回默认的‘&’,而不是最近使用的字符。设置DEFINE为0FF覆盖SCAN变量的设置。更多SCAN变量的信息,参考SET SCAN命令。
SET DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]
设置你可以递归描述对象的水平深度。DEPTH子句有效范围从1到50。如果你SET DESCRIBE DEPTH ALL,深度将会被设置为50,这是允许的最大值。当一个对象包含多个对象类型时,你爷可以显示行数和缩进显示属性或列名。使用SET LINESIZE命令来控制数据显示的宽度。
更多关于描述对象的信息,参考本章前述的DESCRIBE。
举例
为了描述EMP_DETAILS_VIEW视图到2级深度,并且当也要显示行数时缩进输出,首先,向下面这样描述视图:
DESCRIBE EMP_DETAILS_VIEW
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID NOT NULL NUMBER(6)
JOB_ID NOT NULL VARCHAR2(10)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
LOCATION_ID NUMBER(4)
COUNTRY_ID CHAR(2)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
JOB_TITLE NOT NULL VARCHAR2(35)
CITY NOT NULL VARCHAR2(30)
STATE_PROVINCE VARCHAR2(25)
COUNTRY_NAME VARCHAR2(40)
REGION_NAME VARCHAR2(25)
为了格式化EMP_DETAILS_VIEW以便输出显示缩进和行数,使用如下的SET DESCRIBE命令:
SET DESCRIBE DEPTH 2 LINENUM ON INDENT ON
为了显示上面的设置,输入
DESCRIBE EMP_DETAILS_VIEW
Name Null? Type
------------------- -------- --------------------
1 EMPLOYEE_ID NOT NULL NUMBER(6)
2 JOB_ID NOT NULL VARCHAR2(10)
3 MANAGER_ID NUMBER(6)
4 DEPARTMENT_ID NUMBER(4)
5 LOCATION_ID NUMBER(4)
6 COUNTRY_ID CHAR(2)
7 FIRST_NAME VARCHAR2(20)
8 LAST_NAME NOT NULL VARCHAR2(25)
9 SALARY NUMBER(8,2)
10 COMMISSION_PCT NUMBER(2,2)
11 DEPARTMENT_NAME NOT NULL VARCHAR2(30)
12 JOB_TITLE NOT NULL VARCHAR2(35)
13 CITY NOT NULL VARCHAR2(30)
14 STATE_PROVINCE VARCHAR2(25)
15 COUNTRY_NAME VARCHAR2(40)
16 REGION_NAME VARCHAR2(25)
SET ECHO {ON|OFF}
控制START命令是否列出一个脚本中的每一个被执行的命令。ON表示列出命令,OFF禁止列出。
SET EDITF[ILE] file_name[.ext]
SET EDITFILE在iSQL*Plus中不支持
为EDIT命令设置默认的文件名。更多关于EDIT命令的信息参考本章EDIT部分。
你可以包括一个路径和(/或)文件扩展。关于改变默认扩展的信息,参考SET领命的SUFFIX变量。这个默认的文件名和最大文件名长度是操作系统指定的。
SET EMB[EDDED] {ON|OFF}
控制每个报告从一页的什么地方开始。OFF强制每个报告在一个新页的顶部开始。ON允许一个报告在一页的任何地方开始。当你想一个报告接着上个运行的报告立即开始打印时,设置EMBEDDED为ON。
SET ESC[APE] {|c|ON|OFF}
定义作为转义字符的字符。OFF表示不定义转义字符。ON表示启用转义字符。ON会修改c的值回默认值“”。
你可以在代替字符(通过SET DEFINE设置)之前使用转义字符来指定SQL*Plus应该对待代替字符作为一个普通字符而不是要求变量替换。
举例
如果你定义了感叹号(!)为转义符,那么
SET ESCAPE !
ACCEPT v1 PROMPT 'Enter !&1:'
显示如下提示:
Enter &1:
为了将转义符设回默认值(反斜线),输入
SET ESCAPE ON
SET FEED[BACK] {6|n|ON|OFF}
当一个脚本选择至少n条记录时,显示返回的记录数。ON或OFF表示是否打开或者关闭这个显示。打开feedback ON设置n为1.将feedback设置为0等同于设置它为OFF。
SET FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}
检查以确保SQL语句符合ANSI/IOS SQL92标准。如果任何非标准的结构发现,Oracle服务器将会作为错误标志它们,并且显示语法错误。这个SQL语言ALTER SESSION SET FLAGGER命令等价。
即使在你没有连上数据库时,你也可以执行SET FLAGGER。FIPS标志将会一直影响SQL*Plus会话,直到SET FLAGGER OFF(或ALTER SESSION SET FLAGGER=OFF)命令成功,或者你退出SQL*Plus。
当FIPS标志启用时,SQL*Plus对CONNECT、DISCONNECT和ALTER SESSION SET FLAGGER命令显示一个警告,即使它们是成功的。
SET FLU[SH] {ON|OFF}
SET FLUSH在iSQL*Plus中不支持
控制什么时候将输出送到用户的显示设备。OFF表示允许主机操作系统缓存输出。ON表示禁用缓存。
仅仅当你运行一个没有交互的脚本时(也就是说,你的脚本运行结束前,你都不需要看到输出和/或者提示符)使用OFF。FLUSH OFF的使用减少了I/O的处理数量,可以提升性能。
SET HEA[DING] {ON|OFF}
在报表中控制列标题的打印。ON表示在报表中打印列标题;OFF表示禁止列标题。
SET HEADING OFF命令不会影响显示的列宽,仅仅禁止列标题自身的打印。
举例
为了禁止在报表中显示列标题,输入
SET HEADING OFF
如果你接着运行一个SQL SELECT命令
SELECT LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE JOB_ID = 'AC_MGR';
输出结果如下:
Higgins 12000
为了重新显示列标题,输入
SET HEADING ON
SET HEADS[EP] {||c|ON|OFF}
定义用作标题分隔符的字符。标题分隔符不能是包括文字与数字的或者空白。你可以在COLUMN命令、在为了将一个列标题或题头分成多行的老的BTITLE和TTITLE表格中使用标题分隔符。ON或OFF表示是否打开或关闭标题分隔符。当标题分隔符设置为OFF时,SQL*Plus像任何其它字符一样打印标题分隔符。ON修改c的值回默认值“|”。
SET INSTANCE [instance_path|LOCAL]
将你会话的默认实例修改为指定的实例路径。使用SET INSTANCE命令不会连上数据库。当没指定实例时,使用默认的实例。任何在SET INSTANCE使用前的命令都和默认的实例通信。
为了重新将实例设置成你操作系统的默认值,你既可以输入SET INSTANCE不加instance_path,也可以SET INSTANCE LOCAL。参考你的操作系统指定的Oracle文档查阅如何设置初始默认实例的描述。
注意,你只能在当前没有连接到任何一个实例时改变实例。也就是说,你必须首先确认你已经断开了当前的实例,然后设置或者修改这个实例,接着为了让新的设置生效,重连到一个实例。
这个命令只能在Oracle Net运行时发布。你可以使用任何有效的Oracle Net连接标示符作为指定的实例路径。参考你操作系统指定的Oracle文档查阅关于你的操作系统如何指定Oracle Net连接标示符的完整描述。
举例
为了默认实例为“PROD1”,输入
DISCONNECT
SET INSTANCE PROD1
为了将实例设回本地默认值,输入
SET INSTANCE local
为了改变这个实例,你必须断开任何实例的连接。
SET LIN[ESIZE] {80|n}
在开始一个新行之前,设置SQL*Plus一行的字符显示总数。它也可以控制在TTILE、BTITILE、REPHEADER和REPFOOTER中居中或右对齐的文本的位置。改变linesize设置可以影响来自DESCRIBE命令输出文本的换行显示。DESCRIBE输出列典型地会分配给linesize的一定比例。减少或者增加linesize的大小可能会在你的显示中出现出乎预料的文本换行。你可以定义LINESIZE从1到你的系统支持的最大值。查阅提供给你的操作系统的Oracle installation and user's manual(s)。
SET LOBOF[FSET] {n|1}
设置获取和显示CLOB和NCLOB数据的起始位置。
举例
为了将要获取的CLOB列的数据的起始位置设置成第22位,输入
SET LOBOFFSET 22
CLOB数据将会在你的屏幕上换行;SQL*Plus不会截断,直到第23个字符。
SET LOGSOURCE [pathname]
指定恢复时所需的归档日志的位置。默认值由Oracle初始化文件init.ora中的初始化参数LOG_ARCHIVE_DEST设置。不指定路径使用SET LOGSOURCE命令时从默认路径取文件。
举例
为了将日志文件恢复的默认路径设置为目录"/usr/oracle90/dbs/arch",输入
SET LOGSOURCE "/usr/oracle90/dbs/arch"
RECOVER DATABASE
SET LONG {80|n}
对于显示CLOB、LONG、NCLOB和XML类型的值设置最大的宽度(用字节表示)。n的最大值是2GB。
举例
为了设置显示和复制LONG值最大到500,输入
SET LONG 500
LONG数据将会屏显换行;SQL*Plus将会从第501个字节后截断。LONG的默认值是80字节。
SET LONGC[HUNKSIZE] {80|n}
设置SQL*Plus增量大小(按字节)来获取CLOB、LONG、NCLOB或XML类型的值。
举例
为了在SQL*Plus中获取LONG值的增量大小设为100字节,输入
SET LONGCHUNKSIZE 100
LONG数据将会按100字节增量获取,直到整个值被获取,或者到达了SET LONG的值,二者取最小值。
查看全文2007 年 11 月 26日, 星期一
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []处理
上周五快下班的时候,同事接到某公司错误日志如下:
通过PL/SQL Devloper连接61.131.*.*数据库,以IIOSV用户登录,执行以下SQL语言:
<说明: 不是所有时候都出现以下错误,而是同一SQL语句存在可能出可能不出以下内部错误,出现的几率大致50%>
Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0
Connected as iiosv
SQL> alter table IIOSV.USER_VPDN_LNS disable constraint FK_USER_VPDN_LNS
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []
SQL> INSERT INTO IIOSV.USER_VPDN_AUTH SELECT * FROM IIOSP.USER_VPDN_AUTH@DB197
ORA-00600: internal error code, arguments: [], [], [], [], [], [], [], []
SQL> INSERT INTO IIOSV.USER_VPDN_DETAIL SELECT * FROM IIOSP.USER_VPDN_DETAIL@DB197
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []
SQL> INSERT INTO IIOSV.USER_VPDN_MAC SELECT * FROM IIOSP.USER_VPDN_MAC@DB197
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []
SQL> INSERT INTO IIOSV.USER_VPDN_TELEPHONE SELECT * FROM IIOSP.USER_VPDN_TELEPHONE@DB197
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []
SQL> INSERT INTO IIOSV.USER_VPDN_VLANID
SELECT USER_ID, DOMAIN_NAME, NAS_IP, SLOT, PORT, START_VLAN, STOP_VLAN, LIMIT_MODE, LIMIT_DIR, NULL, NULL FROM IIOSP.USER_VPDN_VLANID@DB197
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []
SQL> INSERT INTO IIOSV.USER_VPDN_VPIVCI SELECT * FROM IIOSP.USER_VPDN_VPIVCI@DB197
ORA-00600: internal error code, arguments: [], [], [], [], [], [], [], []
SQL> alter table IIOSV.USER_VPDN_LNS enable constraint FK_USER_VPDN_LNS
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []
SQL> alter table IIOSV.USER_VPDN_MAC enable constraint FK_USER_VPDN_MAC
ORA-00600: internal error code, arguments: [ktsxaffs1], [], [], [], [], [], [], []
经分析,是undo_retention值设得过大,建议其减小该值。周六上午见到同事,说确实如此。
2007 年 03 月 31日, 星期六
Oracle9i在Red Flag Linux上手工建库的步骤
试验环境说明:
笔记本操作系统:Windows XP sp2
虚拟机版本:VMware Workstation 5.5.3
虚拟机操作系统:RedFlag Linux DC Server 4.1
数据库版本:Oracle 9.2.0.4
ORACLE_SID = handora
ORACLE_BASE=/home/oracle
ORACLE_HOME=/home/oracle/OraHome1
一、准备工作
1、手工建立几个目录
1)mkdir $ORACLE_BASE/admin/handora
2)mkdir $ORACLE_BASE/admin/handora/bdump
3)mkdir $ORACLE_BASE/admin/handora/udump
4)mkdir $ORACLE_BASE/admin/handora/cdump
5)mkdir $ORACLE_BASE/admin/handora/pfile
6)mkdir $ORACLE_BASE/admin/handora/scripts
7)mkdir $ORACLE_BASE/admin/handora/create
8)mkdir $ORACLE_BASE/oradata
9)mkdir $ORACLE_BASE/oradata/handora
10)mkdir $ORACLE_BASE/oradata/handora/archive
这些目录要和后面的inithandora.ora对应的参数保持一致。
2、从另外的实例拷贝一个init.ora到$ORACLE_BASE/admin/handora/pfile,并更名为inithandora.ora(该文件内容附后),并将inithandora.ora文件中涉及到的SID均改为handora。
3、生成orapw文件
orapwd file=$ORACLE_HOME/dbs/orapw password=sys entries=5
注:一开始file命名为orapwdhandora,但在执行建库脚本时报错,根据相关的trace文件,改为orapw后,没问题。
4、编写建库脚本handCrtDb.sql:
spool /home/oracle/admin/handora/scripts/HandCrtDb.log
CREATE DATABASE handora
LOGFILE
GROUP 1 '/home/oracle/oradata/handora/redo01.log' SIZE 100M,
GROUP 2 '/home/oracle/oradata/handora/redo02.log' SIZE 100M,
GROUP 3 '/home/oracle/oradata/handora/redo03.log' SIZE 100M
DATAFILE '/home/oracle/oradata/handora/system01.dbf' size 256M
UNDO TABLESPACE "UNDOTBS1" DATAFILE '/home/oracle/oradata/handora/undotbs01.dbf' size 200M
CHARACTER SET ZHS16GBK;
spool off
5、编写创建数据字典、试图等的脚本handCrtDbCatalog.sql:
spool /home/oracle/admin/handora/scripts/handCrtDbCatalog.log
@@$ORACLE_HOME/rdbms/admin/catalog.sql;
@@$ORACLE_HOME/rdbms/admin/catexp7.sql;
@@$ORACLE_HOME/rdbms/admin/catblock.sql;
@@$ORACLE_HOME/rdbms/admin/catdbsyn.sql;
@@$ORACLE_HOME/rdbms/admin/catproc.sql;
@@$ORACLE_HOME/rdbms/admin/catoctk.sql;
@@$ORACLE_HOME/rdbms/admin/catobtk.sql;
@@$ORACLE_HOME/rdbms/admin/caths.sql;
@@$ORACLE_HOME/rdbms/admin/owminst.plb;
connect SYSTEM/manager
@@$ORACLE_HOME/sqlplus/admin/pupbld.sql;
spool off
二、建库阶段
1、以oracle操作系统用户执行sqlplus "/ as sysdba"
2、以指定pfile和nomount方式打开数据库
SQL>startup nomount pfile="/home/oracle/admin/handora/pfile/inithandora.ora"
3、执行建库脚本
SQL>@/home/oracle/admin/handora/scripts/handCrtDb.sql
执行该脚本后,控制文件、联机日志文件、system和undo表空间生成。
几个容易出错的地方:
1)UNDO表空间名要和inithandora.ora中的完全一致
2)注意DATAFILE,LOGFILE,UNDO TABLESPACE之间不能有逗号
3)如果执行出错,看bdump/alert_handora.log,里面会有相关错误提示及对应的udump的trace文件。
4、执行创建数据字典、视图等的脚本
SQL>@/home/oracle/admin/handora/scripts/handCrtDbCatalog.sql
执行完该脚本后,查看v$database的open_mode,数据库已经是READ WRITE打开方式了。
该步骤执行时间较长。
三、建库之后的后续操作
1、创建并指定临时表空间
SQL>CREATE TEMPORARY TABLESPACE "TEMP" TEMPFILE '/home/oracle/oradata/handora/temp01.dbf' SIZE 40M;
SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE "TEMP";
2、生成spfile
SQL>create spfile from pfile='/home/oracle/admin/handora/pfile/inithandora.ora'
默认生成的spfile为$ORACLE_HOME/dbs/spfilehandora.ora
注意pfile不能用双引号,否则报错。
3、以spfile启动数据库
SQL>shutdown immediate;
SQL>startup
至此一个基本的数据库就手工建好了,用户可以根据自己的需求再对数据库参数进行调整。
备注:因为是在已有数据库基础上手工建库,相应修改oratab、修改listener.ora、tnsnames.ora的操作没有提及。如果第一次建库,这些都需要相应增加。
附:inithandora.ora
##############################################################################
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
##############################################################################
###########################################
# Archive
###########################################
log_archive_dest_1='LOCATION=/home/oracle/oradata/handora/archive'
log_archive_format=%t_%s.dbf
log_archive_start=true
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_cache_size=25165824
db_file_multiblock_read_count=16
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
###########################################
# Database Identification
###########################################
db_domain=zfvm
db_name=handora
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/home/oracle/admin/handora/bdump
core_dump_dest=/home/oracle/admin/handora/cdump
timed_statistics=TRUE
user_dump_dest=/home/oracle/admin/handora/udump
###########################################
# File Configuration
###########################################
control_files=("/home/oracle/oradata/handora/control01.ctl", "/home/oracle/oradata/handora/control02.ctl", "/home/oracle/oradata/handora/control03.ctl")
###########################################
# Instance Identification
###########################################
instance_name=handora
###########################################
# Miscellaneous
###########################################
compatible=9.2.0.0.0
###########################################
# Optimizer
###########################################
hash_join_enabled=TRUE
query_rewrite_enabled=FALSE
star_transformation_enabled=FALSE
###########################################
# Pools
###########################################
java_pool_size=0
large_pool_size=8388608
shared_pool_size=83886080
###########################################
# Processes and Sessions
###########################################
processes=150
###########################################
# Redo Log and Recovery
###########################################
fast_start_mttr_target=300
###########################################
# Security and Auditing
###########################################
remote_login_passwordfile=EXCLUSIVE
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=16777216
sort_area_size=536870912
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1
2007 年 03 月 01日, 星期四
在Windows xp操作系统卸载Oracle 9i步骤
1、停止所有Oracle服务。2、删除注册表中的所有关于Oracle项:
(1)在HKEY_LOCAL_MACHINESOFTWARE下,删除Oracle目录;
(2)在HKEY_LOCAL_MACHINESYSTEMControlSet001Services下,删除所有Oracle项;
(3)在HKEY_LOCAL_MACHINESYSTEMControlSet002Services下,删除所有Oracle项;
(4)在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下,删除所有Oracle项;
(5)在HKEY_CLASSES_ROOT下,删除所有Oracle项。
3、系统->高级->环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定。
4、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标。
5、删除操作系统目录下Program files文件夹中的Oracle目录。
6、重启后删除Oracle的安装目录,至此,基本完成卸载。
2007 年 02 月 27日, 星期二
关于listener.log超过2G导致监听无法启动的处理
HostName: testdb1 (双机HA)
Operator System: RedFlag Linux DC Server4.1
DataBase: Oracle 9.2.0.5 (RAC模式)
应用报无法连接上数据库,数据库不可用。但是我在服务器上本地登陆数据库时没问题,建表插记录都正常,srvctl status database -d testdb正常,alert.log日志正常。归档空间足够。
但在tnsping testdb1时发现问题,监听有问题,具体如下:
[oracle@testdb1 admin]$ lsnrctl status
LSNRCTL for Linux: Version 9.2.0.5.0 - Production on 26-FEB-2007 08:15:36
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=testdb1)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
[oracle@testdb1 admin]$ lsnrctl start
LSNRCTL for Linux: Version 9.2.0.5.0 - Production on 26-FEB-2007 08:16:55
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
Starting /home/oracle/OraHome1/bin/tnslsnr: please wait...
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 32: Broken pipe
经查是由于$ORACLE_HOME/network/log/listener.log 达到2G。
备份并清空该日志文件:cp /dev/null $ORACLE_HOME/network/log/listener.log
重新启动监听程序,恢复正常。