Linux操作文档——Oracle 配置管理

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、删除重做日志组

扫描二维码关注公众号,回复: 14677720 查看本文章
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

猜你喜欢

转载自blog.csdn.net/g950904/article/details/106252699