Oarcle 日常维护

背景

由于归档日志不停增加并且得不到清理,导致硬盘空间不足。因此需要定时清理归档日志,腾出可用空间。

操作步骤

1
2
3
4
5
6
7
8
9
10
11
12
# 使用rman清理
$ rman
RMAN> connect target /
RMAN> crosscheck archivelog all;
# 列出日志
RMAN> list archivelog all;
# 清理所有日志
RMAN> delete expired archivelog all;
# 期间要输入yes
RMAN> exit
# 删除3天前的归档日志
RMAN> delete archivelog all completed before 'sysdate-3';
1
2
# 强制删除
delete noprompt force archivelog all completed before 'sysdate-2';

启动顺序:先启动备库,后启动主库

关闭顺序:先关闭主库,后关闭备库

1、正确打开备库和主库
备库:

1
2
3
4
5
6
7
SQL> conn / as sysdba
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> recover managed standby database disconnect from session;

查看备库状态和模式:
SQL>select name,open_mode,protection_mode,database_role from v$database;

主库:

1
2
3
4
5
6
7
8
[oracle@localhost~]$ lsnrctl start
[oracle@localhost~]$ sqlplus /nolog
SQL>conn / as sysdba
SQL> STARTUP;
查看主库状态和模式:
SQL> select name,open_mode,protection_mode,database_role from v$database;
在主库归档当前日志:
SQL> alter system archive log current;

2、正确关闭顺序
主库

1
2
SQL> alter system archive log current;
SQL> shutdown immediate;

备库:

1
2
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> SHUTDOWN IMMEDIATE;

遇到的问题

  • 重启后无法通过cmd连接进入SQL>模式,连接报错提示
    mark
1
2
3
4
检查是否oracle相关服务没启动
启动以下服务:
OracleOraDb11g_home1ClrAgent、OracleOraDb11g_home1TNSListener、OracleServiceORCL
就可以了

授权用户权限
1
2
3
4
5
6
7
8
9
10
11
# 运行sql*plus进入SQL模式
sqlplus /nolog
# 以sysdba模式连接数据库
SQL> conn / as sysdba
# 创建用户(user 用户,identified 密码)
create user whw identified by xxx;
# 对创建的用户进行授权(connect连接权限,创建操作视图权限,只读权限)
grant connect,create view,select any table to whw;

# 修改密码
alter user xxx identified by xxxx;

mark


1
2
3
4
5
6
7
# 操作表
# 授予all on 权限
set line 999
set pagesize 0
spool c:\liyunkai.txt;
select 'grant all on '||owner||'.'||object_name||' to WUHW;' from dba_objects where owner ='WMS_USER' and object_type='TABLE';
spool off;
1
2
3
4
5
6
# 创建SYNONYM
set line 999
set pagesize 0
spool c:\liyunkai_syn.txt;
select 'create synonym WUHW.'||object_name||' for WMS_USER'||'.'||object_name||';' from dba_objects where owner ='WMS_USER' and object_type='TABLE';
spool off;

1
2
3
4
5
6
# 授予操作视图的权限
set line 999
set pagesize 0
spool c:\liyunkai1.txt;
select 'grant all on '||owner||'.'||object_name||' to wuhw;' from dba_objects where owner ='WMS_USER' and object_type='VIEW';
spool off;
1
2
3
4
5
6
# 创建视图synonym
set line 999
set pagesize 0
spool c:\liyunkai1_syn.txt;
select 'create synonym wuhw.'||object_name||' for WMS_USER'||'.'||object_name||';' from dba_objects where owner ='WMS_USER' and object_type='VIEW';
spool off;
1
2
3
4
5
6
# 创建存储过程同义词synonym
set line 999
set pagesize 0
spool c:\liyunkai2_syn.txt;
select 'create synonym wuhw.'||object_name||' for WMS_USER'||'.'||object_name||';' from dba_objects where owner ='WMS_USER' and object_type='PROCEDURE';
spool off;

查看oracle用户锁定时间

1
2
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select username,lock_date from dba_users where username='TEST';

mark

ORACLE清理监听日志

1
2
/opt/oracle/app/diag/tnslsnr/机器名/listener/trace/listener.log
D:\app\Administrator\diag\tnslsnr\主机名\listenner\trace\listener.log
1
2
3
4
5
6
7
8
# 清理步骤
# 先用lsnrctl进入监听模式
G:\docu>lsnrctl
LSNRCTL>set log_status off (此时便可删除监听日志文件listener.log,然后再新建一个listener.log,日志文件位置:
D:\app\Administrator\diag\tnslsnr\主机名\listenner\trace\下面)

LSNRCTL>set log_status on
意思就是先停止监听日志输出。删除后再开启日志
win普通用户无法使用sqlplus / as sysdba登录
1
2
3
其实在这种情况下,Oracle采用的是操作系统认证方式.
当属于操作系统DBA组用户登陆到数据库服务器,那么Oracle认为这样的用户就可以授权以SYSDBA身份登录数据库。
这时的用户名和密码随便输什么,都能连上库,使用show user命令查看登陆用户,其实都是SYS用户。
1
2
3
Linux下类似,使用id命令,查看用户所在组,如果在dba组,那么也可以以操作系统的方式直接连库。
[oracle@mydb ~]$ id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)

-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。