当前位置:数据库 > Oracle >>

第一次恢复Oracle数据库经历

第一次恢复Oracle数据库经历
 
好吧!接触oracle有好几年了,但是一直都是搞开发,备份数据的机会很少,最近公司的ERP要做二次开发了,ERP源代码我是拿到了,但是不能连接线上的数据库做开发做测试吧,如果搞出很多脏数据就不好啦,或者把数据库服务器搞挂了那更糟糕啊。只能自己搞一份数据库数据来用了,线上系统已经做了定时热备数据库了,每天晚上都会把整个数据库备份到另外一台机器。昨晚上去备份服务器下载最新的备份数据,1g多啊,网络不给力啊,11点下到凌晨两点啊,哥那个困啊,当时怎么不会设置定时关机啊,那个傻啊。
其实数据备份的书我都看到一大本了,但是都是水过鸭背的,没什么操练的,也忘得一干二净啊,书写了很多备份的原理和很多备份的情况,真的可以写出一本七八百页的书啊,作者是那个厉害啊。其实我今天也就用到一条语句而已:F:\oracle>imp userid=talkie/密码 full=y file=sztalkie113_201304142320.dmp,对啦,就是这一条语句搞死人啊,这么短短一条语句,就是执行不了,不给力啊真是不给力。
首先啦:我在database configuration assistant建立了一个talkie的数据库(talkie是东家的名字,哈哈),具体怎么建就不说了,差不多都是下一步再next的。建好数据库除了默认的登录名和密码是不会有talkie这个账户的啊,建数据库过程中输入的密码和全局数据库名是没有半毛钱关系的啊。我在这里就范了个愚蠢的错误啦,把全局数据库名当作登录帐号猛地在PL/SQL登录总是报:ora-01017:帐号不存在或者密码错误,这个错的啦。
第二啦:新建好数据库就要建好监听啦,我这里之前已经有监听了,就配置tnsname.ora就可以了,我的是oracle10g,安装了客户端和服务端,在客户端找到tnsname.ora配置就可以了,比如我的:F:\oracle\product\10.2.0\client_1\network\ADMIN,具体配置不用说啦,注意是service_name=全局数据库名就OK的啦。这下子就可以PL/SQL了,Scott/tiger如果新建数据库的时候没有解锁的就要用system/manager进去alter user scott identified by tiger,不过解锁这个账户好像没什么用,我们搞开发的很少会用数据库默认的账户来连接数据库吧,这样就不安全了。
第三步啦:就是建立自己的数据库账户啦,这里最好用system默认账户登录,normal或者是sysdba角色都无所谓的,但是sys或者其他账户就有可能不够权限啦,system如果在新建数据库的时候没有统一修改那它的默认密码就是manager啦。
create user talkie identified by 密码;
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW , DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE, DBA,CONNECT,RESOURCE,CREATE SESSION TO talkie;
这样就建好自己的账户,并赋予了权限啦,这里的账户名字一定要和导出数据库的账户名字一样,否则后面又会有错啦。好,到这里账户密码都有了,如果你刚才能登录PL/SQL,那它是百分百可以登录的啦。然后就是建立表空间了,我这里没有建立表空间了,因为我是不知道我的数据库有什么表空间的,到导数据过程中报错了,再查询有那些表空间吧。或者是单独备份表空间再恢复到新的数据库里面,这样就方便多了。
第四啦:貌似万事俱备,就差东风了,文章开始说啦,恢复数据就是imp命令,当然oracle10G以上是另外一个命令,运行这个命令不能是在PL/SQL也不能在SQL plus环境啊,一定要在运行-CMD的DOS环境啊。然后cd到你要备份的数据存放的文件夹里面啊,注意这一步貌似很重要,我一开始进到DOS就执行imp运行不了报错:SP2-0734: unknown command beginning "imp system..." - rest of line ignored,还有也不要用sqlplus /nolog切换到SQL环境,更加不要conn system/manager@talkie或者是conn talkie/密码@talkie,网上很多写成这样子:imp system/manager@全局数据库名 file=?  full=y  ignore=y......这样的恢复数据库的方法,完全没有说明白在那里执行这条语句,而且还不断报错。
第五啦:最后一个错:cd到存放备份数据的文件夹执行F:\oracle>imp userid=talkie/密码 full=y file=sztalkie113_201304142320.dmp;是会有IMP-00002: failed to open  for read这个错的,为什么?后面的分号绝对不能要啊,敲多了SQL语言的人注意啦。因为我是新建的数据库完全不用加full,ignore等等条件啦。
写完这个文章我的1g多数据也导完了,应该有1千多万的数据量,果然因为没有建表空间报了很多因为没有表空间引发的错。看来还得重来一遍。最后的结果是:导入成功但是带有很多警告,警告你妹啊。
 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,