oracle数据库开发的一些经验积累

1 、不安装Oracle客户连接Oracle 8的方法

    请将以下文件拷贝到运行文件所在目录 

一、ODBC动态库 :

    ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc32.dll odbc32gt.dll odbccp32.dll odbccr32.dll odbcint.dll 

二、建立EXTRA子目录,将MSVCRT.DLL文件拷贝到该子目录下

    EXTRA\MSVCRT.DLL 

三、ORACLE动态库及配置文件 

    Tnsnames.ora CORE35O.DLL NASNSNT.DLL NAUNTSNT.DLL NCRNT.DLL Nlnt.dll NLSRTL32.DLL Nnfdnt.dll 

    NNFNNT.DLL NSNT.DLL NTNT.DLL NTTNT.DLL CIW32.DLL Ora73.dll OTRACE73.DLL Sqlnet.ora Sqltnsnt.dll CORE35.DLL 

四、PB动态库 

    pbvm70.dll pbdwe70.dll Pbo7370.dll PBO8470.DLL pbodb70.dll libjcc.dll 
    
    Oracle的客户端不安装让pb连上,我记得以前有帖子的,你可以搜索一下。具体步骤。

    (
1 ).先在某机器上安装好客户端(最好安装在c盘);( 2 ).复制此客户端oracle目录下的所有文件作为独立的oracle安装文件;

    (
3 ).搜索注册表,找到 HKey_Local_machine oftware\oracle,把此项目及分支全部导出。

    (
4 ).打包好你的pb程序,并独立打包好oracle客户端和注册表导出文件。

    (
5 ).到干净的客户端,解开两个包,导入注册表文件,然后加入路径支持:  path =% path % ;"c:\Ora817\bin"

    这样处理,应该没有问题,因为我就是这样快速处理了几十个机器。
    
    若不想搞注册表,你可以在程序中自己写注册表,构成Oracle客户端必要的注册表支持,至于路径,手工添加应该不难。
    
    至于Oracle客户端那些文件不需要,这个不好说,你可以把那些bin目录下的所有exe删除,Oracle Document删除(7x兆)
    
    至于定义Oracle服务,找到 Ora817\net80\admin\TnsName.ora,参照格式,程序中生成一个也不麻烦。

======================================================= 2 、在ORACLE中返回游标结果集

    你需要写到一个包中:
create   or   replace  package pag_cs_power  as

        type c_Type 
