迪士尼少儿英语加盟:用户管理的完全恢复

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 05:33:33
用户管理的完全恢复一、 转储数据文件位置
    当数据库处于MOUNT状态时,DBA可以转储任何数据文件的位置。当数据库处于OPEN状态时,DBA可以改变除去SYSTEM表空间之外所有其它表空间的数据文件的位置。
1、 在MOUNT状态下修改数据文件位置
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247876 bytes
Variable Size              83887484 bytes
Database Buffers           75497472 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。

SQL> host copy D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
D:\ORACLE\PRODUCT
已复制         1 个文件。

SQL> alter database rename file
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM0
1.DBF' to 'D:\ORACLE\PRODUCT\SYSTEM01.DBF';

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select file_name from dba_data_files where tablespace_name='SYSTEM';

FILE_NAME
--------------------------------------------------------------------------------

D:\ORACLE\PRODUCT\SYSTEM01.DBF
2、在OPEN状态下修改数据文件位置
SQL> select open_mode from v$database;

OPEN_MODE
----------
READ WRITE
SQL> alter database datafile
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DB
F' offline;

数据库已更改。

SQL> host copy D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
D:\ORACLE\PRO
DUCT;
已复制         1 个文件。

SQL> alter database rename file
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01
.DBF' to 'D:\ORACLE\PRODUCT\USERS01.DBF';

数据库已更改。

SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------

D:\ORACLE\PRODUCT\USERS01.DBF
二、 用户管理的恢复
首先我们备份一下数据库,防止出现错误能够恢复。
SQL> conn sys/sys@ora10g as sysdba;
已连接。
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSAUX01.DBF
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\UNDOTBS01.DBF
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_OMF_TEST_326SNC34_.DBF
SQL> alter database begin backup;
数据库已更改。
SQL> host copy G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
d:\ora_data_backup
已复制         1 个文件。
SQL> host copy G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSAUX01.DBF
d:\ora_data_backup
已复制         1 个文件。
SQL> host copy G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\UNDOTBS01.DBF
d:\ora_data_backup
已复制         1 个文件。
SQL> host copy G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
d:\ora_data_backup
已复制         1 个文件。
SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\CONTROL01.CTL
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\CONTROL02.CTL
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\CONTROL03.CTL

SQL> host copy G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\CONTROL01.CTL
d:\ora_data_backup
已复制         1 个文件。
SQL> alter database end backup;
数据库已更改。

SQL> alter system archive log current;
系统已更改。

1、 在MOUNT状态下恢复数据文件
--关闭数据库,删除SYSTEM01.DBF文件
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
G:\oracle\product\10.2.0\oradata\ora10g>del system01.dbf
--启动数据库报错,提示SYSTEM.DBF数据文件找不到
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              79693156 bytes
Database Buffers           83886080 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1:
'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF'
因为丢失的是SYSTEM表空间的数据文件,所以数据库只能启动到MOUNT状态下进行恢复。
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
SQL> select file#,error from v$recover_file;

     FILE# ERROR
---------- -----------------------------------------------------------------
         1 FILE NOT FOUND
将备份拷贝到控制文件所指的位置,如果控制文件所指的位置出现磁盘损坏,可以将备份拷贝到其它位置,然后使用ALTER DATABASE RENAME FILE 。。。TO 。。。命令改变控制中的数据文件位置。
SQL> host copy d:\ora_data_backup\system01.dbf G:\ORACLE\PRODUCT\10.2.0\ORADATA\
ORA10G
已复制         1 个文件。
恢复数据库,如果是多个数据文件损坏,可以使用RECOVER DATABASE命令。如果归档日志不在默认位置,那么执行恢复的时候必须指定归档日志的位置。如:
RECOVER FROM  ‘C:\TEST’ DATAFILE 1;
SQL> recover datafile 1;
完成介质恢复。
SQL> alter database open;
数据库已更改。
2、 在OPEN状态下恢复数据文件
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
G:\oracle\product\10.2.0\oradata\ora10g>del users01.dbf
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              79693156 bytes
Database Buffers           83886080 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4:
'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF'

SQL> select file#,error from v$recover_file;

     FILE# ERROR
---------- -----------------------------------------------------------------
         4 FILE NOT FOUND

SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED

SQL> alter database datafile 4 offline;
数据库已更改。

SQL> alter database open;
数据库已更改。

SQL> host copy d:\ora_data_backup\users01.dbf G:\ORACLE\PRODUCT\10.2.0\ORADATA\O
RA10G
已复制         1 个文件。

SQL> recover datafile 4;
完成介质恢复。
SQL> alter database datafile 4 online;
数据库已更改。
对于非SYSTEM表空间的数据文件损坏,都可以把数据库启动到OPEN状态下进行恢复。首先要将损坏的数据文件OFFLIINE,然后再OPEN数据库。
3、 在OPEN状态下恢复未备份的数据文件
在将数据库转为归档模式后,如果增加了数据文件,并且没有备份新增的数据文件,那么当此时该数据文件出现损坏时,同样可以恢复该数据文件,但前提是从建立数据文件到目前为止所有归档日志都存在。
--创建测试表空间及用户
SQL> create tablespace recover_test datafile 'G:\oracle\oradata\ORA10G\DATAFILE\
recover_test01.dbf' size 10m;
表空间已创建。

SQL> create user test identified by test
  temporary tablespace temp
  default tablespace recover_test;
用户已创建。

SQL> grant resource,connect to test;
授权成功。

SQL> grant select on dba_tables to test;
授权成功。
--连接到TEST用户,创建表
SQL> conn test/test@ora10g;
已连接。
SQL> create table t1 as select * from dba_tables where rownum<1000;

表已创建。
--归档当前日志
SQL> alter system archive log current;

系统已更改。
--关闭数据库,删除新建表空间的数据文件
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
G:\oracle\oradata\ORA10G\DATAFILE>del recover_test01.dbf
--启动数据库报错
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              79693156 bytes
Database Buffers           83886080 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6:
'G:\ORACLE\ORADATA\ORA10G\DATAFILE\RECOVER_TEST01.DBF'


SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED

SQL> select file#,error from v$recover_file;

     FILE# ERROR
---------- -----------------------------------------------------------------
         6 FILE NOT FOUND

SQL> alter database datafile 6 offline;

数据库已更改。

SQL> alter database open;

数据库已更改。

--使用TEST连接,查询数据,报同样的错
SQL> conn test/test@ora10g;
已连接。
SQL> select count(*) from t1;
select count(*) from t1
                     *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 6
ORA-01110: 数据文件 6:
'G:\ORACLE\ORADATA\ORA10G\DATAFILE\RECOVER_TEST01.DBF'

此时我们并没有数据文件RECOVER_TEST01.DBF的备份,所以只能在原位置上重新创建一个同名的。当然也可以把数据文件创建到其它的位置上。使用:
ALTER DATABASE CREATE DATAFILE 原位置 AS 目标位置。
下面我们将数据文件创建到原来的位置上。
SQL> alter database create datafile
'G:\ORACLE\ORADATA\ORA10G\DATAFILE\RECOVER_TEST01.DBF';
数据库已更改。
--执行数据库恢复
SQL> recover datafile 6;
完成介质恢复。
SQL> alter database datafile 6 online;
数据库已更改。
--连接到TEST用户,执行查询
SQL> conn test/test@ora10g;
已连接。
SQL> select count(*) from t1;

  COUNT(*)
----------
       999
当然,我们在创建新的表空间或者数据文件的时候,最好能够做备份。