oracle笔记
1 卸载oracle developer server的方法:
1-1 oracle卸载工具中卸载对应的oracleds项目;
在注册表中搜索ORACLEDS HOME对应的别名,删除对应的项;
重新启动计算机;
删除对应的ORACLEDS的安装目录;
2jinitiator的相关问题:
2-1 jinitiator是oracle自己的applet viewer工具;
2-2 在第一次打开web应用程序时会自动提示安装该程序,如果不安装则无法打开程序;
2-3 jinitiator是在client端运行
3 OC4J的常用配置:
3-1 更改OC4J的端口
打开%Oracle_Home%J2eeHomeConfigHttp-Web-Site.Xml文件
修改其中:中
“8888:设定项(OC4J默认的端口号是8888)
3-2 修改OC4J默认网页文件
在%Oracle_Home%J2eeHomeDefault-Web-App目录下,有多种方法设定OC4J的默认网页文件:
(1)找到Intex.Html文件,替换该文件;
(2)删除Intex.Html文件,创建Default.Jsp文件
(3)删除Intex.Html文件,创建Intex.Jsp文件
注:OC4J可视同为一个完整的WEB服务器,该服务器可以执行*.jsp文件。
当在浏览器的地址栏内输入IP地址:端口号后,OC4J将根据设定自动寻找默认的网页文件。
3-3 修改OC4J默认网页文件设定
打开%Oracle_Home%J2eeHomeConfigglobal-web-application.xml文件
修改其中:
index.html
default.jsp
的文件名和顺序
注:该配置项位于文件末端的地方
另:根据相关文档,在此处配置即可实现修改默认网页文件设定,但我试过好象没有成功,不知为何。
3-4 新增图标文件
在Forms9i中,图标文件应为GIF文件,默认情况下,存放于固定的目录中。
该目录为:%Oracle_Home%CGENF61AdminIconsPc
3-5 修改OC4J默认的图标文件后缀名和存放目录
打开%Oracle_Home%Forms90JavaFormsRegistryRegistry.Dat文件
修改其中:
#
# The Application Level icon files are relative to the DOCUMENTBASE
# example: icons/
# or an absolute URL.
# example: http://www.forms.net/~luser/d2k_project/
#
default.icons.iconpath=
default.icons.iconextension=GIF
注:该配置项位于文件末端
3-6 配置虚拟路径
在实现用户需求过程中,经常需要将服务器的文档显示给用户或提供用户下载。
此时:可能会用到Web.Show_Document('http://Oracle_Home:8888/PathName/xxxx.xls','_Blank');,
此时PathName不指服务器端的实际路径,而是OC4J的虚拟路径。
打开%Oracle_Home%J2eeOracleDSApplication-DeploymentsDefaultsDefaultWebAppOrion-Web.xml
新增或修改其中:
即可实现修改或设定OC4J虚拟路径
注:也可以打开%Oracle_Home%J2eeOracleDSApplication-DeploymentsFormsForms90WebOrion-Web.xml,
区别在于在此处设定的文件链接则为:http://Oracle_Home:8888/forms/xxxx.xls
3-7 报表文件存放目录
OracleDeveloper的报表,均需生成RDF文件存放于服务器端,
默认的目录在%Oracle_Home%
eportsinteg目录下,
容易与系统文件产生混淆,修改REPORT目录的方法如下:
打开%Oracle_Home%
eportsconf
wservlet.properties
修改 Reports_path=选项<若没有,则可追加。该选项也可在系统注册表中追加>
3-8 IE窗口中上方的ORACLE标识去除
设置%Oracle_Home%Forms90ServerFormsWeb.cfg文件中,Logo=False
3-9 修改IE窗口中的Applet的窗口大小
设置%Oracle_Home%Forms90ServerFormsWeb.cfg文件中,Width=800 / Height=600
3-10 修改默认的FORMS文件
设置%Oracle_Home%Forms90ServerFormsWeb.cfg文件中,Forms=xxx.fmx
3-11 修改默认的数据库连接串
设置%Oracle_Home%Forms90ServerFormsWeb.cfg文件中,User=xxx/yyy@DBServer
3-12 将forms9i的程序置于JAVA窗口运行<一般情况下,置于IE窗口的SERLET内运行>
设置%Oracle_Home%Forms90ServerFormsWeb.cfg文件中,
separateFrame=False<一般情况下,separateFrame=True>
3-13 修改Forms9i应用程序背景图<原先的背景图为Oracle Forms Sevices>
设置%Oracle_Home%Forms90ServerFormsWeb.cfg文件中,BackGround=VirualPath/xxx.gif
注:VirualPath是在6设定的虚拟路径
4 文本文档(txt)的操作:
4-1 语法
4-1-1 获取句柄,并打开文件
L_MyFile:= Text_IO.Fopen(FileName, L_Mode);
其中,L_Mode为“W”时,写入数据;L_Mode为“R”时,读取数据。
4-1-2 写入数据
Text_IO.PUTF(MYFILE,'xxx');
4-1-3 读出数据
Text_IO.GetLine(MYFILE,L_Str);
4-1-4 前进一行
TEXT_IO.NEW_LINE;
4-1-5 关闭文件
Text_IO.FClose
注:在写入文件过程中,换行符是Chr(10)
4-2 实例
4-2-1 写入Text文档
Declare
L_MyFile Text_IO.File_Type;
Filename Varchar2(100):='c:TestText.Txt';
Begin
--创建文件
Myfile := Text_IO.Fopen(Filename, 'W');
--写入字符
Text_IO.PUTF(Myfile, '111Test');
Text_IO.PUTF(Myfile, CHR(10));
Text_IO.PUTF(Myfile, '222Test');
Text_IO.PUTF(Myfile, CHR(10));
--关闭文件
Text_IO.Fclose(Myfile);
End;
4-2-2 读取文档
DECLARE
L_MyFile text_io.file_type;
Filename Varchar2(100):='c:TestText.Txt' ;
L_Str VarChar2(500);
BEGIN
--打开文件
L_MyFile:=Text_IO.Fopen(filename,'R');
--循环读出文件内容
Loop
<>
Begin
--读取一行文字
Text_IO.Get_Line(L_MyFile,L_Str);
--显示读取的内容
Message(L_Str);
--前进一行
TEXT_IO.NEW_LINE;
--文件读取完毕响应
Exception
When No_Data_Found Then
Exit;
END StartReadText;
end loop;
--关闭文件
Text_io.Fclose(L_MyFile);
END;
5 自动保持网卡激活:
5-1 说明:对于稍新的网卡,w2k下有一个缺省设置:
当网线断开时,网站的IP自动取消。这可能会导致某些运行TCP/IP的 service 出错。
本文介绍: 即使没有插上网线,也让网卡保持IP地址。
5-2 操作:参数:新建双字节字(DWord) DisableDHCPMediaSense (注意大小写),
设为十六进制1 (路径:HEY_LOCAL_MACHINESYSTEMCURRENTCONTROLSETSERVICESTCPIPPARAMENTERS)
如果不进行以上配置,网线断开时,在Dos下使用 route print,不能看到以下多行:(只能看到两行)
6 正确删除ORACLE
6-1 经常发现运行setup.exe的方法卸载并不可行。经常提示一大堆这样那样的错误。
6-2 自动+手工删除的办法:
6-2-1 控制面板/管理工具/服务上停掉所有关于oracle的service.
6-2-2 删除c:/oracle及c:/programfiles/oracle
6-2-3 运行regedit, 将HKEY-LOCAL-MACHINE/SOFTWARE/ 及
HKEY-LOCAL-SYSTEM/CurrentControlSet/Services/关于oracle的内容全部删除
6-2-4 重启电脑。
7 plsql中单引号“'”的问题
7-1 单引号的在使用中是字符串的分割符号,如果需要直接引用单引号就需要用两种方式:
7-1-1 第一种常用方式:在ORACLE中有这样的申明:两个单引号连续使用表示对单个单引号的文本引用;
例如:select 'I''m chinese' from dual
结果是:I'm chinese
7-1-2 另一种方式:使用ASCII码中的字符对应的数值,然后使用CHR()ASCII字符转换函数进行引用;
例如:select 'test:' || chr(38) || chr(39) from dual;
结果是:test:&'
在实际应用中可以使用:select ascii('a') from dual;
结果是:97
8 ORACLE中文日期格式和英文日期格式的问题解决方法(二种):
8-1 使用TO_DATE ('2002-jan-26', 'YYYY-mon-dd', 'NLS_DATE_LANGUAGE = American')
例如:
select * from emp
where hiredate
8-2 使用
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;
ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY'
改变当前的字符集和日期格式;
9 使用‘#’和copy()来实现select语句的动态复合条件查询
9-1 思路:在数据块查询之前将"# =(或者like )'条件值'",然后使用COPY赋值给数据块中相应的数据项,
FORM将通过判断#号来进行条件的组合,并且将#号省略;
例如
copy('# ='||:BLK_QUERY.EMPNO,'BLK_EMP.EMPNO');
10 SQLPLUS小计
10-1 常用的SQLPLUS命令:
select * from tab;
--显示当前用户的所有对象;
select * from allusers;
--查询系统拥有的所有用户
create user test identified by test;
grant connect,resource to test;
drop user test;
--建立,授权,删除用户;
(a)append
--添加到行尾
(c)change
--替换或删除
(i)input
--添加一行
(l)ist
--列出缓冲区中的行
(r)un
--执行缓冲区中的行
@文件名(.sql)
--执行“文件名.sql”的脚本文件
@@文件名(.sql)
--在一个文件中执行另一个“文件名.sql”的脚本文件
save
--将缓冲区的数据存盘
get
--将文件中的命令调到缓冲区
start
--执行调入缓冲区中的命令
spool
spool 文件名
spool off
--假脱机文件(各种操作及执行结果存盘到磁盘文件上,默认文件扩展名为.lst)
set feedback off
--默认on,去除结尾的总计信息
set pagesize 50
--默认14,一次返回的记录数
set timing on
--默认off,显示执行时间
set sqlprompt "SQL> "
--设置默认提示符,默认值就是"SQL> "
set autocommit ON
--设置是否自动提交,默认为OFF
set pause on
--默认为OFF,设置暂停,会使屏幕显示停止,等待按下ENTER键,再显示下一页
define a = '''20000101 12:01:01'''
--定义局部变量,如果想用一个类似在各种显示中所包括的回车那样的常量,
例如:
SQL> select &a from dual;
SQL> select '20000101 12:01:01' from dual
--
any()
--把一个值与表中的每一个值进行比较,有一个关系成立,返回true
例如:
SQL> Select * from emp Where sal = any(select sal from emp where deptno = 20)
--
UNION
--集合的并,不包含重复行
Union all
--集合的并,包含重复行
Intersect
--集合的交,不包含重复行
minus
--集合的差,不包含重复行
11 DBA小计
11-1 建立SYSTEM表空间的目的是尽量将目的相同的表存放在一起,以提高使用效率,只应存放数据字典
11-2 数据库<-表空间<-数据文件<-ORACLE块
11-3 一个段segment只能属于一个表空间,但可以属于多个数据文件
11-4 一个区extent只能属于一个数据文件,即区间(extent)不能跨越数据文件
11-5 单独一个事务不能跨越多个回滚段
11-6 索引表不含ROWID值
11-7 拥有不同大小的回滚段没有任何益处
11-8 一个事务即使不被提交,也会被写入到重做日志中。
12 EXP/IMP小计
12-1 备份一个或多个用户
D:>exp scott/tiger file=导出文件
D:>exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件
12-2备份一个或多个表
D:>exp 用户/密码 tables=表
D:>exp 用户/密码 tables=(表1,…,表2)
D:>exp system/manager tables=(用户.表)
D:>exp system/manager tables=(用户1.表1,用户2.表2)
12-3 导入指定表
D:>exp scott/tiger file=a.dmp
D:>imp test/test fromuser=scott tables=emp file=a.dmp
D:>imp test/test tables=dept file=a.dmp
12-4 记录LOG信息
D:>imp80 username/password@alias file=impfile.dmp log=mylog.log
D:>exp80 username/password@alias file=expfile.dmp log=mylog.log
运行后,mylog.log里记录着所有的LOG信息
12-5 说明:
--如果导出用户没有DBA权限,则导入用户可以不用指定fromuser、touser参数
--如果导出用户拥有DBA权限,则导入用户也必须拥有DBA权限
13 对CLOB对象的全文检索
13-1 如果使用LIKE关键词将发生错误;
13-2 应使用如下方法:
SQL> create table a(a clob);
SQL> insert into a values('1234');
SQL> insert into a values('5648');
SQL> SELECT * FROM A WHERE dbms_lob.instr(a.a,'12',1,1)>0;
1234
SQL> SELECT * FROM A WHERE dbms_lob.instr(a.a,'5',1,1)>0;
5648
14 对当前用户下的各种对象的查看
14-1 表:
select * from cat;
select * from tab;
select table_name from user_tables;
14-2 视图:
select text from user_views where view_name=upper('&view_name');
14-3 索引:
select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;
14-4 触发器:
select trigger_name,trigger_type,table_owner,table_name,status from user_triggers;
14-5 快照:
select owner,name,master,table_name,last_refresh,next from user_snapshots order by owner,next;
14-6 同义词:
select * from syn;
14-7 序列:
select * from seq;
14-8 数据库链路:
select * from user_db_links;
14-9 约束限制:
select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints;
14-10 本用户读取其他用户对象的权限:
select * from user_tab_privs;
14-11 本用户所拥有的系统权限:
select * from user_sys_privs;
14-12 用户:
select * from all_users order by user_id;
14-13 表空间剩余自由空间情况:
select tablespace_name,sum(bytes) 总字节数,max(bytes),count(*) from dba_free_space group by tablespace_name;
14-14 数据字典:
select table_name from dict order by table_name;
14-15锁及资源信息:
select * from v$lock;不包括DDL锁
14-16 数据库字符集:
select name,value$ from props$ where name='NLS_CHARACTERSET';
14-17 inin.ora参数:
select name,value from v$parameter order by name;
14-18 SQL共享池:
select sql_text from v$sqlarea;
14-19 数据库:
select * from v$database
14-20 控制文件:
select * from V$controlfile;
14-21 重做日志文件信息:
select * from V$logfile;
14-22 来自控制文件中的日志文件信息:
select * from V$log;
14-23 来自控制文件中的数据文件信息:
select * from V$datafile;
14-24 NLS参数当前值:
select * from V$nls_parameters;
14-25 ORACLE版本信息:
select * from v$version;
14-26 描述后台进程:
select * from v$bgprocess;
14-27 查看版本信息:
select * from product_component_version;
15 使用SELECT 的for update子句在查询时给记录加锁
--创建实验表1
create table a(a number);
insert into a values(1);
commit;
select * from a for update;
--或
select * from a for update of a.a;(a表的a列)
--新打开一个SQL*Plus窗口
conn test/test(test用户上的第二个会话)
delete from a;
--此时,系统停顿状态,等待解锁,
--只要在第一个窗口发出roll;或commit;命令,即可解除锁定状态
16 SELECT中连接的问题,JOIN的使用;
16-1 交叉连接(笛卡儿积)
SELECT * FROM TABLE1,TABLE2;
--结果返回包含TABLE1,TABLE2的所有可能组合
16-2 等值连接(使用WHERE子句)
SELECT O.Item,O.PrintNo,A.Yds as Yds FROM Proll O,Proll_use2001 A ;
WHERE O.Item=A.Item
--结果返回第二张表中的包含第一张表中的数据,相当于交集
16-3
17 form path路径的设置,目的是让oracle develop认到项目的路径,
使项目的诸如附加的子程序库会自动被oracel develop认到
17-1 方法:修改注册表中"HKEY_LOCAL_MACHINESOFTWAREORACLEHOME1"中追加
18 修改ORACEL9i的启动参数
18-1 与8i不同9i默认是从spfile.ora文件启动,而8i是从pfile文件启动,
8i修改参数后必须重新启动数据库后才能生效,9i引入spfile,它是一个二进制文件,
不能直接进行修改,但是可以使用ALTER SYSTEM或ALTER SESSION来动态修改参数,
并且所有更改可以立即生效。
18-2 spfile 是一个二进制文件,可以使用RMAN进行备份,第一次数据库启动需要用
PFILE来创建SPFILE,WINNT缺省目录在${oracle_home}datebase下,init${ORACELSID}.ora在
A${oracle_home}admindb_nampfile下,oracle数据启动是从spfile${oracle_sid}.ora->
spfile.ora->init${oraclesid}.ora的顺序来查找启动参数文件。
18-3
create spfile from pfile 命令建立spfile文件;
startup pfile='e:oracleadmineyglenpfileint.ora' 使用pfile文件启动;
startup 使用spfile文件启动;
18-4 可以在pfile中设置spfile的文件路径更改:spfile='e:oraclespfiletest.ora'
18-5 alter system set log_archive_start=false scope=spfile 该命令就可以直接修改spfile
18-6 scope的三个可选参数:
MEMORY:改变当前实例
spfile:改变spfile
both:改变实例和spfile
18-7 可以在shutdown immediate后修改SPFILE文件
18-8 show parameter spfile命令来判断spfile文件是否被使用
19 在ORACLE中的约束条件中增加对字段的约束,如主键,唯一性,外键等结合客户端的更新检查和错误控制,
可以达到在远程视图中对数据检查的控制的目的。
20 删除表中存在的重复记录,从重复记录表中创建一个唯一性的新表
20-1 删除重复记录
delete from test where rowid!=(
select max(rowid) from test b
where test.id=b.id)
21-2 唯一性的新表
create table miyu_new as
select distinct id,title,text from miyu;
21 CREATE SEQUENCE 的用法
21-1 CREATE SEQUENCE DDL语句不能使用在where或pl/sql的过程子句中
21-2 伪列NEXTVAL,CURRVAL和CREATE SEQUENCE一起使用,但是CURRVAL必须是至少使用过一次NEXTVAL后才能使用
22 ROWNUM 的用法注意
22-1 一般来说rownum不能用>或=号来写条件(只用<号是可以的)
/*错误*/
select * from (select * from fesco.ssk order by ssbh ) where rownum<200 and rownum>=100;
/*正确*/
select * from (select rownum rownum1 ,a.* from fesco.ssk a order by ssbh ) where rownum1<200 and rownum1>=100;
22-2 使用rownum进行类似排序后取前3的操作
/*错误,这样的操作不一定是得到排序后的前N个记录,因为rownum在排序之前赋值给每行*/
select sal form emp where rownum<=3 order by sal
/*正确*/
返回工资最少的前3名:
select sal from (select sal from emp order by sal) where rownum<=3;
23 动态SQL的使用
23-1 使用“EXECUTE IMMEDIATE”语句引用非查询语句(DML,DDL)
/*实例1,DDL语句*/
EXECUTE IMMEDIATE
'CREATE TABLE testtable (col1 varchr(10))';
/*实例2,匿名PL/SQL语句块*/
v_PLSQLBLOCK :=
'BEGIN
FOR v_Rec IN (SELECT * FROM execute_table) LOOP
DBMS_OUTPUT.PUT_LINE(v_Rec.col1);
END LOOP;
END;';
EXECUTE IMMEDIATE v_PLSQLBLOCK;