ora-00257错误以及oracle字符集
sqlplus /nolog
conn charge/charge
导致ora-00257错误一般都是归档日志存放目录已满,无法归档造成的。
// *Cause: The archiver process received an error while trying to archive
// a redo log. If the problem is not resolved soon, the database
// will stop executing transactions. The most likely cause of this
// message is the destination device is out of space to store the
// redo log file.
// *Action: Check archiver trace file for a detailed description
// of the problem. Also verify that the
// device specified in the initialization parameter
// ARCHIVE_LOG_DEST is set up properly for archiving
然后查看归档的存放目录:show parameter ARCHIVE_LOG_DEST
贴下我的参数:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /app/oracle/admin/oradb/adump
background_dump_dest string /app/oracle/admin/oradb/bdump
core_dump_dest string /app/oracle/admin/oradb/cdump
db_create_file_dest string
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
db_recovery_file_dest string /app/oracle/flash_recovery_are
a
db_recovery_file_dest_size big integer 1G
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string SERVICE=oradg_172.16.3.174 ARC
H VALID_FOR=(ONLINE_LOGFILES,P
RIMARY_ROLE) DB_UNIQUE_NAME=or
adg
其实大家这里可以看到,我做了DG,本里的归档如果不配置log_archive_dest ,那么就是在db_recovery_file_dest ,而且我设置了1G,查看该目录:du -sh /app/oracle/flash_recovery_area/archivelog 用掉928M,那么立即删除归档日志,注意删除归档是要在RMAN删除,以下是删除步骤:
rman target / ----连接
crosscheck archivelog all; -------检查无用归档日志
delete archivelog until time 'sysdate-1'; ---------------保留了最近一天的归档
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 0 0 0
BACKUPPIECE 1.14 .57 2
IMAGECOPY 0 0 0
FLASHBACKLOG 7.42 5.94 5
检查使用率
回复正常
下面说下oracle字符集:
首先怎么查看oracle字符集
1.select * from props$
where name in ('NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
2.SELECT USERENV('LANGUAGE') "Language" FROM DUAL;
这两种方法都可以查看
数据库系统字符集
NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。如:AMERICAN _ AMERICA. ZHS16GBK
字符集编码说明:
<Language><bit size><encoding>
即: <语言> <比特位数><编码>
比如: ZHS · 16 ·GBK
以上都是服务端的字符集
下面是客户端的字符集:
如果linux,可以echo $NLS_LANG
windows下面是注册表里面,可以在注册表搜索一下NLS_LANG。
这里主要介绍一下dmp文件字符集修改:
exp/imp的时候相信大家经常遇到字符集的困扰,这里其实可以修改dmp文件的头部信息,和要导入的修改一致,一般也是可以的,其实就是绕过了oracle的检查。
dmp文件的第2第3字节记录了字符集信息,这样做理论理论上支持从子集到超集的修改,具体就是用UE打开DMP文件,找出2和3字节
select nls_charset_name(to_number('0354','xxxx')) from dual;
如果dmp很大大家可以使用linux的命令cat 和awk的组合查看
select to_char(nls_charset_id('UTF8'), 'xxxx') from dual;
367
打开dmp文件修改相应的2和3字节,就可以了。
数据库字符集修改这里就不详解了,那玩意建库的时候注意点就可以了。