2、控制文件和日志文件
一、控制文件
1.查看控制文件信息
SQL> select * from v$controlfile;STATUS NAME------- -------------------------------------------------- D:\ORACLE\ORADATA\C_DB\CONTROL01.CTL D:\ORACLE\ORADATA\C_DB\CONTROL02.CTL D:\ORACLE\ORADATA\C_DB\CONTROL03.CTLSQL> select name ,value from v$parameter where name ='control_files';NAME VALUEcontrol_files D:\ORACLE\oradata\C_DB\CONTROL01.CTL,D:\ORACLE\oradata\C_DB\CONTROL02.CTL,D:\ORACLE\oradata\C_DB\CONTROL03.CTL
<!--在init.ora文件直接加-->control_files=("D:\ORACLE\oradata\C_DB\CONTROL01.CTL", "D:\ORACLE\oradata\C_DB\CONTROL02.CTL", "D:\ORACLE\oradata\C_DB\CONTROL03.CTL")<!--使用SQL语句--><!--1.在数据库保持打开时修改SPFILE-->SQL> ALERT SYSTEM SET CONTROL_FILES='D:\ORACLE\oradata\C_DB\CONTROL01.CTL','D:\ORACLE\oradata\C_DB\CONTROL02.CTL','D:\ORACLE\oradata\C_DB\CONTROL03.CTL','D:\ORACLE\oradata\C_DB\CONTROL04.CTL' SCOPE=SPFILE;<!--注:运行命令后,SPFILE会立即修改,但是要重新启动实例后才能生效--><!--2.关闭数据库-->SQL> SHUTDOWN IMMEDIATE;<!--3.使用系统命令复制文件到新的地址--> $cp D:\ORACLE\oradata\C_DB\CONTROL03.CTL D:\ORACLE\oradata\C_DB\CONTROL04.CTL<!--4.重新启动实例-->SQL> STARTUP;
1.查看SQL> select member from v$logfile;SQL> select name from v$datafile;SQL> select value from v$parameter where name='control_files';2.关闭数据库SQL> connect as sysdba;SQL> shutdown immediate;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。3.备份所有的数据文件和重做日志文件(我觉得一般在数据库改动不太大的时候可以不用做)4.使用NOMOUNT启动数据库SQL> startup nomount;ORACLE 例程已经启动。Total System Global Area 135338868 bytesFixed Size 453492 bytesVariable Size 109051904 bytesDatabase Buffers 25165824 bytesRedo Buffers 667648 bytes原因是,使用nomount方式打开数据库,oracle需要打开控制文件,但是不打开数据文件和日志文件。5.create controlfile文件create control file reuse database "mydb_name" --数据库实例名noresetlogs noarchivelog --非同步,非归档maxlogfiles 32 --最大日志文件32个maxlogmembers 2 --日志文件组的成员2个maxdatafiles 32 --文件个数32个maxinstance 1 --实例数1个maxloghistory 499 --最大历史日志文件个数499logfilegroup 1 '/OS_path/oracle/c_db/t_log1.f' size 500k,group 2 '/OS_path/oracle/c_db/t_log2.f' size 500k# STANDBY LOGFILE DATAFILE'/OS_path/oracle/c_db/t_db1.f','/OS_path/oracle/dbu9i.dbf'....................[color=red] 在创建控制文件时,如在附加的控制文件中丢失了任何重做日志文件组,可以应用resetlog选项,以便恢复日志组,如果重新设置了数据库的名字,要制定resetlogs选项,否则要指定noresetlogs选项。 [/color]6.从中文件创建后,要设置control_files参数使新建的控制文件有效。SQL> ALERT SYSTEM SET CONTROL_FILES='D:\ORACLE\oradata\C_DB\CONTROL01.CTL','D:\ORACLE\oradata\C_DB\CONTROL02.CTL','D:\ORACLE\oradata\C_DB\CONTROL03.CTL','D:\ORACLE\oradata\C_DB\CONTROL04.CTL' SCOPE=SPFILE;7.打开数据库SQL> alter database open 如果使用了resetlogs选项SQL> alter database open resetlogs;
查询日志文件SQL> set linesize 180;SQL> col member for a50;SQL> col is_recovery_dest_file for a20;SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER 3 ONLINE D:\ORACLE\ORADATA\C_DB\REDO03.LOG 2 STALE ONLINE D:\ORACLE\ORADATA\C_DB\REDO02.LOG 1 STALE ONLINE D:\ORACLE\ORADATA\C_DB\REDO01.LOG查询分组,大小,状态SQL> select group#,bytes/1024/1024 as M ,status,members from v$log; GROUP# M STATUS MEMBERS---------- ---------- ---------------- ---------- 1 100 INACTIVE 1 2 100 INACTIVE 1 3 100 CURRENT 1创建:SQL> alter database add logfile group 4 ('D:\ORACLE\ORADATA\C_DB\REDO04a.LOg','D:\ORACLE\ORADATA\C_DB\REDO04b.LOg') size 10m;增加文件到组中SQL> alter database add logfile member 'D:\ORACLE\ORADATA\C_DB\REDO04c.LOg' to group 2;删除:SQL> alter database drop logfile group 4;数据库已更改。