转:oracle笔记

时间:2021-09-13 20:55:47

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%\J2ee\Home\Config\Http-Web-Site.Xml文件
修改其中:中
“8888:设定项(OC4J默认的端口号是8888)

3-2 修改OC4J默认网页文件
在%Oracle_Home%\J2ee\Home\Default-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%\J2ee\Home\Config\global-web-application.xml文件
修改其中:      
 
    index.html
    default.jsp
 
的文件名和顺序
注:该配置项位于文件末端的地方
另:根据相关文档,在此处配置即可实现修改默认网页文件设定,但我试过好象没有成功,不知为何。

3-4  新增图标文件
在Forms9i中,图标文件应为GIF文件,默认情况下,存放于固定的目录中。
该目录为:%Oracle_Home%\CGENF61\Admin\Icons\Pc

3-5  修改OC4J默认的图标文件后缀名和存放目录
打开%Oracle_Home%\Forms90\Java\Forms\Registry\Registry.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%\J2ee\OracleDS\Application-Deployments\Defaults\DefaultWebApp\Orion-Web.xml
新增或修改其中:
即可实现修改或设定OC4J虚拟路径
注:也可以打开%Oracle_Home%\J2ee\OracleDS\Application-Deployments\Forms\Forms90Web\Orion-Web.xml,
区别在于在此处设定的文件链接则为:http://Oracle_Home:8888/forms/xxxx.xls

3-7  报表文件存放目录
OracleDeveloper的报表,均需生成RDF文件存放于服务器端,
默认的目录在%Oracle_Home%\reports\integ目录下,
容易与系统文件产生混淆,修改REPORT目录的方法如下:
打开%Oracle_Home%\reports\conf\rwservlet.properties
修改 Reports_path=选项<若没有,则可追加。该选项也可在系统注册表中追加>

3-8  IE窗口中上方的ORACLE标识去除
设置%Oracle_Home%\Forms90\Server\FormsWeb.cfg文件中,Logo=False

3-9  修改IE窗口中的Applet的窗口大小
设置%Oracle_Home%\Forms90\Server\FormsWeb.cfg文件中,Width=800 / Height=600

3-10 修改默认的FORMS文件
设置%Oracle_Home%\Forms90\Server\FormsWeb.cfg文件中,Forms=xxx.fmx

3-11 修改默认的数据库连接串
设置%Oracle_Home%\Forms90\Server\FormsWeb.cfg文件中,User=xxx/yyy@DBServer

3-12 将forms9i的程序置于JAVA窗口运行<一般情况下,置于IE窗口的SERLET内运行>
设置%Oracle_Home%\Forms90\Server\FormsWeb.cfg文件中,
separateFrame=False<一般情况下,separateFrame=True>

3-13 修改Forms9i应用程序背景图<原先的背景图为Oracle Forms Sevices>
设置%Oracle_Home%\Forms90\Server\FormsWeb.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_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\TCPIP\PARAMENTERS)
如果不进行以上配置,网线断开时,在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_MACHINE\SOFTWARE\ORACLE\HOME1"中追加

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}\admin\db_nam\pfile\下,oracle数据启动是从spfile${oracle_sid}.ora->
spfile.ora->init${oraclesid}.ora的顺序来查找启动参数文件。

18-3
create spfile from pfile 命令建立spfile文件;

startup pfile='e:\oracle\admin\eyglen\pfile\int.ora' 使用pfile文件启动;

startup 使用spfile文件启动;

18-4 可以在pfile中设置spfile的文件路径更改:spfile='e:\oracle\spfiletest.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;