Oracle问题收集.docx
《Oracle问题收集.docx》由会员分享,可在线阅读,更多相关《Oracle问题收集.docx(14页珍藏版)》请在冰点文库上搜索。
Oracle问题收集
1、创建数据库的语法
2、在PL/SQL工具中怎么执行sql脚本文件
1)get文件名将sql脚本导入内存
2)start文件名执行导入到内存的脚本文件内容
3、Oracle中怎么判断字段的值是null
‘字段名’isnull
4、SQL中inner、Leftjoin、Rightjoin区别
Innerjoint(等值连接)只返回两个表中联结字段相等的行(跟where一样)
Leftjoint(左连接)返回左表的所有记录和右表中连接相同的记录
Rightjoint(右连接)返回右表的所有记录和左表中连接相同的记录
5、(not)in不能判断null值
6、视图奇怪现象
用System用户,在scott用户的基表上建立一个视图,system没有权限对视图进行update
用scott用户,在scott用户的基表上建立一个视图,system有权限对视图进行合法的update
7、什么是数据库字典
Oracle数据字典是由表和视图组成的、存储有关数据库结构信息的一些数据库对象。
数据库字典描述了实际数据是如何组织的。
对它们可以像处理其他数据库表或视图一样进行查询,但不能进行任何修改。
Oracle数据库字典通常是在创建和安装数据库时被创建的,是Oracle数据库系统工作的基础,没有数据字典的支持,Oracle数据库系统就不能进行任何工作。
在Oracle数据库字典中,许多视图都有三个不同的实例,它们的前缀分别为“USER_”、“ALL_”及“DBA_”。
“USER_”为前缀的数据库字典视图通常记录执行查询的帐户所拥有的对象的信息,“ALL_”为前缀的数据库字典视图通常记录包括执行查询的帐户所拥有的对象的信息及授权至PUBLIC的帐户用户所拥有的对象的信息,“DBA_”为前缀的数据库字典视图则包含所有数据库对象的信息,而不管其所有者。
其他的字典视图中主要的是V$视图,之所以这样叫是因为他们都是以V$或GV$开头的。
V$视图是基于X$虚拟视图的。
V$视图是SYS用户所拥有的,在缺省状况下,只有SYS用户和拥有DBA系统权限的用户可以看到所有的视图,没有DBA权限的用户可以看到USER_和ALL_视图,但不能看到DBA_视图。
与DBA_、ALL_和USER_视图中面向数据库信息相反,这些视图可视的地给出了面向实例的信息。
视图家族
描述
COL_PRIVS
包含了表的列权限,包括授予者、被授予者和权限
EXTENTS
数据范围信息,比如数据文件,数据段名(segment_name)和大小
INDEXES
索引信息,比如类型、唯一性和被涉及的表
IND_COLUMNS
索引列信息,比如索引上的列的排序方式
OBJECTS
对象信息,比如状态和DDLtime
ROLE_PRIVS
角色权限,比如GRANT和ADMIN选项
SEGMENTS
表和索引的数据段信息,比如tablespace和storage
SEQUECNCES
序列信息,比如序列的cache、cycle和ast_number
SOURCE
除触发器之外的所有内置过程、函数、包的源代码
SYNONYMS
别名信息,比如引用的对象和数据库链接db_link
SYS_PRIVS
系统权限,比如grantee、privilege、admin选项
TAB_COLUMNS
表和视图的列信息,包括列的数据类型
TAB_PRIVS
表权限,比如授予者、被授予者和权限
TABLES
表信息,比如表空间(tablespace),存储参数(storageparms)和数据行的数量
TRIGGERS
触发器信息,比如类型、事件、触发体(triggerbody)
USERS
用户信息,比如临时的和缺省的表空间
VIEWS
视图信息,包括视图定义
在Oracle中还有一些不常用的数据字典表,但这些表不是真正的字典家族,他们都是一些重要的单一的视图。
这些视图见下表:
视图名称
描述
USER_COL_PRIVS_MADE
用户授予他人的列权限
USER_COL_PRIVS_RECD
用户获得的列权限
USER_TAB_PRIVS_MADE
用户授予他人的表权限
USER_TAB_PRIVS_RECD
用户获得的表权限
8、怎么查看表的分区
1)通过企业管理器,可以直接查看表分区
2)通过数据字典视图user_tab_partitions或user_segments可用查看
9、表分区里面得值,没有通配符得概念
10、如果没有包含要插入值得表分区,数据库不让插入该数据
11、表分区要先存在,才能在上面进行表分区维护
12、Oracle数据类型说明
Char用于描述定长的字符型数据,长度<=2000字节
varchar2用于描述变长的字符型数据,长度<=4000字节
nchar用来存储Unicode字符集的定长字符型数据,长度<=1000字节
nvarchar2用来存储Unicode字符集的变长字符型数据,长度<=1000字节
number用来存储整型或者浮点型数值
Date用来存储日期数据
Long用来存储最大长度为2GB的变长字符数据
Raw用来存储非结构化数据的变长字符数据,长度<=2000字节
Longraw用来存储非结构化数据的变长字符数据,长度<=2GB
rowid用来存储表中列的物理地址的二进制数据,占用固定的10个字节
Blob用来存储多达4GB的非结构化的二进制数据
Clob用来存储多达4GB的字符数据
nclob用来存储多达4GB的Unicode字符数据
Bfile用来把非结构化的二进制数据存储在数据库以外的操作系统文件中
urowid用来存储表示任何类型列地址的二进制数据
float用来存储浮点数
13、查看系统中建立的目录
可以从ALL_DIRECTORY视图中查
14、错误代号和信息函数的调用
直接调用SQLCODE()andSQLERRM();
15、PL/SQL中退出的方式
1.如果是function退出.比较简单.在任何想退出的地方加上return参数就可以了!
2.如果是procedure的退出在需要退出的地方直接加上return;即可!
3.如果是循环退出!
单次循环退出采用exit!
退出整个过程应该还是适用return;或者return参数!
16、DBMS_LOCK简介
用户自定义锁,根据不同应用,用户可以基于session,对公共资源进行加锁
常用方法
Dbms_lock.request(idinintegeror
Lockhanderinvarchar2,
Lockmodeinintegerdefaultx_mode,
Timeoutinintegerdefaultmaxwait,
Release_oncommitinBooleandefaultfalse)
Returninteger;
0success;
1timeout
2deadlock
3parametererror
4idorhanderhasexist
5illegallockhandle
Dbms_lock.release(idininteger)
Returninteger;
0success
3parametererror
4donotownlock
5illegallockhander
17、Oracle表最多可以包含1000列
18、Oracle普通索引最多32列,bitmap最多30列
19、SQLServer的组合索引最多可以建16列
20、Oracle里面,一次插入多条记录
Insterinto[lie]
Selectvaluelistfromdual
Union
Selectvaluelistfromdual
……
21、重新启动数据库时主机身份证明是什么?
“管理工具”——“本地安全设置”——“本地策略”——“用户权限分配”——“作为批处理作业登录”里将要登录的主机用户加进去
ora-01041错误解决方法
修改sqlnet.ora
sqlnet.authentication_services=(NTS)
NAME.DIRECTORY_PATH=(TNSNAME)
重新启动数据库与TSN
Oracle9I开始,取消了服务器管理器(svrmgl)和internal用户,数据库的启动和停止都是通过sql*plus来完成!
Oracle10g可以通过浏览器来启动和停止数据库服务!
这里主要说说9I下的启动和停止服务,下面的命令在8i下也可以使用
要启动或者停止服务,必须拥有sysdba的权限。
可以使用两中方式连接
第一种,以sys用户连接
c:
\>;sqlplus sys/change_on_install as sysdba;
进入sql*plus环境;(注意,ORACLE9I在安装的时候需要你自己设定sys和system的口令,并且不能才用ORACLE9I以前这两个用户的默认口令,这主要是为了保证数据库系统的安全,我为了好记忆,在安装完成后立刻恢复了默认的口令)
第二种:
C:
\>;sqlplus /nolog
SQL*Plus:
Release 9.2.0.1.0 - Production on 星期一 4月 26 09:
42:
00 2004
Copyright (c) 1982, 2002>>, Oracle Corporation. All rights reserved.
SQL>; connect /as sysdba
已连接。
SQL>;
在进入后就可以进行下面的操作了!
先说关闭数据库
shutdown有四个参数,四个参数的含义如下:
Normal 需要等待所有的用户断开连接
Immediate 等待用户完成当前的语句
Transactional 等待用户完成当前的事务
Abort 不做任何等待,直接关闭数据库
normal需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!
在执行这个命令后不允许新的连接
immediate在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。
transactional 在拥护执行完当前事物后断开连接,并不允许新的用户连接数据库。
abort 执行强行断开连接并直接关闭数据库。
前三种方式不回丢失用户数据。
第四种在不的已的情况下,不建议采用!
数据库的启动
数据库启动使用startup命令,它有三种情况
第一种:
不带参数,启动数据库实例并打开数据库,以便用户使用数据库,在多数情况下,使用这种方式!
第二种:
带nomount参数,只启动数据库实例,但不打开数据库,在你希望创建一个新的数据库时使用,或者在你需要这样的时候使用!
第三种:
带mount参数,在进行数据库更名的时候采用。
这个时候数据库就打开并可以使用了!
谢谢!
不准确的地方请指教!
我的一点看法,不正确请指正:
Shutdown
normal:
等待所有用户断开连接时,关闭数据库、卸载数据库和关闭实例。
immediate:
回滚所有用户事务,关闭数据库、卸载数据库和关闭实例.
(注意是回滚)。
transactional:
当所有用户事务结束时,关闭数据库、卸载数据库和关闭实例
abort:
立即终止实例。
对用户末交事务,下次启动数据时恢复。
实际上我不是说楼主写得有问题或者错误,而是觉得更详细,对大家帮助更大些。
----------------------------------------------------------------------------
statup
startup nomount 启动实例,如果在此状态下打开数据库需要的操作:
Alter database mount
Alter database open
nomount是非安装启动,做的操作主要是读取init.ora文件,启动instance,即启动SGA和后台进程,划分内存,进程。
这种启动只需要读init.ora文件。
这种启动方式下可执行:
重建控制文件、重建数据库,因为还没有读控制文件。
-------------------------------------------------------
startup mount 启动实例>;装载数据库,如果在此状态下打开数据库需要的操作:
Alter database open
mount是安装启动,做的操作主要是:
打开控制文件,确认数据文件和联机日志文件的位置,但此时不对数据文件和日志文件进行一致性,正确性等校验检查。
这种启动下可执行:
数据库日志归档、
数据库介质恢复、
使数据文件联机或脱机,
重新定位数据文件、重做日志文件。
------------------------------------------------------
statup open/startup启动实例>;装载数据库>;打开数据库
这种方式又执行了打开包括Redo log文件在内的所有数据库文件,并检查一致性等,进行crash恢复,这种方式下可访问数据库中的数据。
-----------------------------------------------------
statup force强制重启数据库
------------------------------------------------------------------------------
使用非缺省参数文件起动
STARTUP PFILE=参数文件
注:
远程启动数据时,系统寻找本地计算机的参数文件。
----------------------------------------------------
以限制方式打开数据
STARTUP RESTRICT
ALTER SYSTEM [ENABLE|DISABLE] RESTRICTED SESSION
只有RESTRICTED SESSION权限的用户才能登录。
-----------------------------------------------------
只读方式打开数据
ALTER DATABASE OPEN READ ONLY
22、Vni-2015
OEM配置:
配置->首选->首选身份证明选数据库节点输入系统的用户名密码
系统配置:
管理工具->本地安全策略->本地策略->用户权限分配授与作为批处理作业登陆
配置好服务器的节点(操作系统用户)和数据库的节点(数据库用户)
23、Agent启动不了
处理:
1。
备份%ORACLE_HOME%network/agent目录(ORACLE_HOME%代指Oracle软件的安装目录)
2。
删除%ORACLE_HOME%network/agent目录下所有的*.q文件
3。
再启agent
24、Oracle10G的oem
SetORACLE_SID环境变量
emctlstart/stopdbconsole
EnterpriseManagerDatabaseControlURL-(yyaccp):
http:
//yangshiwen:
1158/em
25、错误号ORA-01536:
spacequotaexceededfortablespace'ALCATEL'的解决办法
三个解决办法,任你选择:
(1)alteruserUSERNAMEquota100MonTABLESPACENAME;
(2)alteruserUSERNAMEquotaunlimitedonTABLESPACENAME;
(3)grantunlimitedtablespacetoUSERNAME;
26、ora-12514的错误。
解决方法:
1.打开/network/admin/listener.ora文件,找到:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(PROGRAM=extproc)
)
)
2. 添加:
(SID_DESC=
(GLOBAL_DBNAME=ORACLE)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(SID_NAME=ORACLE)
)
3.最后变成:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=ORACLE)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(SID_NAME=ORACLE)
)
)
4.保存文件,重启服务中的TNSListener,OK!
27、解决oem找不到节点数据库的三步骤
1.stoptheagent.
2.delete admin/snmp_ro.ora,admin/snmp_rw.oraandagent/services.orafile.
3.restarttheagent.
28、配置OEM步骤
1启动OracleServer
2删除Agent中的.q文件
3启动AgnetServer
4按书上的向导配置OEM
5停止Agent
6根据27问题,处理配置文件
7重新启动Agentserver
8进入OEM,右击节点刷新所有节点
29、对表分区了的分区字段的值不能更新修改
ACC[EPT]user_variable[NUM[BER]|CHAR|DATE]
[FOR[MAT]format_specification]
[DEF[AULT]default_value]
[PROMPTprompt_text|NOPR[OMPT]]
[HIDE]
ACCEPTp_namePROMPT'PleaseenterthePatientName:
'
ACCEPTp_addressPROMPT'Pleaseentertheaddress:
'
ACCEPTp_sexPROMPT'PleaseentertheSex:
'
ACCEPTp_agePROMPT'Pleaseentertheage:
'
ACCEPTp_contactPROMPT'Pleaseenterthecontactno:
'
ACCEPTp_first_visPROMPT'PleaseentertheFirstVisitDate:
'
ACCEPTp_last_visPROMPT'PleaseentertheLastVisitDate:
'
INSERTINTOpatient(no,name,address,sex,age,contact_no,first_visit,last_visit)
VALUES(patient_no.NEXTVAL,UPPER('&name'),'&p_address','&p_sex',&age,&contact,TO_DATE('&first_vis'),TO_DATE('&last_vis'))
ORA-00439:
未启用特性:
Partitioning的原因找到了
本人在使用分区创建表时,出现错误:
ORA-00439:
未启用特性:
Partitioning
怀疑是参数partition_view_enabled有问题,
showparameterspartition_view_enabled,value为fault,
尝试更改:
altersystemsetpartition_view_enabled=true;
但返回错误信息:
ORA-02096:
此选项的指定初始化参数不可修改
ORA-00980同义词转换无效
1删除同义词
2删除对应得对象
3重建对象
4重建同义词
29Oracle忘记密码
oracle忘记用户名和密码怎样恢复
用orapwd.exe命令,可以修改命令。
orapwdfile='/oracle/pwdsid.ora' password=123456
这个命令是修改sys用户的密码。
你把生成的文件覆盖原来的密码文件。
除sys和system其他用户的密码不会改变。
oracle忘记用户名和密码怎样恢复
su-oracle
sqlplus/nolog
conn/assysdba
startup(如果数据库不是处于启动状态则启动)
alterusersysidentifiedby123456
然后就可以使用sys用户密码登陆了
-->
呵呵,注意密码的规定写法
SQL>alterusersystemidentifiedby123456;
alterusersystemidentifiedby123456
*
ERRORatline1:
ORA-00988:
missingorinvalidpassword(s)
密码的第一个字符不能是数字的
PL/SQL连接Oracle10g失败
用PLSQLDev连接Oracle10g时,出现不能链接的问题,出现以下这个提示:
---------------------------
PL/SQLDeveloper-(Notloggedon)
--------