重装系统后,怎么恢复oracle数据库

重装系统后,怎么恢复oracle数据库,第1张

任何软件都有可能在有意或无意的情况下被重新安装,如Oracle重装后数据库怎么恢复呢?情况发生在你是无意的情况下!ORACLE数据库恢复的方法我们经常会用到,下面就为您介绍重装系统后ORACLE数据库恢复的方法,希望对您学习ORACLE数据库恢复方面能有所帮助。\x0d\\x0d\我的电脑突然挂了,不得不重装系统,不过我的ORACLE装在了D盘,所有的文件都还在,我相信一定能够恢复,直到搞定工作,我才开始整我的数据库,花了两天时间,终于恢复了,庆祝一下,同时总结一下,希望有遇到同样问题的朋友能够快速搞定此类问题\x0d\\x0d\第一种:\x0d\\x0d\首先,备份数据库(X:\oracle\oradata)下的数据文件,重新命名即可(否则装数据库的时候会提示sid已存在)。重新安装数据\x0d\库,当然数据库的名字就是你要恢复的名字。安装完成后,打开控制面板,停止oracle的服务。把(X:\oracle\oradata)下新生成的文件\x0d\改名,把原先目录下的文件恢复名字。再重新启动oracle服务和监听。用sys/as dba \x0d\登陆数据库,可能会提示权限不够(ora-01031)修改(X:\oracle\ora92\network\admin \x0d\)文件夹下的sqlnetora文件,添加SQLNETAUTHENTICATION_SERVICES= \x0d\(NTS),增加权限。登陆进去后,打开table提示不能打开。打开common页,执行命令alert database \x0d\open;这时再刷新table,发现原先的表可以打开了。恢复成功了。再用原先数据库的普通用户进入。发现一切正常。至此,大功告成。\x0d\\x0d\第二种:\x0d\\x0d\1、首先,将原来的ORACLE文件夹改名,原来的路径是D:/oracle我暂时改成D:/oracle_old找来ORACLE(我用\x0d\的是ORACLE 9I)安装光盘,将ORACLE安装在原来安装的目录下,这样恢复起来更加方便,主要是注册表的内容不用修改。\x0d\\x0d\2、安装完了之后,系统中又有一个可以使用的ORACLE了。这个时候要做的就是将原来的文件和数据恢复过来。第一步,先关闭ORACLE的所\x0d\有已经启动的项目,在"服务"里面逐一关闭。然后,将安装目录改名。我现在用的是D:/oracle改成D:/oracle_new再将D:\x0d\/oracle_old改成D:/oracle \x0d\这样理论上说从物理层面恢复了ORACLE了。但是我们发现,现在还不能启动ORACLE的监听程序和服务程序。我们还要从逻辑上解决。\x0d\\x0d\3、在dos环境下执行一个删除命令:oradim -delete -sid mm,其中mm为创建oracle时候创建的实例 \x0d\建议执行这个命令后重新启动机器,重启后就可以建立和原来实例名相同的实例。当然你懒,不重新启动也可以,但是你的实例名就不能和原来的一样了。\x0d\\x0d\4、在dos环境下执行命令 oradim -new -sid mm -startmode a -pfile "D:\oracle\admin\mm\pfile\initmmora "创建一个新的实例,其中 "mm"为新数据库的名称。\x0d\\x0d\5、启动服务,先打开数据库,然后可以用以前的用户名和密码登陆进去。 \x0d\要补充的是,一般的ORACLE数据库的监听程序都是用电脑的名称来识别地址的,而不是127001或者localhost所以,如果我们安装系\x0d\统的时候用的是不同的电脑名称(比如我原来用的是wm_mm重新安装后用的是wenming_mm),那么我们还有一个工作要做,就是修改文件 \x0d\listenerora将里面的相关的东西改过来就可以了。\x0d\\x0d\需要耐心、细心,可能在一步里有一个细小的差别就会出些古怪的错误提示,有时需要根据错误提示采取策略,总之原理是,先装一个一模一样的ORACLE,安装目录、数据库名称都一样,这样保证注册表里不用更改;再覆盖物理文件,最后重新实例化,打开数据库就可以进去了。

一 首先要配置Tomcat的serverxml文件,在对应的web应用的<Context>中加入<Resource>元素,比如:

<Context path="/Manager" reloadable="true">

<Resource

name="hello"

type="javaxsqlDataSource"

driverClassName="commysqljdbcDriver"

username="root"

password="123456"

maxIdle="4"

maxActive="4"

maxWait="5000"

url="jdbc:mysql://127001/jspdev"

/>

</Context>

其中:

name:指定Resource的JNDI名字

type:指定Resource所属的Java类名

driverClassName:指定连接数据库的JDBC驱动程序

