十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1. 准备
创新互联公司主要从事做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务肇州,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
原数据库的实例名为linuxdb,控制文件、数据文件、联机日志文件存放在/home/oracle/ora9/oradata/linuxdb目录,将所有的文件拷贝到另外一个目录/home/oracle/ora9/oradata/dbtest。
再将linuxdb 的初始化文件也复制一份出来,执行如下的sql:
Create pfile='/home/oracle/ora9/oracle/dbs/pfiledbtest.ora' from spfile='/home/oracle/ora9/oracle/dbs/spfilelinuxdb.ora';
我们将修改实例名为dbtest。
下面我们开始一步一步地进行处理。
2. 加载初始化文件
打开pfiledbtest.ora文件,修改对应的dump属性的路径名,实例名字,控制文件路径等。
然后执行如下命令:
[oracle@localhost oracle]$ export ORACLE_SID=dbtest
[oracle@localhost oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Mon Aug 17 16:57:36 2009
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL startup pfile='/home/oracle/ora9/oracle/dbs/pfiledbtest.ora' nomount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
SQL
这样加载初始化文件就成功了。
下面接着进行,加载控制文件。
3. 加载控制文件
先执行如下命令。
SQL alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00205: error in identifying controlfile, check alert log for more info
好像是控制文件的路径不对,修改初始文件再次加载。
SQL alter database mount;
alter database mount
*
ERROR at line 1:
ORA-01103: database name 'LINUXDB' in controlfile is not 'DBTEST'
根据错误信息提示,是实例名字不一致,但是控制文件是二进制的,用vi打开之后没法编辑,只能通过用重建控制文件可以解决。
在/home/oracle/ora9/oradata/dbtest目录下删除老的三个控制文件。然后开始重建控制文件。
SQL CREATE CONTROLFILE SET DATABASE "DBTEST" RESETLOGS FORCE LOGGING NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/ora9/oradata/dbtest/redo01.log' SIZE 50M,
9 GROUP 2 '/home/oracle/ora9/oradata/dbtest/redo02.log' SIZE 50M,
10 GROUP 3 '/home/oracle/ora9/oradata/dbtest/redo03.log' SIZE 50M
11 DATAFILE
12 '/home/oracle/ora9/oradata/dbtest/cwmlite01.dbf',
13 '/home/oracle/ora9/oradata/dbtest/devbase_20090408.dbf',
14 '/home/oracle/ora9/oradata/dbtest/drsys01.dbf',
15 '/home/oracle/ora9/oradata/dbtest/example01.dbf',
16 '/home/oracle/ora9/oradata/dbtest/indx01.dbf',
17 '/home/oracle/ora9/oradata/dbtest/odm01.dbf',
18 '/home/oracle/ora9/oradata/dbtest/system01.dbf',
19 '/home/oracle/ora9/oradata/dbtest/tools01.dbf',
20 '/home/oracle/ora9/oradata/dbtest/undotbs01.dbf',
21 '/home/oracle/ora9/oradata/dbtest/users01.dbf',
22 '/home/oracle/ora9/oradata/dbtest/xdb01.dbf'
23 CHARACTER SET ZHS16GBK;
CREATE CONTROLFILE SET DATABASE "DBTEST" RESETLOGS FORCE LOGGING NOARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01990: error opening password file '/home/oracle/ora9/oracle/dbs/orapw'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
根据错误提示,是缺少密码验证文件,用下面的命令创建密码文件。
$cd $ORACLE_HOME/dbs
orapwd password=chenli file=orapwdbtest
SQL CREATE CONTROLFILE SET DATABASE 'dbtest' RESETLOGS FORCE LOGGING NOARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/home/oracle/ora9/oradata/dbtest/redo01.log' SIZE 50M,
9 GROUP 2 '/home/oracle/ora9/oradata/dbtest/redo02.log' SIZE 50M,
10 GROUP 3 '/home/oracle/ora9/oradata/dbtest/redo03.log' SIZE 50M
11 DATAFILE
12 '/home/oracle/ora9/oradata/dbtest/cwmlite01.dbf',
13 '/home/oracle/ora9/oradata/dbtest/devbase_20090408.dbf',
14 '/home/oracle/ora9/oradata/dbtest/drsys01.dbf',
15 '/home/oracle/ora9/oradata/dbtest/example01.dbf',
16 '/home/oracle/ora9/oradata/dbtest/indx01.dbf',
17 '/home/oracle/ora9/oradata/dbtest/odm01.dbf',
18 '/home/oracle/ora9/oradata/dbtest/system01.dbf',
19 '/home/oracle/ora9/oradata/dbtest/tools01.dbf',
20 '/home/oracle/ora9/oradata/dbtest/undotbs01.dbf',
21 '/home/oracle/ora9/oradata/dbtest/users01.dbf',
22 '/home/oracle/ora9/oradata/dbtest/xdb01.dbf'
23 CHARACTER SET ZHS16GBK;
Control file created.
现在创建成功了。
创建控制文件成功了,下面重新启动数据库。
SQL startup nomount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
SQL alter database mount;
Database altered.
SQL alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL alter database open RESETLOGS;
Database altered.
查看表中的记录,正确的。
修改实例名成功。
4. 总结
由上面的操作可以看到,在数据库维护中,最重要的是数据文件,初始化文件可以从别的实例拷贝过来,然后修改。控制文件可以重新创建,只要数据文件正确,就可以重建初始化文件和控制文件之后,恢复数据库。
遇到的错误:
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-00200: controlfile could not be created
ORA-00202: controlfile: '/home/ora/ora9/oradata/dbtest/control01.ctl'
ORA-27040: skgfrcre: create error, unable to create file
Linux Error: 2: No such file or directory
请查看初始化文件中,控制文件的路径是正确,控制文件的路径上的目录是否有权限创建文件,如果这些问题都解决了,那么应该能成功创建控制文件。
对于这个问题,不是一句,两句能说清的。从你叙述的问题来看,能看出你对oracle的框架非常混乱、模糊。
建议你系统的看一下oracle体系结构的内容,英文好,可以直接看官方文档的concept,不好的话可以找一些基础的书籍看
这里,跟你简单说一下oracle的恢复问题
oracle的恢复包括两种:1、实例恢复;2、介质恢复
1、实例恢复:并不需要dba来接入,你只要保证undo、redo完整,oracle能自行完成实例恢复。
2、介质恢复:就是物理文件损坏一类的恢复,或者物理数据的丢失,需要介质恢复。对于介质恢复的方法,需要看你当初是如何进行备份的。
至于日志:分为联机在线日志和归档日志。联机在线日志不可以随便删除。但是都不绝对。
而归档日志也一样,也不能随便删除,但是如果对于恢复数据库有用,那么你就不能删除它
总之,这里三言两语是说不清这个问题的。你想彻底弄明白这样的问题,必须自己把oracle基础的东西掌握了才可以。
首先备份你需要保留的数据
用dbca删除实例
用dbca建立新的实例
导入备份的数据
1、改密码
(1).打开doc命令框键入:sqlplus /nolog
(2).输入:connect / as sysdba
(3).修改密码:alter user userName identified by passWord;
(4).解锁:alter user userName account unlock;
(5).退出:exit;
2、开服务
(1).先开核心服务(OracleServiceOrcl)
(2).在开监听服务(OracleDb11g_home1TNSListener)
3、改配置(位置:D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\下面的两个文件ip listener.ora和tnsnames.ora
改为本机ip)
4、启动oracle (位置:D:\plsqldev\plsqldev.exe),根据用户名和密码进行登录
5、新建用户
(
create user userName identified by "Pwd";
)
6、授权 (grant resource to userName;)
7、建表
create table tabName
(
id type primary key,
name type,
desc type
);
输入sqlplus /nolog 回车一闪就关了,解决方法:
1.先在D:\oracle\product\10.2.0\db_1\BIN下找到sqlplus.exe,用管理员的身份运行,不关了,就这么开着,然后输入上面的相关命令就可以了
设置方法如下:
1、找到$ORACLE_HOME/client_1/network/admin目录下的tnsnames.ora文件,并用文本模式打开。
2、添加以下内容:
本地实例名=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 数据库IP地址)(PORT = 端口号))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 服务名)
)
)
3、用PL/SQL客户端工具登录即可。
单击开始,这里输入cmd,打开dos窗口
输入命令
exp bms/BMSPASS@TCDB file=E:\DBback\dbback20160112.dmp
这里说明一下
这里的bms是指备份时,登录数据库实例TCDB的用户名;
这里的/是语法符号。
这里的BMSPASS是用户bms登录数据库TCDB时的密码;
@是语法符号。
这里的TCDB是Oracle数据库的实例名。
这里的file=E:\DBback\dbback20160112.dmp 是只指备份文件的存放路径。
等待导出完成,如果看到这里的导出成功,说明备份完成了。
打开备份时指定的存储路径,就可以看到备份文件了。
如果在导出命令的最后加上full=y的参数,也就是
exp bms/BMSPASS@TCDB file=E:\DBback\dbback20160112.dmp full=y
意思是将用户bms在TCDB数据库实例中的所有文件都备份,也就是完整备份。
数据库还原使用语法
imp bms/BMSPASS@TCDB file=E:\DBback\dbback20160112.dmp
这里的E:\DBback\dbback20160112.dmp是备份文件的存放路径
请添加详细解释