当前位置:数据库 > Oracle >>

ora-00257错误以及oracle字符集

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字节,就可以了。
数据库字符集修改这里就不详解了,那玩意建库的时候注意点就可以了。
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,