Oracle常见问题及其解决方法(doc 10页)
iSQL*Plus URL:http://10.10.43.137:5560/isqlplus
Enteprise Manager 10g Database Control URL:
http://information:5500/em
OracleDBConsoleorcl不能启动,报错误码2解决策略
解决策略一:
修改你的主机参数文件
修改一下:
C:\WINDOWS\system32\drivers\etc下的host文件.
如果没有的话就自己加一个IP和你的计算机名对应,如果已有了就把你的IP地址和你的计算机名对应起来.
如:
# copyright (c) 1993-1999 microsoft corp.
#
# this is a sample hosts file used by microsoft tcp/ip for windows.
#
# this file contains the mappings of ip addresses to host names. each
# entry should be kept on an individual line. the ip address should
# be placed in the first column followed by the corresponding host name.
# the ip address and the host name should be separated by at least one
# space.
#
# additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# for example:
#
# 102.54.94.97 https://www.sodocs.net/doc/1a16267141.html, # source server
# 38.25.63.10 https://www.sodocs.net/doc/1a16267141.html, # x client host
127.0.0.1 localhost
10.10.43.137 information
解决策略二:
启动电脑,到登陆界面,电脑报有个服务启动失败,电脑没有新装软件,周六还没有问题,怎么突然报这个错误?于是到事件查看器中看看什么问题,显示是OracleDBConsoleorcl启动失败,到服务里一看,确实没有启动。手动启动一下,报错误码2
我装的是10g,于是到ORACLEproduct10.2.0db_1test_orclsysmanlog目录看一下log里写了什么,打开OracleDBConsoleorclsrvc.log.
log最后记录的是:
日志让看emdbconsole.nohup文件,目录里没有这个文件呀。
手动执行一下emctl.bat,于是启动控制台,执行emctl.bat istart dbconsole,报错,ORACLE_SID 没有定义,打开emctl.bat看看,这里是定义环境变量的地方,其中已经设置了这些:if not defined REMOTE_EMDROOT (set ORACLE_HOME=Ec:oracleproduct10.2.0db_1)
if not defined REMOTE_EMDROOT (set EMDROOT=%ORACLE_HOME%)
if defined REMOTE_EMDROOT (set ORACLE_HOME=%REMOTE_EMDROOT%)
if defined REMOTE_EMDROOT (set EMDROOT=%ORACLE_HOME%)
if defined REMOTE_EMDROOT (set LOCAL_EMDROOT=c:oracleproduct10.2.0db_1)
……
后边还有一条设置:
if not defined DBCONSOLE_SERVICE_NAME (set DBCONSOLE_SERVICE_NAME=OracleDBConsole%ORACLE_SID%),用到了ORACLE_SID,但没有看到前面设置,只能手动设置ORACLE_SID试试,于是加了一条设置:
if defined REMOTE_EMDROOT (set ORACLE_SID=orcl) orcl是我的数据库实例名
到服务中启动OracleDBConsoleorcl,ok,没有报错;
重新启动计算机,也没有报错,OracleDBConsoleorcl服务也启动了。
系统出错的解决
今天机器死机了,然后OracleDBConsoleORCL服务就起不来了,在一阵瞎搞后,还终于被我找到了解决办法,方法如下:
运行Database Configuration Assistant程序,选择“配置数据库选项”重新配置Database Control 配置工具,配置完后端口号会变(我原来是1158,后来被改为5500),可以在.\oracle\product\10.2.0\db_1 \cfgtoollogs\emca\orcl\文件夹下,最后生成的一个日志文件下找到新的Database Control 的URL;运行即可。
原来经常改IP会导致OracleDBConsoleORCL无法启动,一下是正规的解决方案:
修改你的主机参数文件
修改一下:
C:\WINDOWS\system32\drivers\etc下的host文件.
如果没有的话就自己加一个IP和你的计算机名对应,如果已有了就把你的IP地址和你的计算机名对应起来.
如:
# copyright (c) 1993-1999 microsoft corp.
#
# this is a sample hosts file used by microsoft tcp/ip for windows.
#
# this file contains the mappings of ip addresses to host names. each
# entry should be kept on an individual line. the ip address should
# be placed in the first column followed by the corresponding host name.
# the ip address and the host name should be separated by at least one
# space.
#
# additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
系统找不到指定的路径。
////以上是启动时的错误,我的数据库是oracle10.2.0.1.0 的版本
解决方法:
在命令行输入
$ emca –config dbcontrol db
输入以下信息:
SID:XXXX
Listener port number: 1521
Sys 口令:******
……
好了,再次emctl start dbconsole EM就可以正常运行了!
Oracle 10gR2–EMCA常用命令
在10g 中,我们可能会经常遇到OEM不能正常使用的问题,但导致问题的原因不尽相同,最后绝大多数问题可以通过emca 这个命令来解决,详细的说明可以查看连机帮助,下面给出一些常用的命令,及实例步骤.
创建一个EM资料库
emca -repos create
重建一个EM资料库
emca -repos recreate
删除一个EM资料库
emca -repos drop
配置数据库的 Database Control
emca -config dbcontrol db
删除数据库的 Database Control配置
emca -deconfig dbcontrol db
重新配置db control的端口,默认端口在1158
emca -reconfig ports
emca -reconfig ports -dbcontrol_http_port 1160
emca -reconfig ports -agent_port 3940
先设置ORACLE_SID环境变量后,启动EM console服务
emctl start dbconsole
先设置ORACLE_SID环境变量后,停止EM console服务
emctl stop dbconsole
先设置ORACLE_SID环境变量后,查看EM console服务的状态
emctl status dbconsole
配置dbconsole的步骤
emca -repos create
emca -config dbcontrol db
emctl start dbconsole
重新配置dbconsole的步骤
emca -repos drop
emca -repos create
emca -config dbcontrol db
emctl start dbconsole
Oracle建立数据的方法
方法一:打开命令提示符,进入DOS后输入dgmgrl
方法二:SQL*Plus命令行方式
方法三:数据库配置助手(DBCA,database configuation assistant)图形方式
方法四:网络配置助手(ONCA,Oracle net configuration Assistant)与网络管理
器(ONM,Oracle Net Manager)图形方式
方法五:企业管理器(OEM)图形方式
启动和关闭数据库
数据库的启动与关闭与例程(instance)的启动和关闭是有区别的,它们并不是一回事。严格地讲,后者是前者的一个步骤,而不是全部。但由于它们是紧密相连的,所以在实际中往往将它们等同起来。
在启动数据库之前应该启动监听程序,否则就不能利用命令行方式来管理数据库,包括启动和关闭数据库。虽然数据库正常运行,但如果没有启动监听程序,客户端就不能连接到数据库,在服务器端就不能使用OEM和iSQL*Plus工具。
启动和关闭监听程序可以使用命令行方式,也可以在windows服务中启动和关闭,结果一样。
例如可以在命令提示符下,输入 lsnrctl start 来启动用lsnrctl stop来关闭。也可以在计算机管理服务中对OracleOraDb10g_home1TNSListener进行关闭和启动操作。
在命令提示符下输入sqlplus /noolog
D:\oracle\product\10.1.0\db_1\NETWORK\ADMIN用于查找不同数据库的ERROR - ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务的问题
解决方法(1)
# listener.ora Network Configuration File:
D:\oracle\product\10.1.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.1.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME =wangweijian)
(ORACLE_HOME = D:\oracle\product\10.1.0\db_1) (SID_NAME =wangweijianID)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = information)(PORT = 1521)) )
)
)
(2)
# tnsnames.ora Network Configuration
File:D:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\tnsnames.ora # Generated by Oracle configuration tools.
WANGWEIJIAN= //看看这个地方是否正确
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = information)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =WANGWEIJIAN) //将小写改成了大写。
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
错误:IO异常:The Netword Adapter could not establish the connection
产生的原因:监听程序进程没有启动或输入了错误的网络服务名产生的错误提示。ERROR - ORA-12541: TNS: 没有监听程序
产生的原因:例程未打开
在使用Oracle sql*plus时,出现的错误提示:SP2-0103: SQL 缓冲区中无可运行的程序,在输入sql语句时,如果出现这个错误提示则只需输入如下命令即可:set serveroutput on
为用户解锁的sql语句:alter user scott account unlock;
用scott用户登录的时候出现的错误:ORA-01017: invalid username/password; logon denied。此时无法登录。这主要是因为scott的密码错误的原因。可能默认的scott密码不正确的原因。用下面的两条语句即可解决。
alter user scott account unlock;
alter user scott identified by wangweijian;
创建用户create user wangweijian identified by wwj123
删除用户出现的问题:(ERROR:ORA-01940: cannot drop a user that is currently connected)当前用户的系统进程还存在,所以无法删除,这时应该找到进程并kill掉。
1、查询此用户的会话进程,
SQL〉SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='wangweijian';
SID SERIAL#
---------- ----------
24 25341
86 18117
2、结束此用户的所有会话
SQL>ALTER SYSTEM KILL SESSION '24,25341';
System altered.
SQL>ALTER SYSTEM KILL SESSION '86,18117';
System altered.
3、删除用户
SQL〉DROP USER USER1 CASCADE;
数据库的备份与恢复
1 数据库的脱机备份与恢复
备份文件的位置与清单:
*参数文件的位置D:\oracle\product\10.1.0\db_1\database中的三个ora文件
*查询数据字典视图V$control可以确认控制文件的位置与清单
Select status,name from V$controlfile;
STATUS NAME
D:\ORACLE\PRODUCT\10.1.0\OR
ADATA\AUST\CONTROL01.CTL
D:\ORACLE\PRODUCT\10.1.0\OR
ADATA\AUST\CONTROL02.CTL
D:\ORACLE\PRODUCT\10.1.0\OR
ADATA\AUST\CONTROL03.CTL
*查询数据字典视图dba_data_files可以确认数据文件的位置与清单。
Select status,file_name from dba_data_files;
STATUS FILE_NAME
AVAILABLE D:\ORACLE\PRODUCT\10.1.0\OR ADATA\AUST\USERS01.DBF
AVAILABLE D:\ORACLE\PRODUCT\10.1.0\OR ADATA\AUST\SYSAUX01.DBF
AVAILABLE D:\ORACLE\PRODUCT\10.1.0\OR ADATA\AUST\UNDOTBS01.DBF
AVAILABLE D:\ORACLE\PRODUCT\10.1.0\OR ADATA\AUST\SYSTEM01.DBF
*查询数据字典视图V$logfile可以确认联机重做日志文件的位置与清单
Select group#,status,member from v$logfile;
GRO UP# STAT
US
MEMBER
3 D:\ORACLE\PRODUCT\10.1.0\ORADA TA\AUST\REDO03.LOG
2 D:\ORACLE\PRODUCT\10.1.0\ORADA TA\AUST\REDO02.LOG
1 D:\ORACLE\PRODUCT\10.1.0\ORADA TA\AUST\REDO01.LOG
脱机备份的步骤:
1)打开命令提示符,在命令提示符下输入
sqlplus /NOLOG命令后按回车键,以不连接数据库的方式启动SQL*PLUS
2)以具有sysDBA或SYSOPER权限的数据库用户
(如system或sys)、sysdba的连接身份连接到oracle
3)以immediate方式关闭数据库,以便进行脱机
备份。出现以下字样:
SQL>shutdown immediate
数据库已经关闭
已经卸载数据库
Oracle例程已经关闭
4)使用操作系统命令或工具,按照备份文件清
单备份所需要备份的文件,不得漏掉一个。
5)备份完成以后,以open方式启动数据库,以便用户可以继续使用数据库。
使用数据泵进行逻辑备份与恢复
Oracle10g中引入了最新的数据泵(data pump)技术,即expdp和imppd。在oracle以前的版本中,通常使用exp和imp实用程序进行导出导入数据。现在,除了可以继续使用exp和imp之外,还可以使用expdp和imppd来进行导入导出数据。由于expdp和imppd的速度优于exp和imp。所以oracle建议使用expdp和imppd 进行导出导入数据。
注意:expdp和imppd都是服务器端实用程序,只能在oracle服务器端使用。而exp和imp是客户端实用程序,既可以在客户端使用,也可以在服务器端使用。
导出数据是指将数据库中的数据导出到一个操作系统文件(即转储文件)中,导入数据是指将转储文件中的数据导入到数据库中。
数据泵的作用a 实现逻辑备份与恢复b可以在数据库方案之间传输数据c可以在数据库
之间传输数据d数据库应用软件的版本升级e消除磁盘碎片。
在使用expdp和imppd实用程序时,其转储文件只能存放在DIRECTORY对象指定的OS目录中,而不能直接指定OS目录。因此,使用时必须首先创建DIRECTORY对象,并且运行expdp和imppd实用程序的数据库用户授予使用DIRECTORY对象的权限。具体代码如下:
SQL>connect sys/wangweijian as sysdba SQL>create directory dump_dir ad
'e:\dump';
SQL>grant read,write on directory dump_dir to system,scott;
使用expdp导出数据
一估计转储文件的大小:导出之前估计一下转储文件的大小,以免发生空间不足的现象。例子:C:\>expdp system/password fully=y estimate_only=y estimate=statistics nologfile=y
二导出表是指将一个或多个表的结构及其数据导出到转储文件中。导出表时每次只能导
出一个方案中的表。
C:\>expdp scott/wangweijian
directory=dump_dir dumpfile=scotttab.Dmp logfile=scottlog
三导出方案导出方案是指将一个或多个
方案的所有对象结构及数据导出到转储文件中。
C:\>expdp scott/wangweijian
directory=dump_dir dumpfile=mysuer.Dmp logfile=myuser.Log schemas=myuser
job_name=exp_myuser_schema
四:导出数据库,将数据库中的所有对象及数据导出到转储文件中。
热备份之前要做的修改:(只有归档才能热备份)
a.查看是否为归档:archive log list;
b.修改一下:alter system set
log_archive_start=true scope=spfile
c.关掉数据库:shutdown immediate(关掉数据
文件)
d.调用数据库的控制文件 start mount
e.修改:Alter database archivelog
f.注意这一步:archive log start;
g.启动数据库:alter database open
h.备份工作开始
这里还需要注意,如果将归档模式改为非归档模式,这时候应该改alter database noarchivelog; 其他步骤同上。
五在修改文档为归档模式时,shutdown immediate(关掉数据文件),然后再startup mount。可是出现的错误提示SP2-0310:无法打开文件"mount.sql"。这时,应该先startup,然后再shutdown abort,然后再 startup mount。六,在命令提示符下命令结束用‘;’,往往不被认可。如mkdir wangweijian; cd wangwejian;如果用了分号就会出错的。
七在命令提示符下,建立sqlplus的连接。通过@E:\chuntian\bak.Sql
这样可以执行多条系统性的语句。这样也可以重复利用。如bak.Sql文件如下。
connect wangweijian/wangweijian as sysdba shutdown immediate
host copy
D:\oracle\product\10.1.0\oradata\aust\*.* e:\hotbackup\
host copy
D:\oracle\product\10.1.0\db_1\dbs\initdw. ora e:\hotbackup\dbs
host copy
D:\oracle\product\10.1.0\db_1\database\PW DaustID.ora e:\hotbackup\database
startup