this is a extra element for clear the floated element
Oracle数据库开发的一些经验积累(二)
  • 12/31
  • 2008
入门基础 | Oracle 3301 次查看
  三、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 version

  connect 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 Assistant

  a、使用Configuration Assistant工具来创建一个新的资料档案库。

  (4).控制面板??>管理工具?? > 服务,查看OracleOraHome81ManagementServer是否启动,如果没有启动,则手动启动该服务。

  (5).以sysman/oem_temp(default)登陆DBA Studio

  (第二个选项:登陆到Oracle Management Server),立即修改密码为你刚才在NT下建的用户sysman的密码。

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

  在 系统→首选项→首选身份证明(我的首选身份设置如下:)

  DEFAULT节点:name:sysman

  DEFAULT数据库:name:sys

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

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

  (9).从开始→程序→Oracle - OraHome81→Console 登陆到 控制台,查看活动(历史记录)可以看到你的备份是否成功,如果不成功,可以点击备份看明细。(我第一次也没成功,后来我修改系统的临时目录C:\WINNT\Temp→c:\temp\systmp,重新启动机器就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\SOFTWARE\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-->选第三项本地网络服务名配置

  -->删除...(删除原来的本地网络服务名)

  (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 TRGname

  BEFORE

  INSERT

  ON table_name

  REFERENCING

  NEW AS :NEW

  FOR EACH ROW

  Begin

  SELECT SEQname.NEXTVAL

  INTO :NEW.FIELDname

  FROM DUAL;

  End;

  (2)第二种方法:

  CREATE OR REPLACE TRIGGER TR1

  BEFORE INSERT ON temp_table

  FOR EACH ROW

  declare

  com_num NUMBER;

  BEGIN

  SELECT 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);

  修改