Oracle百问百答.docx
《Oracle百问百答.docx》由会员分享,可在线阅读,更多相关《Oracle百问百答.docx(11页珍藏版)》请在冰豆网上搜索。
Oracle百问百答
1.oracle中的裸设备指的是什么?
裸设备就是绕过文件系统直接访问的储存空间
2.oracle如何区分64-bit/32bit版本?
?
?
$sqlplus'/ASSYSDBA'
SQL*Plus:
Release9.0.1.0.0-ProductiononMonJul1417:
01:
092003
(c)Copyright2001OracleCorporation.Allrightsreserved.
Connectedto:
Oracle9iEnterpriseEditionRelease9.0.1.0.0-Production
WiththePartitioningoption
JServerRelease9.0.1.0.0-Production
SQL>select*fromv$version;
BANNER
----------------------------------------------------------------
Oracle9iEnterpriseEditionRelease9.0.1.0.0-Production
PL/SQLRelease9.0.1.0.0-Production
CORE9.0.1.0.0Production
TNSforSolaris:
Version9.0.1.0.0-Production
NLSRTLVersion9.0.1.0.0-Production
SQL>
3.请问如何分辨某个用户是从哪台机器登陆ORACLE的?
SELECTmachine,terminalFROMV$SESSION;
4.用什么语句查询字段呢?
desctable_name可以查询表的结构
selectfield_name,...from...可以查询字段的值
select*fromall_tableswheretable_namelike'%'
select*fromall_tab_columnswheretable_name='?
?
'
5.怎样得到触发器、过程、函数的创建脚本?
descuser_source
user_triggers
6.怎样计算一个表占用的空间的大小?
selectowner,table_name,
NUM_ROWS,
BLOCKS*AAA/1024/1024"SizeM",
EMPTY_BLOCKS,
LAST_ANALYZED
fromdba_tables
wheretable_name='XXX';
Here:
AAAisthevalueofdb_block_size;
XXXisthetablenameyouwanttocheck
7.如何查看最大会话数?
SELECT*FROMV$PARAMETERWHERENAMELIKE'proc%';
SQL>
SQL>showparameterprocesses
NAMETYPEVALUE
-------------------------------------------------------------------------
aq_tm_processesinteger1
db_writer_processesinteger1
job_queue_processesinteger4
log_archive_max_processesinteger1
processesinteger200
这里为200个用户。
select*fromv$license;
其中sessions_highwater纪录曾经到达的最大会话数
8.如何查看系统被锁的事务时间?
select*fromv$locked_object;
9.如何以archivelog的方式运行oracle。
init.ora
log_archive_start=true
RESTARTDATABASE
10.怎么获取有哪些用户在使用数据库
selectusernamefromv$session;
11.数据表中的字段最大数是多少?
表或视图中的最大列数为1000
12.怎样查得数据库的SID?
selectnamefromv$database;
也可以直接查看init.ora文件
13.如何在Oracle服务器上通过SQLPLUS查看本机IP地址?
selectsys_context('userenv','ip_address')fromdual;
如果是登陆本机数据库,只能返回127.0.0.1
14.在ORACLETABLE中如何抓取MEMO类型字段为空的资料记录?
selectremarkfromoms_flowrecwheretrim(''fromremark)isnotnull;
15.如何用BBB表的资料去更新AAA表的资料(有关联的字段)
UPDATEAAASETBNS_SNM=(SELECTBNS_SNMFROMBBBWHEREAAA.DPT_NO=BBB.DPT_NO)WHEREBBB.DPT_NOISNOT
NULL;
16.何查询SERVER是不是OPS?
SELECT* FROMV$OPTION;
如果PARALLELSERVER=TRUE则有OPS能
17.何查询每个用户的权限?
SELECT* FROMDBA_SYS_PRIVS;
18.如何将表移动表空间?
ALTERTABLETABLE_NAMEMOVETABLESPACE_NAME;
19.如何将索引移动表空间?
ALTERINDEXINDEX_NAMEREBUILDTABLESPACETABLESPACE_NAME;
20.在LINUX,UNIX下如何激活DBASTUDIO?
OEMAPP DBASTUDIO
21.查询锁的状况的对象有?
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS;
查询锁的表的方法:
SELECTS.SIDSESSION_ID,S.USERNAME,DECODE(LMODE,0,'None',1,'Null',2,'Row-S(SS)',3,'Row-X
(SX)',4,'Share',5,'S/Row-X(SSX)',6,'Exclusive',TO_CHAR(LMODE))MODE_HELD,DECODE(REQUEST,0,
'None',1,'Null',2,'Row-S(SS)',3,'Row-X(SX)',4,'Share',5,'S/Row-X(SSX)',6,'Exclusive',
TO_CHAR(REQUEST))MODE_REQUESTED,O.OWNER||'.'||O.OBJECT_NAME||'('||O.OBJECT_TYPE||')',S.TYPE
LOCK_TYPE,L.ID1LOCK_ID1,L.ID2LOCK_ID2FROMV$LOCKL,SYS.DBA_OBJECTSO,V$SESSIONSWHEREL.SID=
S.SIDANDL.ID1=O.OBJECT_ID;
22.如何解锁?
ALTERSYSTEMKILLSESSION ‘SID,SERIR#’;
23.SQLPLUS下如何修改编辑器?
DEFINE_EDITOR="<编辑器的完整路经>" --必须加上双引号
来定义新的编辑器,也可以把这个写在$ORACLE_HOME/sqlplus/admin/glogin.sql里面使它永久有效。
24.ORACLE产生随机函数是?
DBMS_RANDOM.RANDOM
25.LINUX下查询磁盘竞争状况命令?
Sar -d
26.LINUX下查询CPU竞争状况命令?
sar -r
27.查询当前用户对象?
SELECT* FROMUSER_OBJECTS;
SELECT* FROMDBA_SEGMENTS;
28.如何获取错误信息?
SELECT* FROM USER_ERRORS;
29.如何获取链接状况?
SELECT*FROMDBA_DB_LINKS;
30.查看数据库字符状况?
SELECT* FROMNLS_DATABASE_PARAMETERS;
SELECT* FROMV$NLS_PARAMETERS;
31.查询表空间信息?
SELECT* FROM DBA_DATA_FILES;
32.ORACLE的INTERAL用户要口令?
修改SQLNET.ORA
SQLNET.AUTHENTICATION_SERVICES=(NTS)
33.如何给表、列加注释?
SQL>commentontable表is'表注释';
注释已创建。
SQL>commentoncolumn表.列is'列注释';
注释已创建。
SQL>select*fromuser_tab_commentswherecommentsisnotnull;
34.如何查看各个表空间占用磁盘情况?
SQL>coltablespaceformata20
SQL>selectb.file_id文件ID号,b.tablespace_name表空间名,
b.bytes
字节数,
(b.bytes-sum(nvl(a.bytes,0)))
已使用,
sum(nvl(a.bytes,0))
剩余空间,
sum(nvl(a.bytes,0))/(b.bytes)*100剩余百分比
fromdba_free_spacea,dba_data_filesb
wherea.file_id=b.file_id
groupbyb.tablespace_name,b.file_id,b.bytes
orderbyb.file_id
35.如把ORACLE设置为MTS或专用模式?
#dispatchers="(PROTOCOL=TCP)(SERVICE=SIDXDB)"
加上就是MTS,注释就是专用模式,SID是指你的实例名。
36.如何才能得知系统当前的SCN号?
selectmax(ktuxescnw*power(2,32)+ktuxescnb)fromx$ktuxe;
37.请问如何在ORACLE中取毫秒?
9i之前不支持,9i开始有timestamp.
9i可以用selectsystimestampfromdual;
38.如何在字符串里加回车?
select'Welcometovisit'||chr(10)||'www.CSDN.NET'fromdual;
39.中文是如何排序的?
Oracle9i之前,中文是按照二进制编码进行排序的。
在oracle9i中新增了按照拼音、部首、笔画排序功能。
设置NLS_SORT值
SCHINESE_RADICAL_M按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M按照拼音排序
40.如何改变WIN中SQL*Plus启动选项?
SQL*PLUS自身的选项设置我们可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中设置。
41.怎样修改oracel数据库的默认日期?
altersessionsetnls_date_format='yyyymmddhh24miss';
OR
可以在init.ora中加上一行
nls_date_format='yyyymmddhh24miss'
42.如何将小表放入keep池中?
altertablexxxstorage(buffer_poolkeep);
43.如何检查是否安装了某个patch?
checkthat oraInventory
44.如何使select语句使查询结果自动生成序号?
selectrownum,COLfromtable;
45.如何知道数据裤中某个表所在的tablespace?
selecttablespace_namefromuser_tableswheretable_name='TEST';
select*fromuser_tables中有个字段TABLESPACE_NAME,(oracle);
select*fromdba_segmentswhere…;
46.怎么可以快速做一个和原表一样的备份表?
createtablenew_tableas(select*fromold_table);
47.怎么在sqlplus下修改procedure?
selectline,trim(text)tfromuser_sourcewherename=’A’orderbyline;
48.怎样解除PROCEDURE被意外锁定?
altersystemkillsession,把那个session给杀掉,不过你要先查出她的sessionid
or
把该过程重新改个名字就可以了。
49.如何查看数据库的状态?
unix下
ps-ef|grepora
windows下
看服务是否起来
是否可以连上数据库
50.请问如何修改一张表的主键?
altertableaaa
dropconstraintaaa_key;
altertableaaa
addconstraintaaa_keyprimarykey(a1,b1);
51.改变数据文件的大小?
用ALTERDATABASE....DATAFILE....;
手工改变数据文件的大小,对于原来的数据文件有没有损害。
52.怎样查看ORACLE中有哪些程序在运行之中?
查看v$sessions表
53.怎么可以看到数据库有多少个tablespace?
select * fromdba_tablespaces;
54.如何修改oracle数据库的用户连接数?
修改initSID.ora,将process加大,重启数据库.
55.如何查出一条记录的最后更新时间?
可以用logminer察看
56.如何在PL/SQL中读写文件?
UTL_FILE包允许用户通过PL/SQL读写操作系统文件。
57.怎样把“&”放入一条记录中?
insertintoavalues(translate('at{&}t','at{}','at'));
58.EXP 如何加QUERY参数?
EXPUSER/PASSFILE=A.DMPTABLES(BSEMPMS)
QUERY='"WHEREEMP_NO=\'S09394\'\";
59.如何创建SPFILE?
SQL>connect/assysdba
SQL>select*fromv$version;
SQL>createpfilefromspfile;
SQL>CREATESPFILEFROMPFILE='E:
\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
SQL>CREATESPFILE='E:
\ora9i\database\SPFILEEYGLE.ORA'FROM
PFILE='E:
\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
60.内核参数的应用?
shmmax
含义:
这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数
目。
这个设置也不影响操作系统的内核资源。
设置方法:
0.5*物理内存
例子:
Setshmsys:
shminfo_shmmax=10485760
shmmin
含义:
共享内存的最小大小。
设置方法:
一般都设置成为1。
例子:
Setshmsys:
shminfo_shmmin=1:
shmmni
含义:
系统中共享内存段的最大个数。
例子:
Setshmsys:
shminfo_shmmni=100
shmseg
含义:
每个用户进程可以使用的最多的共享内存段的数目。
例子:
Setshmsys:
shminfo_shmseg=20:
semmni
含义:
系统中semaphoreidentifierer的最大个数。
设置方法:
把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的那
个值加10。
例子:
Setsemsys:
seminfo_semmni=100
semmns
含义:
系统中emaphores的最大个数。
设置方法:
这个值可以通过以下方式计算得到:
各个Oracle实例的initSID.ora里边的processes的值的总和(
除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。
例子:
Setsemsys:
seminfo_semmns=200
semmsl:
含义:
一个set中semaphore的最大个数。
设置方法:
设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。
例子:
Setsemsys:
seminfo_semmsl=-200
61.怎样查看哪些用户拥有SYSDBA、SYSOPER权限?
SQL>connsys/change_on_install
SQL>select*fromV_$PWFILE_USERS;
62.如何单独备份一个或多个表?
exp用户/密码tables=(表1,…,表2)
63.如何单独备份一个或多个用户?
expsystem/managerowner=(用户1,用户2,…,用户n)file=导出文件
64.如何对CLOB字段进行全文检索?
SELECT*FROMAWHEREdbms_lob.instr(a.a,'K',1,1)>0;
65.如何显示当前连接用户?
SHOW USER
66.如何查看数据文件放置的路径?
SQL>colfile_nameformata50
SQL>selecttablespace_name,file_id,bytes/1024/1024,file_namefromdba_data_filesorderbyfile_id;
67.如何查看现有回滚段及其状态?
SQL>colsegmentformata30
SQL>SELECTSEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUSFROMDBA_ROLLBACK_SEGS
68.如何改变一个字段初始定义的Check范围?
SQL>altertablexxxdropconstraintconstraint_name;
之后再创建新约束:
SQL>altertablexxxaddconstraintconstraint_namecheck();
69.Oracle常用系统文件有哪些?
通过以下视图显示这些文件信息:
v$database,v$datafile,v$logfilev$controlfilev$parameter;
70.内连接INNERJOIN?
Selecta.*frombsempmsa,bsdptmsbwherea.dpt_no=b.dpt_no;
71.如何外连接?
Selecta.*frombsempmsa,bsdptmsbwherea.dpt_no=b.dpt_no(+);
Selecta.*frombsempmsa,bsdptmsbwherea.dpt_no(+)=b.dpt_no;
72.如何执行脚本SQL文件?
SQL>@$PATH/filename.sql;
73.如何快速清空一个大表?
SQL>truncatetabletable_name;
74.如何查有多少个数据库实例?
SQL>SELECT*FROMV$INSTANCE;
75.如何查询数据库有多少表?
SQL>select*fromall_tables;
76.如何测试SQL语句执行所用的时间?
SQL>settimingon;
SQL>select*fromtablename;
77.CHR()的反函数是?
ASCII()
SELECTCHAR(65)FROMDUAL;
SELECTASCII('A')FROMDUAL;
78.字符串的连接
SELECTCONCAT(COL1,COL2)FROMTABLE;
SELECTCOL1||COL2FROMTABLE;
79.怎么把select出来的结果导到一个文本文件中?
SQL>SPOOL C:
\ABCD.TXT;
SQL>select* fromtable;
SQL>spooloff;
80.怎样估算SQL执行的I/O数?
SQL>SETAUTOTRACEON;
SQL>SELECT*FROMTABLE;
OR
SQL>SELECT* FROM v$filestat;
可以查看IO数
81.如何在sqlplus下改变字段大小?
altertabletable_namemodify(field_namevarchar2