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 test
is
file_handle utl_file.file_type;
stor_text varchar2(4000);
n number;
i number;
begin
i:=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 oracleservicesid
oracleservicesid是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 tablename
select 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)
svrmgrl
connect internal/oracle
alter 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,...);
重建索引:
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 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了)