username:指定连接数据库的用户名

password:指定连接数据库的口令

maxIdle:指定数据库连接池中的最大空闲连接数目,0表示不受限制

maxActive:指定数据库连接池中的最大活动连接数目,0表示不受限制

maxWait:指定连接池中连接处于空闲状态的最长时间,超过会抛出异常,-1表示无限

url:指定连接数据库的URL

二 在Web应用中使用数据源:

javaxnamingContext提供了查找JNDI Resource的接口,可以通过三个步骤来使用数据源对象:

A.获得对数据源的引用:

Context ctx = new InitalContext();

DataSource ds =

(DataSource)ctxlookup("java:comp/env/hello");

B.获得数据库连接对象:

Connection con = dsgetConnection();

C.返回数据库连接到连接池:

conclose();

在连接池中使用close()方法和在非连接池中使用close()方法的区别是:前者仅仅是把数据库连接对象返回到数据库连接池中,是连接对象又恢复到空闲状态,而非关闭数据库连接,而后者将直接关闭和数据库的连接。

三 如果通过数据源访问数据库,由于数据源由Servlet容器创建并维护,所以必须把JDBC驱动程序拷贝到Tomcat安装目录下的common/lib目录下,确保Servlet容器能够访问驱动程序。

1、MySQL数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。

2、数据库当前的连接线程数threads_connected。这是动态变化的。

查看max_connections、max_connections的办法见后。

如果

threads_connected

==

max_connections

时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。

因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。

但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。

这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,但强坛系统估计不会发生这种低级的编程错误。

该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而

threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技术,

threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。

从强坛出错的情况看,更大的可能性是数据库系统没能进行适当地配置。下面提出一点建议。供参考

让你们的工程师把MySQL的最大允许连接数从默认的100调成32000。这就不会老出现连接过多的问题了。

查看max_connections

进入MySQL,用命令:

show

variables

查看数据库最大可连接数的变量值:

max_connections

查看threads_connected

进入MySQL,用命令:

show

status

查看当前活动的连接线程变量值:

threads_connected

设置max_connections

设置办法是在mycnf文件中,添加下面的最后红色的一行:

[mysqld]

port=3306

#socket=MySQL

skip-l

数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

简单的说:创建数据库连接是一个很耗时的 *** 作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。

不使用数据库连接池

如果不使用数据库连接池,对于每一次SQL *** 作,都要走一遍下面完整的流程:

1TCP建立连接的三次握手(客户端与 MySQL服务器的连接基于TCP协议)

2MySQL认证的三次我收

3真正的SQL执行

4MySQL的关闭

5TCP的四次握手关闭

可以看出来,为了执行一条SQL,需要进行大量的初始化与关闭 *** 作

使用数据库连接池

如果使用数据库连接池,那么会 事先申请(初始化)好 相关的数据库连接,然后在之后的SQL *** 作中会复用这些数据库连接, *** 作结束之后数据库也不会断开连接,而是将数据库对象放回到数据库连接池中

资源重用:由于数据库连接得到重用,避免了频繁的创建、释放连接引起的性能开销,在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。

更快的系统响应速度:数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。 此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了从数据库连接初始化和释放过程的开销,从而缩减了系统整体响应时间。

统一的连接管理,避免数据库连接泄露:在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接 *** 作中可能出现的资源泄露。

如果说你的服务器CPU是4核i7的,连接池大小应该为((42)+1)=9

相关视频推荐

90分钟搞懂数据库连接池技术|linux后台开发

《tcp/ip详解卷一》: 150行代码拉开协议栈实现的篇章

学习地址:C/C++Linux服务器开发/后台架构师零声教育-学习视频教程-腾讯课堂