is  ref  cursor ;   FUNCTION  FUN_CS_GETDICTLIST(  v_DictIndex  in    varchar2 return  c_Type;

    
end  pag_cs_power;

函数代码:

    
FUNCTION  FUN_CS_GETDICTLIST(  v_DictIndex  in    varchar2 return  c_Type      as         c_cursor            c_Type;

    
begin     open  c_cursor  for        select  DICTID,DICTNAME  FROM  SYS_DICT  WHERE  DICTINDEX  =  v_DictIndex;   

    
return  c_cursor; end  FUN_CS_GETDICTLIST;

3 、P4机器安装ORACLE

    (
1 )、将ORACLE安装软件拷贝到硬盘。 

    (
2 )、将  硬盘目录文件 tage\Components\oracle.swd.jre\ 1.1 . 7.30 / 1  \DataFiles\EXPanded\jre\win32\bin ymcjit.dll的文件改名为

        symcjit.old 

    (
3 ).再运行SETUP.exe  文件进行安装。 

4 、单引号的插入问题

    SQL
>   insert   into  a  values ( ' i '' m good ' );            -- 两个''可以表示一个'
    
    SQL
>   insert   into  a  values ( ' i ' chr( 39 ) ' m good ' );          -- chr(39)代表字符'
    
    SQL
>   insert   into  a  values ( ' a '' & '' b ' );      

5 、全数据库的导入与导出

    
exp  username / passWord  full = file = yourdata.dmp grants = y rows = yimp username / password  full = y ignore = file = yourdata.dmp grants = y

6 、exp与imp的具体用法

    
exp  username / password @mzbs_61   full = file = yourdata.dmp grants = y rows = yimp username / password  full = y ignore = file = yourdata.dmp grants = y

    
exp  mzbs / mzbs @mzbs_61   file   =  c:\zzzzzzz.dmp grants  =  y rows  =  y imp mzbs / mzbs @mzbs_61   file   =  c:\zzzzzzz.dmp grants  =  y ignore = y   FULL = Y

(
1 )

    exp参数:要害字   说明(默认)  

    USERID   用户名
/ 口令

    
FULL    导出整个文件 

    (N)BUFFER   数据缓冲区的大小

    OWNER   所有者用户名列表FILE   输出文件 

    (EXPDAT.DMP)TABLES   表名列表

    COMPRESS  导入一个范围 (Y)

    RECORDLENGTH  IO 记录的长度

    GRANTS   导出权限 (Y)

    INCTYPE   增量导出类型

    INDEXES   导出索引 (Y)

    RECORD   跟踪增量导出 (Y)

    ROWS   导出数据行 (Y)

    PARFILE   参数文件名

    CONSTRAINTS  导出限制 (Y)

    CONSISTENT  交叉表一致性

    
LOG    屏幕输出的日志文件

    
STATISTICS   分析对象 

    (ESTIMATE)DIRECT   直接路径 

    (N)TRIGGERS  导出触发器 

    (Y)FEEDBACK  显示每 x 行 (
0 ) 的进度 

    FILESIZE  各转储文件的最大尺寸

    QUERY   选定导出表子集的子句


    imp参数:要害字   说明(默认)   

    USERID   用户名
/ 口令

    
FULL    导入整个文件 

    (N)BUFFER   数据缓冲区大小

    FROMUSER  所有人用户名列表

    
FILE    输入文件 
    
    (EXPDAT.DMP)TOUSER   用户名列表

    SHOW   只列出文件内容 

    (N)TABLES   表名列表

    IGNORE   忽略创建错误 

    (N)RECORDLENGTH  IO 记录的长度

    GRANTS   导入权限 (Y)

    INCTYPE   增量导入类型

    INDEXES   导入索引 (Y)

    
COMMIT    提交数组插入 

    (N)ROWS   导入数据行 

    (Y)PARFILE   参数文件名

    
LOG    屏幕输出的日志文件

    CONSTRAINTS  导入限制 

    (Y)DESTROY   覆盖表空间数据文件 

    (N)INDEXFILE  将表
/ 索引信息写入指定的文件

    SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 

    (N)ANALYZE   执行转储文件中的 ANALYZE 语句 

    (Y)FEEDBACK  显示每 x 行 (
0 ) 的进度

    TOID_NOVALIDATE  跳过指定类型 id 的校验

    FILESIZE  各转储文件的最大尺寸

    RECALCULATE_STATISTICS 重新计算统计值 (N)

(
2 )

一、建立一个expdata.sql文件

    USERID
= RMTAFIS / 3        这里写你的用户名和密码BUFFER = 32768OWNER = RMTAFIS         

    这里写导出的用户FILE
= E:\ Exp \RMTAFIS.DMP      导出的文件,可以是相对路径ROWs = YGRANTS = YCOMPRESS = YCONSISTENT = Y

二、建立一个expdata.batexp parfile
= expdata.sql假如是805exp80 parfile = expdata.sql双击expdata.bat就导出数据了

7 、假如在like的变量中,是以‘ % ’开头的话,是不会使用index的。

    反之,不是以‘
% ‘开头,而又有相应的index,是会使用index的。具体可以用plain plan来看一下。

8 、复制空表结构    create   table  new_tableas  select   *   from  old_table  where   1 = 2 ;   复制表(含记录)   

    
create   table  new_tableas  select   *   from  old_table ;

9 、把一个用户下的表导入到另一个用户下,但需要改名

    先用exp导出所有的表;用imp将导出的表导入到新用户;在新用户下,

    执行  
select   ' RENAME TABLE  ' tname '  TO NEW_ ' tname ' ; '       from  tab    where  taBType = ' TABLE ' ;

    将上面的查询结果保存到一个sql文件中,处理后执行就可以了。

10 、审计步骤

     修改参数文件init.ora,参数audit_trail值为true; 重新启动数据库; 打开审计audit session; (audit session 
by  username)

     执行登录操作; 察看审计结果:   
select   *   from  dba_audit_session;    select   *   from  sys.aud$;   

    
select   *   from  dba_audit_trail;    select   *   from  dba_audit_exists; 关于审计:

       为了使oracle8i的审计功能可用,必须在数据库参数文件中修改audit_trail初始参数,

    而这个修改并不支配oracle8i把生成的审计记录记入审计痕迹中,由于状态,特权和模式对象已被修改,

    因而审计的默认值不可用,其参数应设置为none.下面列出了audit_trail 可用的参数

    db_使数据库审计和全部直属审计记录到数据库审计的痕迹中os_是数据库审计依据直属审计记入到操作系统的审计很集中none_不可用

11 、BFILE的用法

    (
1 )、 create   or   replace  Directory BFILE_TEST  as   ' /oracle/oradata/bfiles '

    (
2 )、 grant   read   on  directory BFILE_TEST  to  SCOTT; 

    (
3 )、host ls  - / oracle / oradata / bfiles / 1 .TXT 

    (
4 )、connect SCOTT / TIGER  create   table  BFILES (ID  number TEXT  bfile ); 

    (
5 )、 insert   into  BFILES  values  (  1 , bfilename (  ' BFILE_TEST ' ' 1.TXT '  ) );

12 、如何在windows 2000下将Oracle完全卸载?  
    
    一、系统环境: 

            (
1 )、操作系统:Windows  2000  Server,机器内存128M

            (
2 )、数据库: Oracle 8i R2 ( 8.1 . 6 for  NT 企业版

            (
3 )、安装路径:D:\ORACLE

二、卸载步骤:

             (
1 )、开始->设置->控制面板->治理工具->服务   停止所有Oracle服务。

            (
2 )、开始->程序->Oracle  -  OraHome81->Oracle Installation ProdUCts->Universal Installer   卸装所有Oracle产品

            (
3 )、运行regedit,选择HKEY_LOCAL_MACHINE OFTWARE\ORACLE,按del键删除这个入口。

            (
4 )、运行regedit,选择HKEY_LOCAL_MACHINE YSTEM\CurrentControlSet ervices,滚动这个列表,删除所有Oracle入口

            (
5 )、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标

            (
6 )、重新启动计算机,重起后才能完全删除Oracle所在目录

            (
7 )、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录,

              并从Windows 2000目录(一般为C:\WINNT)下删除以下文件ORACLE.INI、oradim80.INI

            (
8 )、WIN.INI文件中若有 [ ORACLE ] 的标记段,删除该段

13 、如何使用SQLPLUS和SVRMGRL运行脚本

    (
1 )、用sqlplus调用:
    
    c: cript.txt的内容startup;
    
    命令行:sqlplus internal
/ oracle  @c : cript.txt
    
    (
2 )、用svrmgrl调用:c: cript.txt的内容
    
    connect internal
/ oracle;startup;
    
    命令行:svrmgrl 
@c : cript.txt

14 、ORACLE的临时表

CREATE  GLOBAL  TEMPORARY   TABLE  TABLENAME (   COL1   VARCHAR2 ( 10 ),   COL2   NUMBER

ON   COMMIT  PRESERVE( DELETE ) ROWS ;这种临时表不占用表空间,

而且不同的SESSION之间互相看不到对方的数据在会话结束后表中的数据自动清空,假如选了DELETE ROWS,

则在提交的时候即清空数据,PRESERVE则一直到会话结束

-- --------------

在Oracle8i中,可以创建以下两种临时表:

    (
1 )会话特有的临时表    CREATE  GLOBAL  TEMPORARY   < TABLE_NAME >  ( < column  specification > )    ON   COMMIT  PRESERVE ROWS;

    (
2 )事务特有的临时表    CREATE  GLOBAL  TEMPORARY   < TABLE_NAME >  ( < column  specification > )    ON   COMMIT   DELETE  ROWS;  

    
CREATE  GLOBAL  TEMPORARY   TABLE  MyTempTable所建的临时表虽然是存在的,

    但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧,我把下面两句话再贴一下:

    
ON   COMMIT   DELETE  ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)

    
ON   COMMIT  PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。

    冲突的问题更本不用考虑.

    临时表只是保存当前会话(session)用到的数据,数据只在事务或会话期间存在。

    通过CREATE GLOBAL 
TEMPORARY  TABLE命令创建一个临时表,对于事务类型的临时表,

    数据只是在事务期间存在,对于会话类型的临时表,数据在会话期间存在。

    会话的数据对于当前会话私有。每个会话只能看到并修改自己的数据。DML锁不会加到临时表的数据上。

    下面的语句控制行的存在性。 
    
    ● 
ON   COMMIT   DELETE  ROWS 表名行只是在事务期间可见

    ● 
ON   COMMIT  PRESERVE ROWS 表名行在整个会话期间可见

    可以对临时表创建索引,视图,出发器,可以用export和import工具导入导出表的定义,但是不能导出数据。

    表的定义对所有的会话可见。

    例如:
CREATE  GLOBAL  TEMPORARY   TABLE  TEMP_TAB1
        
        (table_name 
VARCHAR2 ( 20 ),primary_key  VARCHAR2 ( 100 ),field  VARCHAR2 ( 1000 )) ON   COMMIT  PRESERVE ROWS;

        
CREATE  GLOBAL  TEMPORARY   TABLE  TEMP_TAB2

        (table_name 
VARCHAR2 ( 20 ),primary_key  VARCHAR2 ( 100 ),field  VARCHAR2 ( 1000 )) ON   COMMIT   DELETE  ROWS;

 
15 、如何使用OEM先启数据库服务,再启oracle manager服务。否则重建档案资料库假如还不行就把ORACLEHOME\NETWORK qlnet.ora

    文件的内容     sqlnet.authentication_services
= (NTS)     改成sqlnet.authentication_services = (NONE)

    登录 sysman
/ oem_temp

16 、TNS:没有监听器的问题。

    (
1 )查一下监听服务是否启动,   假如没有启动,则运行lsnrctrl start。
    
    (
2 )查看一下 LISTENER.ORA内监听的服务器名、服务器IP、数据库名是否正确。

    (
3 )查看一下 TNSNAMES.ORA内服务器名、服务器IP、数据库名是否正确。

17 、Linux、UNIX下自动启动ORACLE服务

    (
1 )

     !
/ bin / sh 

    # chkconfig: 
345   51   49  # description: starts the oracle dabase deamons # 

    ORA_HOME
=/ u01 / app / oracle / product / 8.1 . 7  ORA_OWNER = oracle  case  "$ 1 in   ' start ' ) echo  - n "Starting Oracle8i: " 

    su 
-  $ORA_OWNER  - c $ORA_HOME / bin / dbstart touch  / var / lock / subsys / oracle8i echo ;; 

    
' stop '

    echo 
- n "Shutting down Oracle8i: " su  -  $ORA_OWNER  - c $ORA_HOME / bin / dbshut rm  - / var / lock / subsys / oracle8i echo ;; 

    
' restart '

    echo 
- n "Restarting Oracle8i: " $ 0  stop $ 0  start echo ;; 

    
* ) echo "Usage: oracle8i { start stop restart }"  exit   1  

    esac 
exit   0  

    我仿照su 
-  $ORA_OWNER  - c $ORA_HOME / bin / dbshut 的形式添加su  -  $ORA_OWNER  - c $ORA_HOME / bin / lsnrctl start

    但是在系统启动的时候listener启动不了

(
2 )

    
/ etc / rc.local改成如下就可以了touch  / var / lock / subsys / local#echo  2147483648   >  

    
/ proc / sys / kernel / shmmaxecho  - n "Starting Oracle  Database :"date  + " % % % a"su  -  oracle  - c "lsnrctl start"#su  -  oracle  - c "sqlplus 

    
/ nolog  @startmaster .sql"echo  - n "Oracle  Database  Started:"date  + " % % % a"

    
-- 第一个#是改共享内存大小的第二个#是启动数据库的。

(
3 )FTP: // ftp.rpmfind.net / linux / rhcontrib / 7.1 / i386 / oraclerun9i - 1.0 - 1 .i386.rpm

    下载这个软件包并安装。

    里面每个文件都有一些要修改的地方。配置完成之后,就可以在系统服务配置中找到它,选中它就可能以自启动了。

18 、回滚段不够的处理方法

    (
1 )、先使回滚段脱机一个,假如不好用,则再脱机一个。直至好用。   

    
ALTER   rollback  segment rollbackname offline;

    (
2 )、增加回滚段数据文件的大小    alter   database  datafile  ' datafile '  resize 200M;

19 、WINNT向WIN2000移植

    不用EXP和IMP的

    停掉数据库的服务后,可以做一个数据库的全备份。

    在WIN2000上建一个同名的数据库,随便建,越小越好,可以缩短时间。把WINNT下的数据库备份恢复到WIN2000的数据库上就可以了。

    但建库的目录必须一样。(也可以不一样,但需要更改数据文件的连接)

    我曾多次为用户这样移植数据,万无一失的。注重:因为数据很重要,所以建议你先EXP备份一下。这是我们的习惯。

20 、ORACLE SQL PLUS Worksheet乱码问题。

    dbappscfg.properties,修改该文件即可解决上述问题。$ORACLE_HOME ysman\config目录下,

    修改# SQLPLUS_NLS_LANG
= AMERICAN_AMERICA.WE8ISO8859P1为SQLPLUS_NLS_LANG = AMERICAN_AMERICA.ZHS16GBK。
    
    对于Windows操作系统,还需要修改一项#SQLPLUS_SYSTEMROOT
= c:\\WINNT40为SQLPLUS_SYSTEMROOT = C:\\WINNT
    
    如操作系统的主目录在C盘的Winnt下
    
    对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。假如在Windows操作系统中不修改该项,

    在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:ORA
- 12560  TNS:protocol adapter error 

    或者 ORA
- 12545  Connect failed because target host  or  object does  not  exist 重新连接SQL PLUS Worksheet

21 、DROP掉名字是小写的表(用双引号括起来)。

    
drop   table  "tablename"     select   *   from  "tablename"

22 、日期的显示格式注重:SIMPLIFIED CHINESE(简体中文需要" "括起来)      别的国家不用" " 

    例如:ENGLISH 
select  to_char(sysdate, ' DAY ' , ' NLS_DATE_LANGUAGE= '' SIMPLIFIED CHINESE ''' from  dual;

23 、一个从ORACLE中读表信息的存储过程

    可以在vc下调用存储过程来实现例子:先修改init.ora例如:utl_file_dir
=/ usr    

    
// 路径为 oracle所在的盘: / usr此过程将用户TEMP的P1过程的代码保存到ORACLE安装盘下 / USR / TEXT .TXT中

    
create   or   replace   procedure  TESTis  file_handle utl_file.file_type;  STOR_TEXT  VARCHAR2 ( 4000 );  N  NUMBER ;I  NUMBER ; beginI: = 1 ;   

    
SELECT   MAX (LINE)  INTO  N  FROM  ALL_SOURCE  WHERE  OWNER = ' TEMP '   AND  NAME = ' P1 ' ;

    file_handle:
= utl_file.fopen( ' /usr ' , ' test.txt ' , ' a ' ); WHILE  I <= N LOOP    SELECT   TEXT    INTO  STOR_TEXT  FROM  ALL_SOURCE 

    
WHERE  OWNER = ' TEMP '   AND  NAME = ' P1 '   AND  LINE =  I;   I: = I + 1 ;   utl_file.put_line(file_handle,stor_text); END  LOOP;   

    utl_file.fclose(file_handle);
commit ; end  TEST; /

24 、关于修改ORACLE的列宽

    (
1 )、不论如何都要备份数据。

    (
2 )、假如没有数据,则可以修改宽度。比如NUMBER, CHAR VARCHAR2

    (
3 )、假如有数据,则可以增加宽度。比如NUMBER, CHAR VARCHAR2    注重:不可以减小宽度。

    (
4 )、语法: alter  talbe tablename modify columnname columntype  not   null ;

25 、如何查看用户的存储过程和函数

    
select  name, text   from  user_source  where  name =  Procedurename  and  type  =   ' PROCEDURE '   order   by  line;

26 、在批处理中自动启动ORACLE服务(win2000)

    编一个批处理文件net start OracleServiceSIDOracleServiceSID是ORACLE的实例名称

27 、对行加锁时,只对tb1加锁

    
select  tb1.r1  from  tb1, tb2   where  tb1.r2  =  tb2.r2  and  tb2.r1  =  xxx  for   update   of  tb1.r1 nowait

28 、得到列的信息

    
desc  tablenameselect cname  from  col  where  tname = ' TABLENAME ' ; select  column_name  from  user_tab_columns 

    
where  table_name = ' TABLENAME ' ;

    
select  column_name  from  ALL_tab_columns  where  table_name = ' TABLENAME ' ;

    
select  column_name  from  dba_tab_columns  where  table_name = ' TABLENAME ' ;

    
select  column_name  from  user_col_comments  where  table_name = ' TABLENAME ' ;    

    
select  column_name  from  all_col_comments  where  table_name = ' TABLENAME '

    
select  column_name  from  dba_col_comments  where  table_name = ' TABLENAME '

29 、使触发器无效(login_on)

    svrmgrlconnect internal
/ oraclealter  trigger  login_on disable;
    
    使触发器为无效alter 
trigger  yourtriggername disable
    
    假如是对于某一个表的所有的触发器:
alter   table  yourtablename disable  all  triggers

30 、如在SQLPLUS中何调用存储过程和函数。

    call只能调用存储过程后面加上括号就可以了    call 存储过程名();    

    
exec  procedurename;(可以不加())    调用函数用sql语句     select  函数名(参数)  from  dual;

31 、函数中假如调用DML语句就不可以调用SELECT语句

32 、REDO  LOG  BUFFER 什么时候写到REDO LOGFILE中    

    (
1 )、在COMMIT的时候    

    (
2 )、重做日志缓冲区1 / 3满的时候    

    (
3 )、重做日志缓冲区大于1M的时候    

    (
4 )、它写信息必须是在数据写进程前调用    

    (
5 )、一般CHECKPOINT在日志组切换的时候进行或者由初始化参数设定         在CHECKPOINT的时候需要调用数据写进程   

33 、ORACLE的http server 把原有的WEB server冲掉,如何解决?

    (
1 ).假如你原来的http server是用IIS等其他发布工具做的,那么可以在服务中停掉  oracle http server服务,并且改为手动启动。    

    (
2 ).假如原来的http server是用apache发布,则可以改变http.conf中的参数

34 、关于创建重建查看索引

    创建索引:
CREATE   INDEX  IND_NAME  ON  TABLE_NAME(COL1,COL2,dot.gif);
    
    重建索引:
ALTER   INDEX  IND_NAME REBUILD;
    
    查看索引:

    
SELECT   *   FROM  USER_INDEXES  WHERE  INDEX_NAME = ' IND_NAME ' ;

35 、ORACLE如何查杀用户的进程     一根据用户的应用程序和SQL语句,在DBA STUDIO找到用户的SESSION并断开其连接   

 二、      (
1 )、要杀掉一个session应先应知道其sid和serial#,假设你已经知道。   

        (
2 )、 select  paddr  from  v$session  where  sid = v_sid  and  serial# = v_serial#    select  spid  from  v$process  where  addr = paddr

        (以上语句所查出的);

           (
3 )、使用ALTER SYSTEM  KILL  SESSION  ' v_sid,v_serial# '  immediate; 试一试如不行转          

三、LINUX和UNIX下   转到操作系统下执行:
kill   - 9  spid (以上语句所查出的)     

36 、ORACLE中检查表是否被锁的语句

    
SELECT  A.OWNER,            A. OBJECT_NAME ,            B.XIDUSN,            B.XIDSLOT,            B.XIDSQN,            B.SESSION_ID,  

     B.ORACLE_USERNAME,            B.OS_USER_NAME,            B.PROCESS,            B.LOCKED_MODE,            C.MACHINE,           
    
    C.STATUS,            C.SERVER,            C.SID,            C.SERIAL#,            C.PROGRAM      
FROM  ALL_OBJECTS A,           

    V$LOCKED_OBJECT B,            SYS.GV_$SESSION C    
WHERE  ( A. OBJECT_ID   =  B. OBJECT_ID  )      

    
AND  (B.PROCESS  =  C.PROCESS )    ORDER   BY   1 , 2      

    杀掉:
    
    
alter  system  kill  session  ' sid, serial# '  

37 、ORACLE的登录问题,用户名和密码。

    可以直接输入:    internal
/ oracle @serivce_name   sys / change_on_install @serivce_name   

    system
/ manager @serivce_name   scott / tiger @serivce_name注重 :9i中没有internal / oracle

    假如选择典型安装则有 scott用户假如自定义可以不安装  scott用户假如是本机则可以省略
@serivce_name

    oem:(ORACLE ENTERPRISE MANAGER)sysman
/ oem_temp
    
38 、修改表的列名

    Oracle9i:
alter   table  xxx rename  column  xx  to  yy;

    Oracle8i 
&   lower  versionconnect sys / passed; update  col$  set  name = xx  where  obj# = 对象id  and  name  =  字段

    (一般不要这样用,会造成意想不到的结果)注:最好是删除再建立新的列

39 、把用户模式对象所在的表空间移到新的表空间

    (
1 ).  create  the new tablesapce

    (
2 ).  alter   user  test  default  tablespace test_data;

    (
3 ).  alter   user  test quota unlimited  on  test_data;

    (
4 ).  alter   table  the_table_name move tablespace test_data;    

    生成脚本:    
select   ' alter table ' tname '  move tablespace test_date; '       from  tab    where  tabtype = ' TABLE '

    (
5 ). rebuild the indexes;

40 、使用OEM备份或者EXP的步骤 WIN2000下:

    (
1 ). 控制面板―― > 治理工具――  > 计算机治理―― > 本地用户和组―― > 用户―― > 新建用户sys
    
        和sysman(sys和sysman 的帐号要和登陆数据库的帐号相同);
    
    (
2 ).控制面板―― > 治理工具――  > 本地安全策略―― > 本地策略―― > 用户权利指派―― > 作为批处理作业登陆―― > 添加sys

        和sysman两个帐号。

    (
3 ).使用Enterprise Manager配置辅助工具开始→程序→Oracle  -  OraHome81→Enterprise Manager→Configuration Assistanta、

        使用Configuration Assistant工具来创建一个新的资料档案库。
    
    (
4 ).控制面板―― > 治理工具――  >  服务,查看OracleOraHome81ManagementServer是否启动,假如没有启动,则手动启动该服务。

    (
5 ).以sysman / oem_temp( default )登陆DBA Studio(第二个选项:登陆到Oracle Management Server),立即修改密码为你刚才在

        NT下建的用户sysman的密码。

    (
6 ). 以sysman /   ***  (bluesky) 从开始→程序→Oracle  -  OraHome81→Console 登陆到 控制台。

        在 系统→首选项→首选身份证实(我的首选身份设置如下:) DEFAULT节点:name:sysmanDEFAULT数据库:name:sys

    (
7 ). 在搜索 / 添加结点后,以sysman /   ***  登陆到该结点,以sys /   ***   as  sysdba登陆数据库(也就是在首选身份设置的结果)。

    (
8 ). 在工具→备份治理→向导→预定义备份策略(自定义备份策略)→提交备份计划

    (
9 ).从开始→程序→Oracle  -  OraHome81→Console 登陆到 控制台,查看活动(历史记录)可以看到你的备份是否成功,

        假如不成功,可以点击备份看明细。(我第一次也没成功,后来我修改系统的临时目录

        C:\WINNT\
Temp →c:\ temp  ystmp,重新启动机器就ok了)

41 、如何修改INTERNAL的口令  以下是oracle8的8i你可以仿照来做

    (
1 )、进入DOS下
    
    (
2 )、默认internal密码文件在c:\orant\database下,是隐藏属性,文件名称与数据库实例名有关
    
      如默认ORACLE实例名为ORCL,则internal密码文件名为pwdorcl.ora
    
    (
3 )、建立新的internal密码文件,起个新名字为pwdora8.ora
    
      orapwd80 
file = pwdora8.ora password = B entries = 5       -- 注:password项一定要用大写,并且不要用单引号
    
    (
4 )、拷贝pwdora8.ora文件到c:\orant\database目录下
    
    (
5 )、运行regedit,修改口令文件指向
    
    (
6 )、找到HKEY_LOCAL_MACHINE OFTWARE\ORACLE项
    
      定位ORA_ORCL_PWFILE子项,改变其值为c:\orant\
database \pwdora8.ora
    
    (
7 )、关闭ORACLE数据库,重新启动
    
    (
8 )、进入svrmgr30服务程序,测试internal密码是否更改成功

42 、凭证检索失败的决绝方法。

    原因: 由于Oracle不能应用OS认证而导致凭证检索失败    解决办法:         

    (
1 ).打开network / admin下的sqlnet.ora         修改SQLNET.AUTHENTICATION _SERVICES = (NONE)。
        
    (
2 ).启动Net8 configuration assistant -- >选第三项本地网络服务名配置     -->删除dot.gif(删除原来的本地网络服务名) 

    (
3 ).重复第二步      -- >添加.. (新建本地网络服务名) 

    (
4 ).restart oracle       注重:NTS是WinNT的认证方式

43 、命令行编译存储过程

    
ALTER   PROCEDURE  procedure_name COMPILE;

44 、关于如何建立数据库链接(DBlink)

    可以通过建立客户机数据库网络服务名的办法,将服务器的名字或是IP地址设置为你需要连接的那个机器就行

    假如你要在一个应用中连接它,现在做好上步工作,然后按如下处理
    
    建立数据库连接CREATE 
DATABASE  LINK DBaseLinkName CONNECT  TO  UserName IDENTIFIED 

    
BY  Password USING  ' NetServiceName ' ;

    DBaseLinkName  是建立的数据连接名称

    UserName       是可以连接到的用户名Password        是可以连接到的用户的密码

    NetServiceName  是可以连接的数据库网络服务名或是数据库名

    查询建立数据连接的表实例Select 
*   From  TableName@ DBaseLinkName;

    注重:假如在CREATE 
DATABASE  LINK DBaseLinkName CONNECT  TO  UserName IDENTIFIED  BY  Password 

    USING 
' NetServiceName ' ;中

    NetServiceName  是数据库名

    修改init.ora中:global_names 
=  true否则global_names  =  false

    init.ora中:global_names 
=  false  

45 、Object Browser7.0中文版的破解方法

    到OBJECT BROWSER的目录里,找到DeIsL1.isu文件,用记事本打开,看到的是乱码吧?没关系,

    将Stirling Technologies ,Inc 这个字符串前面的乱码去掉(假如有的话),让后在Stirling之前加一个空格(一定要加的),

    保存,退出,重新运行一下看看,虽然还有提示输入验证信息,但是不用管他,直接确定就行。是不是可以用了呢?保证好使。

46 、错误号ORA - 01536 : space  quota exceeded  for   table   space   ' ALCATEL ' 的解决办法          三个解决办法,任你选择:    

    (
1 alter   user  USERNAME quota 100M  on  TABLESPACENAME;    

    (
2 alter   user  USERNAME quota unlimited  on  TABLESPACENAME;    

    (
3 grant  unlimited tablespace  to  USERNAME;

47 、如何在Oracle中捕捉到SQL语句的全部操作内容

       
SELECT  osuser, username, sql_text  from  v$session a, v$sqltext b         where  a.sql_address  = b.address  order   by  address, piece;   

48 、ORACLE中如何实现自增字段:

    (
1 )第一种方法 ORACLE一般的做法是同时使用序列和触发器来生成一个自增字段
    
        .
CREATE  SEQUENCE SEQname INCREMENT  BY    1  START  WITH    1  MAXVALUE   99999999 /

        
CREATE   TRIGGER  TRGnameBEFORE   INSERT    ON  table_nameREFERENCING NEW 

        
AS  :NEWFOR EACH ROWBegin    SELECT  SEQname.NEXTVAL      INTO  :NEW.FIELDname      FROM  DUAL; End ;
    
    (
2 )第二种方法:

        
CREATE   OR   REPLACE   TRIGGER  TR1  BEFORE  INSERT   ON  temp_table  

        
FOR  EACH ROWdeclare com_num  NUMBER ;BEGINSELECT  MAX (ID)  INTO  COM_NUM 

        
FROM  TEMP_TABLE; :NEW.ID: = COM_NUM + 1 ; END  TR1;

49 、job的使用:

    修改initsid.ora参数job_queue_processes 
=   4             8i,9i  (答应同时执行的JOB数)job_queue_interval  =   10             

    8i  job_queue_keep_connections
= true       8i

    DBMS_JOB.SUBMIT(:jobno,
// job号                

    
' your_procedure; ' , // 要执行的过程                

    trunc(sysdate)
+ 1 / 24 , // 下次执行时间                

    
' trunc(sysdate)+1/24+1 ' // 每次间隔时间               );

    删除job:dbms_job.remove(jobno);

    修改要执行的操作:dbms_job.what(jobno,what);

    修改下次执行时间:dbms_job.next_date(job,next_date);

    修改间隔时间:dbms_job.interval(job,interval);

    停止job:dbms.broken(job,broken,nextdate);

    启动job:dbms_job.run(jobno);

    注重:修改后一定要COMMIT;

    例子:VARIABLE jobno 
number ; begin       DBMS_JOB.SUBMIT(:jobno,                ' Procdemo; ' ,

    
// Procdemo为过程名称                SYSDATE,  ' SYSDATE + 1/720 ' );          commit ; end ;

50 、如何配置mts

    修改初始化参数文件增加以下内容:

    mts_dispatchers 
=  "(protocol = TCP)(disp = 2 )(con = 1000 )"mts_max_dispatchers  =  50mts_servers  =   20  mts_max_servers  =   50

51 、取出一个表的最后一条记录

    
select   *   from  ( select  rownum id,tname. *   from  tname) a  where  a.id = ( select   count ( * from  a);

52 、重做日志(Redolog)被删掉,通过什么方法才能恢复!

    先mount数据库,然后再目录下建同名文件redo01.
log 、redo02. log 、redo03.log然后执行alter databse clear logfile  group  n

    对于current的group,执行alter databse clear unarchived logfile 
group  n然后,再open,就ok了

53 、Oracle常见服务

    几个主要的:
    
    OracleOraHome81TNSListener     监听服务OracleServiceSID               ORACLE服务OracleOraHome81Agent          

     智能代理服务OracleOraHome81CMan            连接治理服务OracleOraHome81HTTPServer      

    APACHE WEB 服务OracleOraHome81ManagementServer ORACLE 企业治理器服务OracleOraHome81Names            

    ORACLE命名服务
    
    剩下的也不常用。


54 、ORACLE的热备份

    在不关闭数据库的时候进行ORACLE的备份。
    
    原理停复杂的,你去找本书看看吧。
    
    举个简单的例子:备份表空间USERS

    
ALTER  TABLESPACE USERS  BEGIN  BACKUPCOPY USERS TABLESPACE 的数据文件到备份目录

    
ALTER  TABLESPACE USERS  END   BACKUP

55 、导致索引不起作用的解决办法

    你的问题我刚处理过,是由optimizer_mode参数引起的,该参数的默认值为choose,即为如表有statis则查询走基于cost的方式,

    否则走基于rule的方式,因些你可以有以下几个解决方法。

    (
1 )、简单的在init < sid > .ora中设optimizer_mode = rule ,重起数据库。

    (
2 )、使用analyze  table  table_name(索引基表)  delete   statistics ;

    (
3 )、最后一个万能办法,将表和索引drop掉,重建。

56 、关于数据库进程的问题。

    (
1 ).查看相关进程在数据库中的会话

        
Select  a.sid,a.serial#,a.program, a.status ,substr(a.machine, 1 , 20 ), a.terminal,b.spidfrom v$session a, v$process b

        
where  a.paddr = b.addrand b.spid  =   & spid;

    (
2 ).查看数据库中被锁住的对象和相关会话

        
select  a.sid,a.serial#,a.username,a.program,c.owner, c. object_name   from  v$session a, v$locked_object b, all_objects c

        
where  a.sid = b.session_id andc. object_id   =  b. object_id ;

    (
3 ).查看相关会话正在执行的SQL

        
select  sql_text  from  v$sqlarea  where  address  =  (  select  sql_address  from  v$session  where  sid  =   & sid );

57 、查看IP地址
        
select  SYS_CONTEXT( ' USERENV ' , ' IP_ADDRESS ' )   from  dual;

58 、运行SQLPLUS时不用输入用户名和密码,进入之后使用

        CONNECT                     SQLPLUS 
/ NOLOG        SQL > CONNECT SCOTT / TIGER

59 、查看当前会话

        userenv() 函数

            
select  userenv( ' language ' from  dual 

    字符集        
        
select  userenv( ' isdba ' from  dual 是否DBA       

        
select  userenv( ' sessionid ' from  dual sessionid        

        
select  userenv( ' TERMINAL ' from  dual 

    客户端名字        
        
        
select  userenv( ' INSTANCE ' from  dual 实例数

       SYS_CONTEXT() 函数             

        
select  SYS_CONTEXT( ' USERENV ' , ' CURRENT_SCHEMA ' )   from  dual;  

    当前模式        

        
select  SYS_CONTEXT( ' USERENV ' , ' CURRENT_SCHEMAID ' )   from  dual;  

    当前模式ID        

        
select  SYS_CONTEXT( ' USERENV ' , ' CURRENT_USER ' )   from  dual; 

    当前用户          

        
select  SYS_CONTEXT( ' USERENV ' , ' DB_NAME ' )   from  dual; 

    数据库         
select  SYS_CONTEXT( ' USERENV ' , ' HOST ' )   from  dual; 

    主机        dot.gifdot.gifdot.gif.

60 、删除重复列的方法

    (
1 DELETE   FROM  table_name A  WHERE  ROWID  >  (        SELECT   min (rowid)  FROM  table_name B        

        
WHERE  A.key_values  =  B.key_values);( 2 create   table  table2  as   select   distinct   *   from  table1;      drop  table1;     

        rename table2 
to  table1;( 3 Delete   from  mytable  where  rowid  not   in (        select   max (rowid)  from  mytable       

        
group   by  column_name );( 4 delete   from  mytable t1       where    exists  ( select   ' x '   from  my_table t2                   

        
where  t2.key_value1  =  t1.key_value1                      and  t2.key_value2  =  t1.key_value2                     dot.gif                    

         
and  t2.rowid  >  t1.rowid);

61 、ORA - 12571 : TNS:packet writer failure(包写入程序失败)

   (
1 ) 这个错误在客户端碰到过,通常重新连接一下服务器就好了。
  
     服务器重新启动的时候,在client也会碰到该错误。   这个错误你是在server还是client上碰到的?

    最常用的办法就是加上跟踪,查看一下    跟踪记录,分析分析错误的原因。   网络问题也会出现该错误,

    比如网络路由没有配置好。   

    (
2 ) 安装的杀毒软件导致的  

     (
3 ) 服务器端的IP是否被改动  

     (
4 ) 最后不行的话,重新创建监听器   

 
62 、ORACLE服务不能自动启动的解决办法   

   把ORACLEHOME\network\ADMIN qlnet.ora   文件中的 sqlnet.authentication_service
= (nts)    注释掉就可以了

63 、不完全的时间点恢复

    
shutdown  immediatecopy 备份文件到需要恢复的目录下startup mountrecover  database  until time  ' 2002-12-26 09:00:00 '
    
    
alter   database   open  resetlogs

    自己仔细检查一下,不会发生这样的问题的。

64 、oracle如何设置查询超时

    
select    /* +  timeout  30 */    *    from   veryLargeTable  

65 、修改字符集

    (
1 )、 ALTER  DATABAE  CHARACTER   SET  SIMPLIFIED CHINESE_CHINA.ZHS16GBK ; 

    (
2 )、 update  props$  set  value$ = ' ZHS16CGB231280 '   where  name = ' NLS_CHARACTERSET ' ;

    
update  props$  set  value$ = ' ZHS16CGB231280 '   where   name = ' NLS_NCHAR_CHARACTERSET ' ;

    建议不使用(
2 )

    注重:(
1 )、执行ALTER  DATABASE   CHARACTER  SET必须有SYSDBA权限,并且在STARTUP RESTRICT模式下执行

        (
2 )、原字符集必须是目标字符集的一个真子集(就是浪子所说的只能从WE8ISO8859P1转到ZHS16GBK的原因)

        (
3 )、CLOB字段装换可能有问题,建议在转换以前把有CLOB字段的表导出后DROP,转换以后再导回

        (
4 )、该转换不可逆,所以在做这个操作以前建议做数据库全备份

66 、修改数据库名字

    (
1 )、启动svrmgrl,以文本方式备份控制文件 oracle > svrmgrl svrmgrl > connect internal svrmgrl > alter  system  backup  controlfile  to  trace
    
    (
2 )、编辑产生的跟踪文件,在udump目录下 改CREATE CONTROLFILE REUSE  DATABASE  "CTC" 

        NORESETLOGS ARCHIVELOG 中的REUSE为SET 然后把create controlfile这段语句拷出

    (
3 )、正常宕库,后启动到nomount下 svrmgrl > shutdown  immediate svrmgrl > startup nomount

    (
4 )、执行create controlfile那段语句( 5 )、打开数据库 svrmgrl > alter   database   open  

        如提示用resetlogs选项则使用  svrmgrl
> alter   database   open  resetlogs( 8 )、相应修改初始化参数

67 、rownum的用法

   
select   *   from  ( select  t. * ,rownum id  from  dept t)    where  id  between   1   and   20

68 、oracle的内部参数

   
SELECT  a.ksppinm NAME,       b.ksppstdf default_val,       a.ksppdesc DESCRIPTION   FROM  x$ksppi a,       x$ksppcv b 

    
WHERE  a.indx = b.indx    AND  substr(a.ksppinm, 1 , 1 ) = ' _ '   ORDER   BY  a.ksppinm

69 、9i安装时报areasqueries错误的解决办法    

    包括IAS 和 IDS         把安装源文件目录全部改为英文字母或数字    注重:不能是中文的路径

70 、我如何知道一个表空间还有多少可以用

    (
1 )、 SELECT   upper (f.tablespace_name) 表空间名,       d.Tot_grootte_Mb "表空间大小(M)",       

    d.Tot_grootte_Mb 
-  f.total_bytes "已使用空间(M)",        round ((d.Tot_grootte_Mb  -  f.total_bytes)  /  d.Tot_grootte_Mb  *   100 , 2 ) "使用比",  

     f.total_bytes "空闲空间(M)",       f.max_bytes "最大块(M)" 
FROM           ( SELECT  tablespace_name,           

     
round ( SUM (bytes) / ( 1024 * 1024 ), 2 ) total_bytes,             round ( MAX (bytes) / ( 1024 * 1024 ), 2 ) max_bytes     

     
FROM  sys.dba_free_space      GROUP   BY  tablespace_name) f,   

     (
SELECT  dd.tablespace_name,  round ( SUM (dd.bytes) / ( 1024 * 1024 ), 2 ) Tot_grootte_Mb     

     
FROM    sys.dba_data_files dd       GROUP   BY  dd.tablespace_name) dWHERE d.tablespace_name  =  f.tablespace_name   

     
ORDER   BY   4   DESC ( 2 )、 select  tablespace_name, round ( sum (bytes) / 1024 / 1024 , 2 ) "M"  from  dba_free_space 

    
group   by  tablespace_name

71 、creck pl / sql developer 的方法

    (
1 )、安装pl / sql developer

    (
2 )、用UltraEdit将程序PLSQLDev.exe打开

    (
3 )、将UltraEdit设置为16进制模式

    (
4 )、查找串:BA 1E  00   00   00  2B D0   修改:2B D0  为:4A  90

    (
5 )、存盘退出

    (
6 )、运行PLSQLDev.exe,假如提示你还有29天的时间可用,那就恭喜你了!

72 、使索引无效

    
ALTER   INDEX  idx UNUSABLE; ALTER   INDEX  idx_acctno DISABLE;( only   to  a  function  based  index )

73 、在SQLPLUS中给指定用户进行  set  autotrace  on / off         以SCOTT用户为例:

    SQL
> CONNECT scott / tiger         connected.        SQL > @$ORACLE_HOME / RDBMS / ADMIN / UTLXPLAN.SQL         

    
Table  created.        SQL > CONNECT  /   AS  SYSDBA         connected.        

    SQL
> @$ORACLE_HOME / SQLPLUS / ADMIN / PLUSTRCE.SQL          drop  role plustrace;    Role dropped.    

    
create  role plustrace;    Role created.    .     grant  plustrace  to  dba  with  admin  option ;     Grant  succeeded.

    SQL
> GRANT  PLUSTRACE  TO  SCOTT; 

    
Grant  succeeded.

    SQL
> CONNECT SCOTT / TIGER

    connected.        

    SQL
> set  autotrace  on

    SQL
>

74 、关于约束的四种状态

    Disabled novalidate:当约束使不能时,约束的规则不能强制在列       (包含在约束中)的数据之上。
    
    但约束的定义保存在数据字典中。       在执行数据仓库卷起(rollup)或装载且要加快装载过程时该方式       是有用的。

    Enabled novalidate:是能无效,该状态的表可以包含非法      的数据,但不可能加入新的非法数据。

    Enabled validate:使能有效,一个使能的约束是强制的,表的数据检查      有效

75 、在SQLPLUS中调用存储过程

    
SET  SERVEROUTPUT  ON   declare  out_param  varchar2 ( 100 ); begin  your_proc( 1 ,out_param); dbms_output.put_line(out_param); end ;

    
/ SET  SERVEROUTPUT  OFF  

75 、生成系统表和存储过程的三个文件。

     cat
* .sql     dbms * .sql     utl * .sql

76 、JOB中日期的使用

    每个月1号:

    last_day(sysdate)
+ 1

    每个季度的第一天:
    
    to_date(decode(to_char(sysdate,
' q ' ), ' 1 ' ,to_char(sysdate, ' yyyy ' ) ' 0101 ' ,     ' 2 ' ,to_char(sysdate, ' yyyy ' ) ' 0401 ' , ' 3 '

    ,to_char(sysdate,
' yyyy ' ) ' 0701 ' ,     ' 4 ' ,to_char(sysdate, ' yyyy ' ) ' 1001 ' ), ' yyyymmdd ' )

    天天:sysdate
+ 1

    每个星期几:

    decode(to_char(sysdate,
' w ' ), ' 1 ' ,sysdate + 7 ,to_char(sysdate, ' w ' ), ' 2 ' ,sysdate + 6 ,to_char(sysdate, ' w ' ), ' 3 ' ,sysdate + 5

    ,to_char(sysdate,
' w ' ), ' 4 ' ,sysdate + 4 ,to_char(sysdate, ' w ' ), ' 5 ' ,sysdate + 3 ,to_char(sysdate, ' w ' ), ' 6 ' ,sysdate + 2 ,to_char(sysdate, ' w ' ), ' 7 ' ,sysdate + 1 )
    
    每个星期x下午三点:interval(
21 ' next_day(trunc(sysdate),x+1)+15/24 ' );
    
    每个季度的第一个星期x:interval(
21 ' next_day(trunc(sysdate, '' Q '' ),3),5) ' );

77 、使用execute immediate 的问题

    8i以上才支持execute immediate 
8 .05只能用dbms_sql  最好使用execute immediate

78 、ORACLE9i中删除表空间中数据文件的方法  drop  tablespace tbsname including contents 

79 、找出串中的数字

    
SELECT  TRANSLATE( ' 2KRW229 ' ,    ' 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ' , ' 0123456789 ' )   "Translate example"    

     
FROM  DUAL /

    
2229
    
    
-- 全是数字的:

    
select   *   from  你的表  where  translate(你的列, ' 0123456789 ' , '   ' ) = '' ;
    
    
select   *   from  你的表  where  trim( ltrim ( rtrim ( replace ( col_name , ' 0123456789 ' , '   ' ))))  is   null

 

80 、分析表analyze  table  mzbs.db_code ESTIMATE  STATISTICS  SAMPLE  20   PERCENT ;

81 、表空间治理和用户治理

-- 查看表空间和数据文件

select   file_name ,tablespace_name,autoextensible  from  dba_data_files;

-- 数据表空间

CREATE  TABLESPACE USER_DATA     LOGGING     DATAFILE  ' D:\ORACLE\ORADATA\ORCL\test.DBF '  SIZE 50m REUSE ,              ' c:\USERS01112.DBF '  SIZE 50m REUSE      AUTOEXTEND      ON   NEXT   1280K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL

-- 临时表空间

CREATE   TEMPORARY      TABLESPACE  USER_DATA_TEMP TEMPFILE  '
D:\TEMP0111.DBF
'      SIZE 50M REUSE AUTOEXTEND      ON   NEXT   1024K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL UNIFORM     SIZE 1024K

-- 增加数据文件

ALTER  TABLESPACE  USER_DATA   ADD  DATAFILE  ' c:\USERS01113.DBF '  SIZE 50M;

ALTER  TABLESPACE USER_DATA   ADD  DATAFILE  ' c:\USERS01114.DBF '   SIZE 50M  AUTOEXTEND  ON ;

-- 删除表空间

DROP  TABLESPACE USER_DATA INCLUDING CONTENTS;

-- 修改数据文件大小 ALTER DATABASE DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;

-- 创建用户、赋予权限

CREATE   USER  USER_DATA PROFILE  DEFAULT  IDENTIFIED  BY   USER_DATA     

DEFAULT      TABLESPACE USER_DATA   TEMPORARY      TABLESPACE USER_DATA  ACCOUNT UNLOCK; 

GRANT  CONNECT  TO  USER_DATA; GRANT  RESOURCE  TO  USER_DATA;

-- 把表移到另一个表空间ALTER TABLE TABLENAME MOVE TABLESPACE TABLESPACENAME;

-- 创建索引

CREATE   INDEX  INDEXNAME  ON  TABLENAME(COLUMNNAME);

CREATE   INDEX  INDEXNAME  ON  TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;

-- 重新建立索引

ALTER   INDEX  INDEXNAME REBUILD TABLESPACE  TABLESPACE;

-- 创建表

CREAE 
TABLE  TABLENAME(COLUMN1 COLUTYPE  DEFAULT (VALUE)  NOT   NULL )(COLUMN2 COLUTYPE  DEFAULT (VALUE)  NOT   NULL );

-- 建表的索引存储分配

CREATE   TABLE  summit.employee(id  NUMBER ( 7 CONSTRAINT  employee_id_pk 

PRIMARY   KEY  DEFERRABLE USING  INDEX   STORAGE(INITIAL 100K  NEXT  100K)TABLESPACE indx, last_name  VARCHAR2 ( 25 )

 
CONSTRAINT  employee_last_name_nn  NOT   NULL ,dept_id  NUMBER ( 7 ))TABLESPACE data;

-- 建立主键

ALTER   TABLE  TABLENAMEADD  CONSTRAINT  CONSTRAINTNAME  PRIMARY   KEY (COLUMN1,COLUMN2)

-- 使约束无效

ALTER   TABLE  TABLENAME ENABLE NOVALIDATE  CONSTRAINT  CONSTRANAME;

ALTER   TABLE  TABLENAME ENABLE VALIDATE  CONSTRAINT  CONSTRANAME;

-- 删除约束

ALTER   TABLE  TABLENAME   DROP   CONSTRAINT  constraintname;

DROP   TABLE  TABLENAEM  CASCADE  CONSTRAINTS;(删除表后将所用的外键删除)

-- 给表增加列

ALTER   TABLE  TABLENAMEADD  COLUMN  COLUTYPE  DEFAULT (VALUE)  NOT   NULL ;

-- 给列增加缺省值

ALTER   TABLE  TABLENAMEMODIFY COLUMNNAME   DEFAULT (VALUE)  NOT   NULL ;

-- 给表增加外键 ALTER TABLE  TABLENAME ADD CONSTRAINT  CONSTRAINTNAME  FOREIGN KEY(COLUMN) REFERENCES TABLE1NAME(COLUMN1); 


1 、分析表
    analyze 
table  mzbs.db_code ESTIMATE  STATISTICS  SAMPLE  20   PERCENT ;

2 、表空间治理和用户治理

-- 查看表空间和数据文件

    
select   file_name ,tablespace_name,autoextensible  from  dba_data_files;

-- 数据表空间

    
CREATE  TABLESPACE USER_DATA     LOGGING     
    
    DATAFILE 
' D:\Oracle\ORADATA\ORCL\test.DBF '  
    
    SIZE 50m REUSE ,             
    
    
' c:\USERS01112.DBF '  SIZE 50m REUSE      AUTOEXTEND     
    
    
ON   NEXT   1280K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL

-- 修改表空间数据文件的路径

    
ALTER  TABLESPACE app_data  RENAME    DATAFILE  ' /DISK4/app_data_01.dbf '      TO     ' /DISK5/app_data_01.dbf ' ;

    
ALTER   DATABASE   RENAME  FILE   ' /DISK1/system_01.dbf '      TO   ' /DISK2/system_01.dbf ' ;

-- 临时表空间

    
CREATE   TEMPORARY      TABLESPACE  USER_DATA_TEMP 
    
    TEMPFILE 
' D:\TEMP0111.DBF '      SIZE 50M REUSE AUTOEXTEND     
    
    
ON   NEXT   1024K MAXSIZE  16383M EXTENT MANAGEMENT LOCAL UNIFORM     SIZE 1024K

-- 增加数据文件

    
ALTER  TABLESPACE  USER_DATA   ADD  DATAFILE  ' c:\USERS01113.DBF '  SIZE 50M;

    
ALTER  TABLESPACE USER_DATA   ADD  DATAFILE  ' c:\USERS01114.DBF '   SIZE 50M  AUTOEXTEND  ON ;

-- 删除表空间

    
DROP  TABLESPACE USER_DATA INCLUDING CONTENTS;

 

-- 修改表空间的存储参数

    
ALTER  TABLESPACE tablespacename   MINIMUM EXTENT 2M; 

    
ALTER  TABLESPACE tablespacename   DEFAULT  STORAGE (    INITIAL 2M     NEXT  2M    MAXEXTENTS  999  );

-- 表空间联机/脱机/只读

    
ALTER  TABLESPACE tablespacename OFFLINE / ONLINE / READ   ONLY ;

 

-- 修改数据文件大小 ALTER DATABASE DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;

-- 创建用户、赋予权限

    
CREATE   USER  USER_DATA PROFILE  DEFAULT  IDENTIFIED  BY   USER_DATA     

    
DEFAULT      TABLESPACE USER_DATA   TEMPORARY      TABLESPACE USER_DATA  ACCOUNT UNLOCK; 

    
GRANT  CONNECT  TO  USER_DATA; GRANT  RESOURCE  TO  USER_DATA;

 

3 、表的治理

-- 创建表

    CREAE 
TABLE  TABLENAME(COLUMN1 COLUTYPE  DEFAULT (VALUE)  NOT   NULL )
    
    (COLUMN2 COLUTYPE 
DEFAULT (VALUE)  NOT   NULL );

-- 建表的索引存储分配

    
CREATE   TABLE  summit.employee(id  NUMBER ( 7 CONSTRAINT  employee_id_pk  PRIMARY   KEY  
    
    DEFERRABLE USING 
INDEX   STORAGE(INITIAL 100K  NEXT  100K)TABLESPACE indx, last_name  VARCHAR2 ( 25

    
CONSTRAINT  employee_last_name_nn  NOT   NULL ,dept_id  NUMBER ( 7 ))TABLESPACE data;

-- 修改表的存储分配
    
    
ALTER   TABLE  tablenamePCTFREE 30PCTUSED 50STORAGE( NEXT  500KMINEXTENTS 2MAXEXTENTS  100 );
    
    
ALTER   TABLE  tablenameALLOCATE EXTENT(SIZE 500KDATAFILE  ' /DISK3/DATA01.DBF ' );

-- 把表移到另一个表空间

    
ALTER   TABLE  TABLENAME MOVE TABLESPACE TABLESPACENAME;

-- 回收空闲的空间(回收到High-water mark)  全部回收需要TRUNCATE TABLE tablename

    
ALTER   TABLE  tablenameDEALLOCATE UNUSED;

-- 删除表(连同所用constraint)

    
DROP   TABLE  tablenameCASCADE CONSTRAINTS;

-- 给表增加列

    
ALTER   TABLE  TABLENAMEADD  COLUMN  COLUTYPE  DEFAULT (VALUE)  NOT   NULL ;

-- 删除表中的列

    
ALTER   TABLE  tablenameDROP  COLUMN  columnname;

    
ALTER   TABLE  tablenameDROP  COLUMN  columnnameCASCADE CONSTRAINTS  CHECKPOINT   1000 ;

-- 标记列不可用

    
ALTER   TABLE  tablenameSET UNUSED  COLUMN  columnnameCASCADE CONSTRAINTS;

-- 删除标记为不可用的列

    
ALTER   TABLE  tablenameDROP UNUSED COLUMNS  CHECKPOINT   1000 ;

-- 继续删除列选项

    
ALTER   TABLE  tablenameDROP COLUMNS  CONTINUE   CHECKPOINT   1000 ;

-- 把表放到BUFFER_POOL中去

    
ALTER   TABLE  tablename  STORAGE (BUFFER_POOL RECYCLE);

-- 避免动态分配EXTENT

    
ALTER   TABLE  tablename ALLOCATE EXTENT;

-- 把表放到CACHE中去

    
ALTER   TABLE  tablename ALLOCATE CACHE / NOCACHE;

4 、索引治理

-- 创建索引

    
CREATE   INDEX  indexname  ON  TABLENAME(COLUMNNAME);

    
CREATE   INDEX  indexname  ON  TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;

-- 重新建立索引

    
ALTER   INDEX  indexname REBUILD TABLESPACE  TABLESPACE;

-- 索引分配参数

    
ALTER   INDEX  indexnameSTORAGE( NEXT  400K MAXEXTENTS  100 );

-- 释放索引空间

    
ALTER   INDEX  indexnameALLOCATE EXTENT (SIZE 200KDATAFILE  ' /DISK6/indx01.dbf ' );
    
    
ALTER   INDEX  indexnameDEALLOCATE UNUSED;

-- 重新整理索引表空间碎片

    
ALTER   INDEX  indexname  COALESCE ;

-- 删除索引

    
DROP   INDEX  indexname

-- 把索引放到BUFFER_POOL中

    
ALTER   INDEX  cust_name_idx  REBUILD  STORAGE (BUFFER_POOL KEEP);

5 、约束治理

-- 建立主键

    
ALTER   TABLE  TABLENAMEADD  CONSTRAINT  CONSTRAINTNAME  PRIMARY   KEY (COLUMN1,COLUMN2)

-- 使约束无效

    
ALTER   TABLE  TABLENAME ENABLE NOVALIDATE  CONSTRAINT  constraintname;

    
ALTER   TABLE  TABLENAME ENABLE VALIDATE  CONSTRAINT  constraintname;

-- 删除约束

    
ALTER   TABLE  tablename   DROP   CONSTRAINT  constraintname;

    
DROP   TABLE  tablename  CASCADE  CONSTRAINTS;(删除表后将所用的外键删除)

-- 给列增加缺省值

    
ALTER   TABLE  TABLENAMEMODIFY columnname   DEFAULT (value)  NOT   NULL ;

-- 给表增加外键 

    
ALTER   TABLE   tablename  ADD   CONSTRAINT   constraintname   FOREIGN   KEY ( column REFERENCES  table1name(column1);

6 、安全策略

-- 加密传输

    把客户端环境变量ora_encrypt_login设为true把服务器端参数dblink_encypt_login设为true

-- 数据库治理员安全策略

    a、建库后立即修改SYS
/ SYSTEM的口令( 9 .2后必须修改其口令)b、只有数据库治理员才能以SYSDBA登录系统c、

    建立不同角色的治理员,分配不同的权限

 
      比如:对象创建于维护         数据库的调整与维护         创建用户分配角色         启动关闭         恢复备份         

-- 应用开发者的安全策略

a、开发者的特权只能在测试开发的数据库中赋予权限b、自由开发者、受控开发者   

    自由开发者:
create   table \ index \ procedure \package   受控开发者:没有以上权限 

7 、日志文件治理

-- 切换日志文件

    
ALTER  SYSTEM SWITCH LOGFILE;

-- 增加日志文件

    
ALTER   DATABASE   ADD  LOGFILE ( ' /DISK3/log3a.rdo ' , ' /DISK4/log3b.rdo ' ) size 1M;

-- 增加日志成员

    
ALTER   DATABASE   ADD  LOGFILE MEMBER ' /DISK4/log1b.rdo '   TO   GROUP   1 ' /DISK4/log2b.rdo '   TO   GROUP   2 ;

-- 删除日志文件

    
ALTER   DATABASE   DROP  LOGFILE  GROUP   3 ;

-- 删除日志成员

    
ALTER   DATABASE   DROP  LOGFILE MEMBER  ' /DISK4/log2b.dbf ' ;

-- 清除日志文件内容

    
ALTER   DATABASE  CLEAR LOGFILE  ' /DISK3/log2a.rdo '

转载于:https://www.cnblogs.com/wequst/archive/2009/03/18/1415546.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值