ORACLE数据库管理方法学习总结
在我们日常使用Oracle数据库的过程中,经常会遇到这样那样的问题,这里我就我遇到的问题和自己的解决方法进行总结和分享,希望对大家有所帮助。
主要内容有以下几点:
一、归档日志错误
Oracle在安装时,默认归档是被选中的,但是归档的开启经常会引起意外的数据库不能访问和正常启动的错误,一般错误信息为:ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 87.41% used, and has 270457856 remaining bytes available,但是当我们远程连接数据库时,提示数据库内部错误,仅限本地连接,这时我们无法使用数据库进行业务操作,怎么处理呢,一般有两种方法进行解决:①清理数据库已有归档日志,②增大归档日志存储空间,让未完成的归档日志能成功归档。但以上两种方法是治标不治本,最好的解决方法是:①将归档关闭(前提数据备份及时或数据不太重要,如果是自己的开发机器,可以这样处理),②配置rman备份脚本,并定时清除归档日志备份文件(生产环境下的Oracle服务,建议这样处理)。具体解决归档日志错误问题的方法如下:
★方法一:增大闪回恢复区
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 2G
SQL> alter SYSTEM SET db_recovery_file_dest_size=15g;(15G作为示例)
System altered.
完成后重启oracle服务。
★方法二:删除闪回恢复区里的归档日志
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE .07 0 1
ONLINELOG 1.46 0 3
ARCHIVELOG 49.68 0 126
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
6 rows selected
登陆rman:
rman target / nocatalog (注意先声明ORACLE_SID)
RMAN>delete archivelog all;
完成后重启oracle服务。
★方法三:改变数据库归档模式——关闭数据库归档模式
我们用ALTER DATABASE语句加上 ARCHIVELOG or NOARCHIVELOG条件参数,来改变数据库的归档模式. 要改变归档模式,我们必须使用具有sysdba权限的用户进行操作.
如下过程是将数据库从归档模式变为不归档模式(ARCHIVELOG to NOARCHIVELOG):
- 停止数据库实例.命令:SHUTDOWN
打开的数据库,必须先关闭,在归档模式进行变更前,如果不关闭,不能改变归档模式。 - 备份数据库.
- 启动数据库实例到挂载(mount)状态,但不能打开(open).命令:STARTUP MOUNT.
- 改变数据库归档模式.命令如下:
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN; - 关闭数据库. 命令:SHUTDOWN IMMEDIATE
- 备份数据库.
- 打开数据库.命令:STARTUP
二、tnsnames.ora文件里的TNS配置不能正常使用
一般情况下,我们遇到的问题都是因为先安装Oracle服务器组件,再安装Oracle客户端组件,而导致的在客户端组件未安装以前配置的TNS服务配置不能使用,提示错误信息为:不能识别此网络服务名称。解决方法有两种:①将本机系统PATH环境变量中Oracle客户端的安装路径(例如d:\oracle\product\10.2.0\client_1\bin;)放到Oracle服务器组件的安装路径(D:\oracle\product\10.2.0\db_1\bin;)后,②将服务器组件安装路径下的tnsnames.ora文件内容复制一份粘贴到客户端组件安装路径下的tnsnames.ora文件中。
三、Oracle监听程序地址无效
在Oracle服务器端安装成功后,经常会遇到在电脑重启一次后,监听程序就无法启动,这时解决方法有一种:用netca命令(Net Configuration Assistant工具)进行监听的重新配置。具体步骤:
- cmd窗口中执行netca命令;
- 选择监听程序配置,点击下一步;
- 选择重新配置,点击下一步;
- 选择默认的Listener,点击下一步;
- 选择TCP协议,点击下一步;
- 制定端口号(默认1521),点击下一步;
- 是否配置下一个监听程序(选择“否”),点击下一步;
- 成功完成配置,点击下一步,再点击完成,退出Net Configuration Assistant;
- 测试监听程序服务是否能正常启动。
四、因磁盘空间或别的原因,需要做表空间数据文件迁移或数据文件重命名
这里的方法我建议用命令来执行,但事先的全库数据备份还是必不可少的,具体步骤如下:
-
重命名单个表空间中某个数据文件的操作过程
- 在数据库为打开(open)状态下,让要重命名的表空间离线.
例如:
ALTER TABLESPACE users OFFLINE NORMAL; - 在操作系统里重命名该数据文件.
- 用ALTER TABLESPACE语句,添加RENAME DATAFILE条件来进行数据库中数据文件的重命名.
例如, 下面语句用来将 /u02/oracle/rbdb1/user1.dbf 和 /u02/oracle/rbdb1/user2.dbf 分别重命名为/u02/oracle/rbdb1/users01.dbf 和 /u02/oracle/rbdb1/users02.dbf:
ALTER TABLESPACE users
RENAME DATAFILE '/u02/oracle/rbdb1/user1.dbf',
'/u02/oracle/rbdb1/user2.dbf'
TO '/u02/oracle/rbdb1/users01.dbf',
'/u02/oracle/rbdb1/users02.dbf';
★通常数据文件要包含完整的文件名称(包含文件路径). - 备份数据库.
-
修改单个表空间的某个数据文件存储路径的操作步骤
以下是重定位一个表空间中数据文件路径的一个简单操作过程.
假设以下条件:
- 一个打开的数据库有表空间名称为users,users表空间所有的所有数据文件存储在同一个驱动器或路径下;
- users表空间里的数据文件需要更改存储到别的驱动器或路径下;
- 当前我们可以以管理员权限连接到要修改的目标数据库;
- 我们在修改之前已经有了带修改数据库的全量数据备份.
完成以下几步,就可以达到修改效果:
- 如果我们不知道要更改的数据文件的大小和位置,可以查询数据字典视图(DBA_DATA_FILES)以获取相关信息,如:
SQL> SELECT FILE_NAME, BYTES FROM DBA_DATA_FILES
2> WHERE TABLESPACE_NAME = 'USERS';
FILE_NAME BYTES
------------------------------------------ ----------------
/u02/oracle/rbdb1/users01.dbf 102400000
/u02/oracle/rbdb1/users02.dbf 102400000 - 将表空间连同数据文件置为脱机状态:
ALTER TABLESPACE users OFFLINE NORMAL; - 复制数据文件到需要转移的位置,并用操作系统进行重命名处理,保证文件名的准确性.
- 重命名表空间的数据文件.
数据文件所指向的操作系统文件,记录在数据库控制文件中,我们必须更改这些信息,保证重命名的正确性.
用ALTER TABLESPACE ... RENAME DATAFILE语句进行操作.
ALTER TABLESPACE users
RENAME DATAFILE '/u02/oracle/rbdb1/users01.dbf',
'/u02/oracle/rbdb1/users02.dbf'
TO '/u03/oracle/rbdb1/users01.dbf',
'/u04/oracle/rbdb1/users02.dbf'; - 备份数据库.