需要C/C++ Linux服务器架构师学习资料加qun 812855908 获取(资料包括 C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享

源码下载

下载方式:>

到目前为目 JDBC 的连结池只是一个接口 没有真正的实现 JDBC 正在开发中 据报已经支持连结池 但JDBC 用了JNDI技术 连结池的配置可以让一个高手都烦死 目前第三方已经实现的连结池当然是poolman 版对一般用户来说已经足够用了 配置也简单 版虽然增加了一些功能 但配置也是采用JNDI 对RMI和EJB不懂的朋友可能很烦 建议用 的了 如果有兴趣 自己也可以实现连结池 最关键的技术也就是把连结作为参数传给一个BEAN 用完后返回这个参数连结而不是关闭 下面是一个简单的实现:DBConnectionManager java程序清单如下 import java io ; import java sql ; import java util ; import java util Date; / 管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接 池的访问 客户程序可以调用getInstance()方法访问本类的唯一实例 / public class DBConnectionManager { static private DBConnectionManager instance; // 唯一实例 static private int clients; private Vector drivers = new Vector(); private PrintWriter log; private Hashtable pools = new Hashtable(); / 返回唯一实例 如果是第一次调用此方法 则创建实例 @return DBConnectionManager 唯一实例 / static synchronized public DBConnectionManager getInstance() { if (instance == null) { instance = new DBConnectionManager(); } clients++; return instance; } / 建构函数私有以防止其它对象创建本类实例 / private DBConnectionManager() { init(); } / 将连接对象返回给由名字指定的连接池 @param name 在属性文件中定义的连接池名字 @param con 连接对象\\r / public void freeConnection(String name Connection con) { DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) { pool freeConnection(con); } } / 获得一个可用的(空闲的)连接 如果没有可用连接 且已有连接数小于最大连接数 限制 则创建并返回新连接 @param name 在属性文件中定义的连接池名字 @return Connection 可用连接或null / public Connection getConnection(String name) { DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) { return pool getConnection(); } return null; } / 获得一个可用连接 若没有可用连接 且已有连接数小于最大连接数限制 则创建并返回新连接 否则 在指定的时间内等待其它线程释放连接 @param name 连接池名字 @param time 以毫秒计的等待时间\\r @return Connection 可用连接或null / public Connection getConnection(String name long time) { DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) { return pool getConnection(time); } return null; } / 关闭所有连接 撤销驱动程序的注册\\r / public synchronized void release() { // 等待直到最后一个客户程序调用 if ( clients != ) { return; } Enumeration allPools = pools elements(); while (allPools hasMoreElements()) { DBConnectionPool pool = (DBConnectionPool) allPools nextElement(); pool release(); } Enumeration allDrivers = drivers elements(); while (allDrivers hasMoreElements()) { Driver driver = (Driver) allDrivers nextElement(); try { DriverManager deregisterDriver(driver); log( 撤销JDBC驱动程序 + driver getClass() getName()+ 的注册\\\ ); } catch (SQLException e) { log(e 无法撤销下列JDBC驱动程序的注册: + driver getClass() getName()); } } } / 根据指定属性创建连接池实例 @param props 连接池属性 / private void createPools(Properties props) { Enumeration propNames = props propertyNames(); while (propNames hasMoreElements()) { String name = (String) propNames nextElement(); if (name endsWith( url )) { String poolName = name substring( name lastIndexOf( )); String url = props getProperty(poolName + url ); if (url == null) { log( 没有为连接池 + poolName + 指定URL ); continue; } String user = props getProperty(poolName + user ); String password = props getProperty(poolName + password ); String maxconn = props getProperty(poolName + maxconn ); int max; try { max = Integer valueOf(maxconn) intValue(); } catch (NumberFormatException e) { log( 错误的最大连接数限制: + maxconn + 连接池: + poolName); max = ; } DBConnectionPool pool = new DBConnectionPool(poolName url user password max); pools put(poolName pool); log( 成功创建连接池 + poolName); } } } / 读取属性完成初始化 / private void init() { InputStream is = getClass() getResourceAsStream( /db properties ); Properties dbProps = new Properties(); try { dbProps load(is); } catch (Exception e) { System err println( 不能读取属性文件 + 请确保db properties在CLASSPATH指定的路径中 ); return; } String logFile = dbProps getProperty( logfile DBConnectionManager log ); try { log = new PrintWriter(new FileWriter(logFile true) true); } catch (IOException e) { System err println( 无法打开日志文件: + logFile); log = new PrintWriter(System err); } loadDrivers(dbProps); createPools(dbProps); } / 装载和注册所有JDBC驱动程序\\r @param props 属性 / private void loadDrivers(Properties props) { String driverClasses = props getProperty( drivers ); StringTokenizer st = new StringTokenizer(driverClasses); while (st hasMoreElements()) { String driverClassName = st nextToken() trim(); try { Driver driver = (Driver) Class forName(driverClassName) newInstance(); DriverManager registerDriver(driver); drivers addElement(driver); log( 成功注册JDBC驱动程序\\\ + driverClassName); } catch (Exception e) { log( 无法注册JDBC驱动程序: + driverClassName + 错误: + e); } } } / 将文本信息写入日志文件 / private void log(String msg) { log println(new Date() + : + msg); } / 将文本信息与异常写入日志文件 / private void log(Throwable e String msg) { log println(new Date() + : + msg); e printStackTrace(log); } / 此内部类定义了一个连接池 它能够根据要求创建新连接 直到预定的最\\r lishixinzhi/Article/program/Oracle/201311/17331

数据连接池是把数据库连接放到中间服务器上,比如tomcat上,那么相当于每次你 *** 作数据库的时候就不需要再"连接"到数据库再进行相关 *** 作,而是直接 *** 作服务器上的"连接池",你可以根据字面意思进行理解,把数据库当做一条小溪,那么"连接池"就是一个"水池",这个水池里面的水是由事先架好的通向"小溪"的水管引进来的,所以,你想喝水的时候不必大老远地跑到小溪边上,而只要到这个水池就可以这样的话就可以提高"效率"但是数据池一般是用在数据量比较大的项目,这样可以提高程序的效率,想一想这样的话是不是就把相关的负荷加在了服务器上,因为这个"池"是在服务器上的,对于小数据量处理的项目不推荐使用,应为过于频繁的请求会使得服务器负载加重

关系:

你 -->"水池"-->小溪(快速喝水)

程序-->"数据池"-->数据库(快速存取)

就是这样,也不用把它想神秘了,我是这样理解的,也就这样说了,希望对你有帮助

  对象复用 池 ( )

对象池化 是目前非常常用的一种系统优化技术 它的核心思想是 如果一个类被频繁请求使用 那么不必每次都生成一个实例 可以将这个类的一些实例保存在一个 池 中 待需要使用的时候直接从池中获取 这个 池 就称为对象池 在实现细节上 它可能是一个数组 一个链表或者任何集合类

对象池的使用非常广泛 其中最为大家所熟悉的 就是线程池和数据库连接池 线程池中 保存著可以被重用的线程对象 当有任务被提交到线程池时 系统并不需要新建线程 而是从池中获得一个可用的线程 执行这个任务 在任务结束后 也不关闭线程 而将它返回到池中 以便下次继续使用 由于线程的创建和销毁是较为费时的工作 因此 在线程调度频繁的系统中 线程池可以很好地改善性能 有关线程池更详细的介绍 读者可以参考第 章中 简单的线程池实现 一节

数据库连接池也是一种特殊的对象池 它用于维护数据库连接的集合 当系统需要访问数据库时 不需要重新建立数据库连接 而可以直接从池中获取 在数据库 *** 作完成后 也不关闭数据库连接 而是将连接返回到连接池中 由于数据库连接的创建和销毁是重量级的 *** 作 因此 避免频繁进行这两个 *** 作 对改善系统的性能也有积极意义

注意 在程序中使用数据库连接池和线程池 可以有效地改善系统在高并发下的性能 这是两个非常重要的性能组件 任何对性能敏感的系统 都需要考虑合理配置这两个组件

目前应用较为广泛的数据库连接池组件有C P 和Proxool 其中C P 是伴随着Hibernate一起发布 与Hibernate联系紧密的数据库连接池 本文以C P 为例 展示数据库连接池的一般使用方法和特性

若在Hibernate中使用C P 连接池 只需要将C P 的jar包复制到开发环境中 并且在hibernate cfg xml中加入以下配置项即可

<property name= connection provider_class > hibernate connection

C P ConnectionProvider</property>

<property name= connection autoReconnect >true</property>

<property name= connection autoReconnectForPools >true</property>

<property name= connection is connection validation required >true

</property>

<! 最大连接数 >

<property name= hibernate c p max_size > </property>

<! 最小连接数 >

<property name= hibernate c p min_size > </property>

<! 获得连接的超时时间 如果超过这个时间 会抛出异常 单位毫秒 >

<property name= hibernate c p timeout > </property>

<! 最大的PreparedStatement的数量 >

<property name= hibernate c p max_statements > </property>

<! 每隔 秒检查连接池里的空闲连接 单位是秒 >

<property name= hibernate c p idle_test_period > </property>

<! 当连接池里的连接用完时 C P 一次性获取的新的数据库连接数 >

<property name= hibernate c p acquire_increment > </property>

<! 每次都验证连接是否可用 >

<property name= hibernate c p validate >true</property>

当然 也可以脱离Hibernate单独在应用程序中使用C P 以下代码构造了一个C P 的数据库连接池 并从中获得一个数据库连接

DataSource unpooled = DataSources

unpooledDataSource(

jdbc:mysql:// : /test //连接MySQL数据库

root )                             //这个不是连接池

DataSource pooled = DataSources pooledDataSource(unpooled)

//构建了一个连接池

con = pooled getConnection()                            //从连接池中获取连接

       返回目录 Java程序性能优化 让你的Java程序更快 更稳定

编辑推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

       J ME移动开发实战教学视频

Visual C++音频/视频技术开发与实战

Oracle索引技术

lishixinzhi/Article/program/Java/gj/201311/27801

以上就是关于重装系统后,怎么恢复oracle数据库全部的内容,包括:重装系统后,怎么恢复oracle数据库、与元素类型"reloadable"相关的属性"{1}"应有左引号、如何轻松解决MYSQL数据库连接过多的错误等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9848451.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存