Oracle 配置管理
文章目录
一、管理控制文件
1、获得控制文件信息
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
当前数据库实例控制文件的物理位置
SQL> select name,value from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
control_files
/u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control
02.ctl
2、查看控制文件中所存内容的信息
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
3、存储多重控制文件
[root@oracle ~]# mkdir /backup //创建备份文件目录
[root@oracle ~]# chown -R oracle /backup/ //赋予权限
SQL> alter system set
2 control_files=
3 '/u01/app/oracle/oradata/orcl/control01.ctl', //控制文件指定路径1
4 '/backup/control02.ctl' scope=spfile; //控制文件指定路径2(可增加)
系统已更改。
[oracle@oracle ~]$ cp /u01/app/oracle/oradata/orcl/control02.ctl /backup/control02.ctl //将文件复制到新的位置/backup目录
4、备份和恢复控制文件
1、备份为二进制文件
[root@oracle ~]# mkdir /u01/app/oracle/oradata/orcl/backup
[root@oracle ~]# chown -R oracle /u01/app/oracle/oradata/orcl/backup/
[root@oracle ~]# su - oracle
Last login: Wed Jul 31 18:45:40 CST 2019 on pts/0
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1593835520 bytes
Fixed Size 8793256 bytes
Variable Size 1023411032 bytes
Database Buffers 553648128 bytes
Redo Buffers 7983104 bytes
数据库装载完毕。
数据库已经打开。
SQL> alter database backup controlfile to '/u01/app/oracle/oradata/orcl/backup/control.bkp'; //备份到/backup中,文件名为control.bkp
数据库已更改。
2、恢复控制文件
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> startup //数据库发生错误
ORACLE 例程已经启动。
Total System Global Area 1593835520 bytes
Fixed Size 8793256 bytes
Variable Size 1023411032 bytes
Database Buffers 553648128 bytes
Redo Buffers 7983104 bytes
ORA-00205: ?????????, ??????, ???????
SQL> quit
从 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 断开
[oracle@oracle ~]$ cp /u01/app/oracle/oradata/orcl/backup/control.bkp /u01/app/oracle/oradata/orcl/control01.ctl //复制备份文件到原来的路径
[oracle@oracle ~]$ cp /u01/app/oracle/oradata/orcl/backup/control.bkp /u01/app/oracle/oradata/orcl/control02.ctl //为了保持一致,将所有控制文件也恢复一份
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> alter database mount; //数据库挂载
数据库已更改。
SQL> select group#,sequence#,archived,status from v$log; //查看当前活动的日志文件
GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- --------- ------------------------------------------------
1 4 NO INACTIVE
3 3 NO INACTIVE
2 5 NO CURRENT //当前正在使用的日志
SQL> select group#,status,type,member from v$logfile; //查找日志目录
GROUP# STATUS TYPE
---------- --------------------- ---------------------
MEMBER
--------------------------------------------------------------------------------
3 ONLINE
/u01/app/oracle/oradata/orcl/redo03.log
2 ONLINE
/u01/app/oracle/oradata/orcl/redo02.log //对应上面命令查到的活动日志文件
1 ONLINE
/u01/app/oracle/oradata/orcl/redo01.log
SQL> recover database using backup controlfile; //使用备份控制文件恢复数据库
ORA-00279: ?? 1752953 (? 05/13/2020 21:31:17 ??) ???? 1 ????
ORA-00289: ??:
/u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch1_5_975664254.dbf
ORA-00280: ?? 1752953 (???? 1) ??? #5 ?
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/orcl/redo02.log //查找到的日志目录
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs; //要打开数据时,重置重做日志
数据库已更改。
SQL> shutdown immediate //关闭数据库
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup //启动数据库,恢复完成
ORACLE 例程已经启动。
Total System Global Area 1593835520 bytes
Fixed Size 8793256 bytes
Variable Size 1023411032 bytes
Database Buffers 553648128 bytes
Redo Buffers 7983104 bytes
数据库装载完毕。
数据库已经打开。
二、管理重做日志文件
1、读取重做日志文件信息
1、使用v$log查看重做曰志信息
SQL> col status for a10 //设置格式化字符,a1O代表status列显示10字符宽度
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS
---------- ---------- ---------- ---------- --------- ----------
1 4 209715200 1 NO INACTIVE
2 5 209715200 1 NO CURRENT //当前曰志组
3 3 209715200 1 NO INACTIVE
2、查看重做日志组信息
SQL> set line 120; //设置显示宽度为120
SQL> col member for a50; //member列的输出格式为50个固定字符长度
SQL> select group#,status,type,member from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ---------- --------------------- --------------------------------------------------
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log
2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log
1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log
STATUS参数
空白:此文件正在使用。
stale:该文件内容是不完整的。
invalid:该文件不可以被访问 , 如刚建立。
deleted:该文件已不再有用。
SQL> alter system switch logfile;
系统已更改。
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
SQL> alter system checkpoint;
系统已更改。
2、重做日志组及其成员管理
1、创建重做日志组
[root@oracle ~]# mkdir -p /backup/orcl/log //创建重做日志组备份文件夹
[root@oracle ~]# chown -R oracle /backup/
[root@oracle ~]# su - oracle
Last login: Wed May 13 22:57:23 CST 2020 on pts/0
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> alter database add logfile group 4 //alter database:数据库实例名;group:日志组编号
2 ('/u01/app/oracle/oradata/orcl/redo04a.log', //曰志文件路径及名称
3 '/backup/orcl/log/redo04b.log') size 10m; //size:日志文件大小
数据库已更改。
SQL> select group#,status,type,member from v$logfile; //查看重做日志组信息
GROUP# STATUS TYPE MEMBER
---------- ---------- --------------------- --------------------------------------------------
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log
2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log
1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log
4 ONLINE /u01/app/oracle/oradata/orcl/redo04a.log //新添加日志1
4 ONLINE /backup/orcl/log/redo04b.log //新添加日志2
2、删除重做日志组
SQL> select group#,sequence#,bytes,members,archived,status from v$log; //查看重做曰志信息
GROUP# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS
---------- ---------- ---------- ---------- --------- ----------
1 4 209715200 1 NO INACTIVE
2 5 209715200 1 NO CURRENT
3 3 209715200 1 NO INACTIVE
4 0 10485760 2 YES UNUSED
SQL> alter database drop logfile group 4; //删除重做日志组第4组
数据库已更改。
SQL> select group#,sequence#,bytes,members,archived,status from v$log; //查看重做曰志信息
GROUP# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS
---------- ---------- ---------- ---------- --------- ----------
1 4 209715200 1 NO INACTIVE
2 5 209715200 1 NO CURRENT
3 3 209715200 1 NO INACTIVE
如果无法删除,强制切换一下日志
SQL>alter system switch logfile;
当前的日志组不能删除,要删除当前日志组需要先对当前日志组进行切换,使用命令为alter system switch logfile
活动的日志组不可以删除
没有归档的日志组不可以删除(前提是已经运行在归档模式)
3、添加/删除重做日志文件
SQL> alter database add logfile member //添加重做日志文件
2 '/backup/orcl/log/redo01b.log' to group 1,
3 '/backup/orcl/log/redo02b.log' to group 2;
数据库已更改。
SQL> select group#,status,type,member from v$logfile; //查看重做日志组信息
GROUP# STATUS TYPE MEMBER
---------- ---------- --------------------- -----------------------------------------
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log
2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log
1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log
1 INVALID ONLINE /backup/orcl/log/redo01b.log
2 INVALID ONLINE /backup/orcl/log/redo02b.log
SQL> alter database drop logfile member //删除重做日志文件
2 '/backup/orcl/log/redo02b.log';
alter database drop logfile member
*
第 1 行出现错误:
ORA-01609: 日志 2 是线程 1 的当前日志 - 无法删除成员 ORA-00312:
联机日志 2 线程 1: '/u01/app/oracle/oradata/orcl/redo02.log'
ORA-00312: 联机日志 2 线程 1: '/backup/orcl/log/redo02b.log'
SQL> alter system switch logfile; //出现错误提示,强制切换重做日志
系统已更改。
SQL> alter database drop logfile member
2 '/backup/orcl/log/redo02b.log';
数据库已更改。
SQL> select group#,status,type,member from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ---------- --------------------- --------------------------------------
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log
2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log
1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log
1 INVALID ONLINE /backup/orcl/log/redo01b.log
不能删除当前组的成员,若要删除则先执行强制性切换重做日志的命令
活动的日志成员不可以删除
没有归档的日志文件不能删除(前提是已运行在归档模式下)
当日志组只有一个成员
3、日志切换和检查点事件
检查点事件越频繁,一旦数据库发生故障,需要数据库恢复的重做曰志中的数据就越少。
SQL> ALTER SYSTEM SWITCH LOGFILE; //强制日志切换
系统已更改。
SQL> ALTER SYSTEM CHECKPOINT; //强制产生检查点事件
系统已更改。
三、管理归档日志文件
1、配置数据库归档日志
SQL> archive log list; //查询数据库归档模式,确认非存档
数据库日志模式 非存档模式
自动存档 禁用
存档终点 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch
最早的联机日志序列 5
当前日志序列 7
SQL> shutdown immediate //关闭数据库
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount; //动数据库到mount状态
ORACLE 例程已经启动。
Total System Global Area 1593835520 bytes
Fixed Size 8793256 bytes
Variable Size 1023411032 bytes
Database Buffers 553648128 bytes
Redo Buffers 7983104 bytes
数据库装载完毕。
SQL> alter database archivelog; //将数据库设置为归档方式
数据库已更改。
SQL> archive log list; //查询数据库归档模式
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch
最早的联机日志序列 5
下一个存档日志序列 7
当前日志序列 7
SQL> alter database open; //打开数据库
数据库已更改。
SQL> alter system switch logfile; //强制日志切换
系统已更改。
SQL> select dest_id,name,archived from v$archived_log; //查看归档日志文件的路径
DEST_ID NAME ARCHIVED
---------- ---------------------------------------------------------------------
1 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch1_7_975664254.dbf YES
2、获取归档日志信息
SQL> select dest_id,name,archived from v$archived_log; //获取已归档的日志文件的信息
DEST_ID NAME ARCHIVED
---------- ---------------------------------------------------------------------- ----
1 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch1_7_975664254.dbf YES
四、数据字典管理
1、静态数据字典视图
1、查看当前用户拥有的所有表的信息
SQL> select * from user_tables;
2、查询该用户拥有哪些索引
SQL> select index_name from user_indexes;
3、查询该用户拥有哪些视图
SQL> select view_name from user_views;
4、查询该用户拥有哪些数据库对象
SQL> select object_name from user_objects;
5、描述当前用户的信息
SQL> select * from user_users;
6、查询当前用户能够访间的所有表、过程、函数等信息
SQL> select owner,object_name,object_type from all_objects;
7、查看所有的视图及其描述
SQL> desc dictionary
8、查询USER开头的视图
SQL> select table_name from dictionary where table_name like 'USER%';
2、动态数据字典视图及使用
1、查询和曰志文件相关的信息
SQL> col name for a25
SQL> col object_id for 999999999
SQL> select * from v$fixed_table where name like 'V$LOG%';
NAME OBJECT_ID TYPE TABLE_NUM CON_ID
------------------------- ---------- --------------- ---------- ----------
V$LOGFILE ########## VIEW 65537 0
V$LOG ########## VIEW 65537 0
V$LOGHIST ########## VIEW 65537 0
V$LOG_HISTORY ########## VIEW 65537 0
V$LOGMNR_CONTENTS ########## VIEW 65537 0
V$LOGMNR_LOGS ########## VIEW 65537 0
V$LOGMNR_DICTIONARY ########## VIEW 65537 0
V$LOGMNR_PARAMETERS ########## VIEW 65537 0
V$LOGMNR_LOGFILE ########## VIEW 65537 0
V$LOGMNR_PROCESS ########## VIEW 65537 0
V$LOGMNR_TRANSACTION ########## VIEW 65537 0
......
2、查看重做日志组状态信息
SQL> select group#,members,archived,status from v$log;
GROUP# MEMBERS ARCHIVED STATUS
---------- ---------- --------- ------------------------------------------------
1 1 NO INACTIVE
2 1 NO CURRENT
3 1 NO INACTIVE
3、查看重做曰志文件信息
SQL> col group# for 9
SQL> col type for a7
SQL> col member for a40
SQL> set line 120;
SQL> select* from v$logfile;
GROUP# STATUS TYPE MEMBER IS_RECOVE CON_ID
------ ------- ------- ---------------------------------------- --------- ----------
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log NO 0
2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log NO 0
1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log NO 0
4、查询当前正在使用的重做日志文件的信息
SQL> col STATUS for a20
SQL> select l.group#,l.archived,l.status,lf.type,lf.member from v$log l, v$logfile lf where l.group#=lf.group#;
GROUP# ARCHIVED STATUS TYPE MEMBER
------ --------- -------------------- ------- ----------------------------------------
3 NO INACTIVE ONLINE /u01/app/oracle/oradata/orcl/redo03.log
2 NO CURRENT ONLINE /u01/app/oracle/oradata/orcl/redo02.log
1 NO INACTIVE ONLINE /u01/app/oracle/oradata/orcl/redo01.log
5、查看实例信息
SQL> col host_name for a10
SQL> col instance_name for a10
SQL> col version for a15
SQL> select instance_name,host_name,version,startup_time,logins from v$instance;
INSTANCE_N HOST_NAME VERSION STARTUP_TIME LOGINS
---------- ---------- --------------- ------------ ------------------------------
orcl oracle 12.2.0.1.0 14-5月 -20 ALLOWED
6、查看当前数据库的信息
SQL> col name for a10;
SQL> select name,created,log_mode from v$database;
NAME CREATED LOG_MODE
---------- ------------ ------------------------------------
ORCL 09-5月 -18 NOARCHIVELOG