如何连接别人电脑上的ORACLE数据库
如何连接别人电脑上的ORACLE数据库
(以oracle9i版本为例,本机必须安装oralce9i的客户端)
第一步:orahome92-configuration and migration tools- net managers
第二步:在“服务命名”中点“+”
第三步:编辑一个你的服务名,(不是对方的数据库名)
第四步:默认选择TCP/IP
第五步:主机名填入对方的机器IP地址,端口默认(不要改)
第六步:服务名是对方的数据库名(要问对方),连接类型默认(不要改)
第七步:连接测试
一般测试结果需要“更改登录”
更改登录中,在用户名和口令中,录入对方数据库的用户名口令(你要访问的库)
测试成功!点击“关闭”
点“完成”
第八步:保存网络配置
在“E:\oracle\ora92\network\admin”中打开tnsnames.ora,可以看到配置情况:
MORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.34)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
第九步:到此,可以检查配置是否正确,是否连接成功
运行—输入sqlplus,在“请输入用户名”中键入 数据库连接方式
第十步:连接成功,可以通过PLSQL等客户端工具连接别人的数据库了!
Asp.Net通过ODBC连接Oracle数据库
本来有个项目是通过安装Oracle client然后让asp.net引用System.Data.OracleClient来访问Oracle数据库的,但是不知道为什么老是报:ORA-12170:连接超时的错误,(客户的服务器配置是:Windows Server 2008 R2 64bit 我刚开始安装的oracle client 是32bit ,最后报什么:require oracle version 8.1以上版本什么什么的。。。没办法我只好卸载这个版本,然后在Oracle官网上下载了一个Oracle Client 64bit来安装,安装好后就没有这个问题了),tnsping,ping,telnet Ip 1521都是通的,但是就是连接不上,不过别人都能连接上,唯独我的就不行,在网上搜索好多帖子,文章都不能解决问题,在客户那里的时候,客户的网络组人员说:网络都是通的,这不是网络原因!客户的数据库组的的人员说:数据库安装是对的,这不是数据库的原因!你tmd的这是在开玩笑吗,我也是醉了,在群里问群友叫他们帮我解决下这个问题,都说是tns的问题,但是tns都是通过net manager配置的,什么空格 什么东西都不存在的事,所以不是tns的问题,然后有个群友开玩笑的对我说:恭喜你,你见鬼了!最后群里有个大神,他给我了一个dbvis_windows_8_0_10软件,貌似是通过java来连接数据库的,然后引用一下:ojdbc6.jar就可以访问了!!!这是为何,我到现在都搞不清楚,不过我的项目是asp.net所以就算连接上了,对我也没什么用,所以我必须想想其它办法 来连接Oracle,然后满世界的在网上搜索文章,看看关于用什么办法不通过安装Oracle Client来访问Oracle!!!
终于被我找到了,可以通过ODBC来连接访问Oracle,然后参考了几篇网上的文章做好了配置,运行,确实可以了,不过在这个过程中也走了不少弯路:如下
1、不需要在本地,或者服务器上设备ODBC数据源,但是你非常通过本地这样设置的话,那你在web.config下的连接字符串可以写成这样:
<add key="Oracle" value="DSN=155oracle;Uid=zhangwei;Pwd=zhangwei"/>
这样你就可以访问数据库了,但是,我说但是,为什么说我不这样设置数据源呢!你想啊,难道用户要访问你的数据库都要设置本地ODBC数据源,显然这不是正确的办法,当然这样也不错,可以做为测试用,但是不能做为生产用。那么真正在生产环境中我们的连接字符串如何写呢,如下:
<add key="Oracle" value="Driver={Microsoft ODBC for Oracle};Server=192.168.1.155/znxj;Uid=zhangwei;Pwd=zhangwei"/>
注意:上面的斜体部分,如果你部署在服务器上这个ip就不需要了。
总结:
1、在配置ODBC数据源的时候不是用户名写错,就是服务器写错,反正自己当时也不知道哪个是对的,最后能成功也是靠我自己 的经验慢慢改对的,网上有些文章也不全对,这点希望大家有所保留。
参考文章:
ODBC DSN-Less
C#/.NET连接各类主流数据库(SQL Server,MySQL,Microsoft Access,DB2,Oracle)的连接字符串整理
ODBC数据源连接Oracle数据库示例
通过 ODBC 来连接 Oracle 数据库
C#连接Oracle数据库的四种方法
如何连接别人电脑上的ORACLE数据库
如何连接别人电脑上的ORACLE数据库
(以oracle9i版本为例,本机必须安装oralce9i的客户端)
第一步:orahome92-configuration and migration tools- net managers
第二步:在“服务命名”中点“+”
第三步:编辑一个你的服务名,(不是对方的数据库名)
第四步:默认选择TCP/IP
第五步:主机名填入对方的机器IP地址,端口默认(不要改)
第六步:服务名是对方的数据库名(要问对方),连接类型默认(不要改)
第七步:连接测试
一般测试结果需要“更改登录”
更改登录中,在用户名和口令中,录入对方数据库的用户名口令(你要访问的库)
测试成功!点击“关闭”
点“完成”
第八步:保存网络配置
在“E:\oracle\ora92\network\admin”中打开tnsnames.ora,可以看到配置情况:
MORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.34)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
第九步:到此,可以检查配置是否正确,是否连接成功
运行—输入sqlplus,在“请输入用户名”中键入 数据库连接方式
第十步:连接成功,可以通过PLSQL等客户端工具连接别人的数据库了!
关于安装Oracle——安装流程
这次安装Oracle出现了很多错误,在此记下以防再次出错,也记录下我整个的安装流程
1.下载
我下载安装的是企业版
2.安装
解压完安装包运行setuo.exe就可以
首先是安全更新(安全更新我直接点击下一步跳过了)
这一项选择创建和配置数据库
因为只是在单机安装,所以选择了桌面类
本来想使用现有windows用户来着,但是一直提示没有管理员权限,就直接创建了一个新的用户
用户名:oracle 密码:123456
接下来就是确认安装目录,和全局数据库名。注意!这个全局数据库名很重要,涉及到jdbc连接oracle的连接语句
接下来就是正式安装了,安装好后检验是否安装成功。
3.检查安装
刚开始按照书上的流程来操作 ,打开SQL Developer新建连接就出现如下错误
百度了好久说让装旧版本的SQL Developer,装好后成功创建连接
之后发现,只要创建本地连接就可以,根本不需要那么麻烦
登录成功:
用Navicat连接oracle也报好多错误,以下是连接属性
接下来就是关于修改用户名密码, 创建新用户的
为系统在安装Oracle时设定的System sys等用户更改密码:
登录sqlplus/nolog
连接数据库:connect /as sysdba
修改用户密码(例:修改sys用户密码为123):alter user sys identified by 123;
oracle 12c里面本身就自带了很多用户,别人给的用起来不是很习惯,自己创建一个用户,使用起来比较方便也容易记住。创建用户的操作:
create user c##用户名 identified by 密码;
不要忘记”;”,sql语句以分号为结尾标志,c##也不能省略。
一般情况下,直接grant connect,resource to username;赋予用户所有的权限grant dba to username; 这种是赋系统管理员的权限
4.JDBC连接oracle数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* oracle连接数据库的工具类
*
*/
public class DBUtil {
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//找到oracle驱动器所在的类
String url="jdbc:oracle:oci8:@orcl"; //URL地址
String username="C##test";
String password="test";
conn=DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(PreparedStatement pstmt){
if(pstmt !=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs){
if(rs !=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
好多用 url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl"; //连接字符串,但是我用thin连接的时候总是报拒绝连接的错误,就换成oic8了,遇到同样错误的可以试一下这个方法,可以解决拒绝连接的问题。
到此我的oracle配置完成
ArcCatalog中通过ArcSDE向Oracle数据库中导入数据
将数据导入到Oracle指定的表空间的具体内容如下:
首先,在ArcCatalog中建立指定表空间的数据库连接(要以指定表空间的用户登录);
然后,在ArcCatlog中定位到数据源,选中并拷贝图层;
最后,再定位到数据库连接,最好用右键菜单粘贴就行了。
如果往指定表空间的中的已有图层添加数据,在该图层上用右键菜单Load命令。
上图所示内容表明已经建立了数据库连接。
疑问1:"那为什么在这里面没有我所建的表空间啊,明明已经新建了表空间” 。
这是oracle的内容了。你建立一个新的表空间,还要建立属于这个表空间的用户,然后以这个用户进行登录,进去的就是你建的表空间。如果你登录的用户名是属于其他表空间的,那进去后就是其他表空间。
疑问2:“我已经授权给我的数据库用户,为什么还是找不到我建的表空间?是不是要建在特定文件夹里?
表空间和文件夹没有直接关系,建在哪里都一样。你以什么用户登录,进入的就是用户所属的表空间。建议你先了解一下Oracle的基本常识。
参考文章
1.评论员54321 , 怎样在ArcCatalog中通过ArcSDE往Oracle数据库中导入数据,怎样导入到指定的表空间。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5713823.html,如需转载请自行联系原作者
ArcCatalog中通过ArcSDE向Oracle数据库中导入数据
将数据导入到Oracle指定的表空间的具体内容如下:
首先,在ArcCatalog中建立指定表空间的数据库连接(要以指定表空间的用户登录);
然后,在ArcCatlog中定位到数据源,选中并拷贝图层;
最后,再定位到数据库连接,最好用右键菜单粘贴就行了。
如果往指定表空间的中的已有图层添加数据,在该图层上用右键菜单Load命令。
上图所示内容表明已经建立了数据库连接。
疑问1:"那为什么在这里面没有我所建的表空间啊,明明已经新建了表空间” 。
这是oracle的内容了。你建立一个新的表空间,还要建立属于这个表空间的用户,然后以这个用户进行登录,进去的就是你建的表空间。如果你登录的用户名是属于其他表空间的,那进去后就是其他表空间。
疑问2:“我已经授权给我的数据库用户,为什么还是找不到我建的表空间?是不是要建在特定文件夹里?
表空间和文件夹没有直接关系,建在哪里都一样。你以什么用户登录,进入的就是用户所属的表空间。建议你先了解一下Oracle的基本常识。
参考文章
1.评论员54321 , 怎样在ArcCatalog中通过ArcSDE往Oracle数据库中导入数据,怎样导入到指定的表空间。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5713823.html,如需转载请自行联系原作者
CS系统框架二(数据库配置)
在数据库配置方面暂时采用了将信息写入App.Config里面,大致分为Sql Server,Oracle,Access,MySql等,如果用户登录的时候系统发现连不上数据库那么就提示用户对数据库进行配置一下,但是总觉得将连接信息写入App.Config里面有点不安全,那个App.Config文件就在程序的安装目录里面,别人找到了还不是照样可以获取数据库密码么,不知道是否还有其他好点的办法,如果有朋友对这个问题比较有见解的话麻烦支个招,QQQ。
ORA-600(2662)错误的重现和解决(一)
前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。
由于是在别人的机器上操作,而且很多操作都是摸索进行,因此没有将操作记录下来。现在打算重现一下问题并简单记录解决过程。
这篇首先尝试重现问题。
现有环境,Oracle10.2.0.3 for windows数据库。为了完全模拟问题的方式情况,首先创建STANDBY数据库。
在创建STANDBY数据库之前,首先对数据库进行备份。这样一旦测试出现问题,导致被损坏的数据库无法恢复,也可以通过这个备份来恢复数据库。
下面为创建STANDBY数据库进行准备,这里只列出操作就不详细描述了:
SQL> ALTER DATABASE FORCE LOGGING;
数据库已更改。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ytk,ytks)';
系统已更改。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=E:\oracle\oradata\YTK\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ytk';
系统已更改。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=ytks LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ytks';
系统已更改。
SQL> ALTER SYSTEM SET FAL_SERVER=ytks;
系统已更改。
SQL> ALTER SYSTEM SET FAL_CLIENT=ytk;
系统已更改。
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
系统已更改。
创建PFILE:
SQL> CREATE PFILE='E:\ORACLE\ORADATA\YTKS\INITYTKS.ORA' FROM SPFILE;
文件已创建。
添加并修改下面的初始化参数:
*.audit_file_dest='E:\oracle\admin\ytks\adump'*.background_dump_dest='E:\oracle\admin\ytks\bdump'*.control_files='E:\ORACLE\ORADATA\YTK_S\CONTROLFILE\CONTROL01.CTL'*.core_dump_dest='E:\oracle\admin\ytks\cdump'*.user_dump_dest='E:\oracle\admin\ytks\udump'*.fal_client='ytks'*.fal_server='ytk'*.log_archive_dest_1='LOCATION=E:\oracle\oradata\ytks\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ytks'*.log_archive_dest_2='SERVICE=ytk LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ytk'standby_archive_dest='LOCATION=E:\oracle\oradata\ytks\archivelog'db_unique_name='ytks'lock_name_space='ytks'db_file_name_convert=('E:\oracle\oradata\ytk', 'E:\oracle\oradata\ytks')log_file_name_convert=('E:\oradle\oradata\ytk', 'E:\oracle\oradata\ytks')
需要注意一点,LOG_FILE_NAME_CONVERT参数设置有误,E:\oracle被写成了E:\oraDle。这个错误意味着LOG_FILE_NAME_CONVERT参数失去了意义。且由于PRIMARY数据库和STANDBY数据库处于同一台服务器上,这样STANDBY数据库在启动RESETLOG后,会将PRIMARY数据库的LOGFILE清除掉。
关闭数据库,采用冷备份的方式,将数据文件拷贝到STANDBY数据库的所在目录:
SQL> SHUTDOWN IMMEDIATE数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。
E:\>COPY E:\ORACLE\ORADATA\YTK\DATAFILE\* E:\ORACLE\ORADATA\YTKS\DATAFILEE:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSAUX_1TDY3TRF_.DBFE:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBFE:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_TEMP_1TDY49L2_.TMPE:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_UNDOTBS1_1TDY3GNZ_.DBFE:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_USERS_1TDY4JMK_.DBFE:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_YANGTK_1THCKSRW_.DBFE:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_YANGTK_22MWCD5C_.DBFE:\ORACLE\ORADATA\YTK\DATAFILE\TEST01.DBF已复制 8 个文件。
E:\>COPY E:\ORACLE\ORADATA\YTK\ONLINELOG\* E:\ORACLE\ORADATA\YTKS\ONLINELOGE:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOGE:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOGE:\ORACLE\ORADATA\YTK\ONLINELOG\REDO03.LOG已复制 3 个文件。
启动PRIMARY数据库创建STANDBY CONTROLFILE:
SQL> STARTUPORACLE 例程已经启动。
Total System Global Area 251658240 bytesFixed Size 1290012 bytesVariable Size 163578084 bytesDatabase Buffers 79691776 bytesRedo Buffers 7098368 bytes数据库装载完毕。数据库已经打开。SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'E:\ORACLE\ORADATA\YTKS\CONTROLFILE\CONTROL01.CTL';
数据库已更改。
E:\>COPY E:\ORACLE\10.2\DATABASE\PWDYTK.ORA E:\ORACLE\10.2\DATABASE\PWDYTKS.ORA已复制 1 个文件。
拷贝数据库密码文件后,下面建立ORACLE的服务:
E:\>ORADIM -NEW -SID YTKS -STARTMODE MANUAL实例已创建。
编辑tnsnames.ora和listener.ora文件,添加STANDBY数据库信息,并重启监听。
下面启动STANDBY数据库到MOUNT状态:
SQL> CONN /@YTKS AS SYSDBA已连接到空闲例程。SQL> CREATE SPFILE FROM PFILE='E:\ORACLE\ORADATA\YTKS\INITYTKS.ORA';
文件已创建。
SQL> STARTUP MOUNTORACLE 例程已经启动。
Total System Global Area 251658240 bytesFixed Size 1290012 bytesVariable Size 83886308 bytesDatabase Buffers 159383552 bytesRedo Buffers 7098368 bytes数据库装载完毕。
由于参数LOG_FILE_NAME_CONVERT设置有误,将STANDBY数据库置于接受归档状态时,后覆盖PRIMARY数据库的日志,从而导致PRIMARY数据库出现错误。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
数据库已更改。
下面关闭PRIMARY数据库就会出现错误:
SQL> CONN /@YTK AS SYSDBA已连接。SQL> SHUTDOWN IMMEDIATEORA-03113: 通信通道的文件结束
SQL> CONN /@YTK AS SYSDBA已连接到空闲例程。SQL> STARTUPORA-03113: 通信通道的文件结束
检查alert文件已经出现了错误:
Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3588.trc:ORA-00314: 日志 1 (用于线程 1) 要求的序号 1333 与 0 不匹配ORA-00312: 联机日志 1 线程 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOG'
Tue Dec 11 16:14:05 2007Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3588.trc:ORA-00314: 日志 1 (用于线程 1) 要求的序号 1333 与 0 不匹配ORA-00312: 联机日志 1 线程 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOG'
Tue Dec 11 16:14:05 2007LGWR: terminating instance due to error 314Instance terminated by LGWR, pid = 3588
至此,数据库问题已经模拟出来。下一篇会介绍问题的解决。
Oracle数据库启动时:ORA-00119: invalid specification for system parameter LOCAL_LISTENER; ORA-00132错误解决
问题描述:
1. em打开中提示
https://localhost:1158/em/console/database/instance/repDown?target=orclweng&type=oracle_database
ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID (DBD ERROR: OCIServerAttach)
2.启动oracle数据库失败
启动oracle数据库失败无明显提示,在命令行中可以看到如下的错误提示内容。
C:\Users\Murphy>sqlplus / as sysdba;
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 10月 23 10:24:01 2016
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup;
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_ORCLWENG'
3. 在数据库的Net Configuration Assistant中进行连接测试,提示如下错误。
ORA-12505
4. 平台
Win7 64位,Oracle database server 11gr2 64位,相应客户端为32位,32位pl/sql.
解决方案:
如上命令行中的提示,在Net Configuration Assistant中建立一个“LISTENER_ORCLWENG”的本地网络服务名配置即可。
同时查看以下两个目录下的tnsnames.ora中的内容是否有相同的项。
E:\Files\Oracle\product\11.2.0\client_1\network\admin
E:\Files\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
PS: 不推荐使用注册表修改数据库的自动启动方式,再在命令行中启动"SQL> startup;".
2017-2-24 1014 add
如果修改后,你连SQLplus都进不了还是不行,建议重启一下系统,然后在sqlplus, 输入账号密码登录Oracle。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5989210.html,如需转载请自行联系原作者
Oracle数据库的热备份与完整恢复测试
数据库热备份与完整恢复测试:
1.首先,必需保证数据库在归档模式下。
2.热备份数据文件,通过alter tablespace xxx begin backup把表空间设为备份状态,可以手工或在sql下运行host copy把数据文件复制到指定地方,最后把表空间改为正常状态(alter tablepace xxx end backup)。
3.数据库恢复:使用语句rcover datafile,alter database open即可以实现数据库的完整恢复。
具体的步骤如下:
SQL> conn / as sysdba
已连接。
//确定数据库在归档模式下。
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
//查询表空间对应的数据文件,一般表空间名跟对应数据文件名是相同的,可以跳过这一步。
SQL> select v$tablespace.name,v$datafile.name from v$tablespace, v$datafile
2 where v$tablespace.ts#=v$datafile.ts#;
NAME
------------------------------
NAME
--------------------------------------------------------------------------------
SYSTEM
F:\ORACLE\ORADATA\EBOOK\SYSTEM01.DBF
UNDOTBS1
F:\ORACLE\ORADATA\EBOOK\UNDOTBS01.DBF
CWMLITE
F:\ORACLE\ORADATA\EBOOK\CWMLITE01.DBF
DRSYS
F:\ORACLE\ORADATA\EBOOK\DRSYS01.DBF
EXAMPLE
F:\ORACLE\ORADATA\EBOOK\EXAMPLE01.DBF
INDX
F:\ORACLE\ORADATA\EBOOK\INDX01.DBF
ODM
F:\ORACLE\ORADATA\EBOOK\ODM01.DBF
TOOLS
F:\ORACLE\ORADATA\EBOOK\TOOLS01.DBF
USERS
F:\ORACLE\ORADATA\EBOOK\USERS01.DBF
XDB
F:\ORACLE\ORADATA\EBOOK\XDB01.DBF
已选择10行。
//将表空间设为备份状态.
SQL> alter tablespace system begin backup;
表空间已更改。
//将数据文件备份到目录f:\oracle\backuparea下.
SQL> host copy f:\oracle\oradata\ebook\system01.dbf f:\oracle\backuparea\
已复制 1 个文件。
SQL> alter tablespace system end backup;
表空间已更改。
//建表test的目的为测试此恢复是否是完整恢复。
SQL> create table scott.test(t int);
表已创建。
SQL> insert into scott.test values(1);
已创建 1 行。
SQL> insert into scott.test values(2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
//删除system01.dbf或移动到其他目录造成数据库崩溃。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请大家参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: ’F:\ORACLE\ORADATA\EBOOK\SYSTEM01.DBF’
//将备份的数据文件复制回目录f:\oracle\oradata\ebook\下.
SQL> $ copy f:\oracle\backuparea\system01.dbf f:\oracle\oradata\ebook\
已复制 1 个文件。
//恢复数据文件system01.dbf。
SQL> recover datafile ’f:\oracle\oradata\ebook\system01.dbf’;
完成介质恢复。
SQL> alter database open;
数据库已更改。
//此说明数据库是完整恢复了。
SQL> select * from scott.test;
T
----------
1
2
总结:
1.热备份必须在数据库归档模式下进行
2.在备份的同时,数据库的用户可以进行操作。因此,数据库对应的物理文件的内容是不断变化的,对这些物理文件内容的更新是保留到有关操作已经写到重做日至文件中
后再进行。(这句引自别人叙述,我对后半句正确与否存在疑问,希望大家讨论)。
3.归档日志必须是备份后的所有日至才可以实现数据库的完全恢复。
4.可以备份除临时文件以外的所有数据文件,如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复方法
5。 特别当损坏的不是系统表空间,可以先将损坏的表空间文件脱机,这时可以在恢复损坏文件前打开
数据库,再完成恢复。例如:
SQL> alter tablespace tools begin backup;
表空间已更改。
SQL> $ copy f:\oracle\oradata\ebook\tools01.dbf f:\oracle\backuparea
已复制 1 个文件。
SQL> alter tablespace tools end backup;
表空间已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
//删除tools01.dbf造成数据库无法正常启动.
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 8: ’F:\ORACLE\ORADATA\EBOOK\TOOLS01.DBF’
SQL> alter database datafile ’f:\oracle\oradata\ebook\tools01.dbf’ offline;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> $ copy f:\oracle\backuparea\tools01.dbf f:\oracle\oradata\ebook\
已复制 1 个文件。
SQL>recover datafile ’f:\oracle\oradata\ebook\tools01.dbf’;
介质恢复完成。
本文转自tiasys博客园博客,原文链接:http://www.cnblogs.com/tiasys/archive/2008/04/15/1154472.html,如需转载请自行联系原作者