Oracle数据库中ora-12899错误的解决方法

在使用ORACLE的过程中,会出现各种各样的问题,各种各样的错误,其中ORA-12899就是前段时间我在将数据导入到我本地机器上的时候一直出现的问题.不过还好已经解决了这个问题,现在分享一下,解决方案;

出现ORA-12899,是字符集引起的,中文在UTF-8中占3个字节,ZHS16GBK中占2个字节,而源dmp文件字符集是ZHS16GBK库里倒出来的数据,现在要导入到目标字符集为UTF-8的库里,所以会出现ORA-12899
其实只要修改一下ORACLE 的字符集就可以很好的解决这个问题;

但是在修改字符集的时候,我发现,我把sys账户的密码给忘记了,这就悲剧了,所以我只好先修改sys用户的密码咯.

修改密码也是分好几种情况的,下面我就一一列举吧:

一、忘记除SYS、SYSTEM用户之外的用户的登录密码。

用SYS (或SYSTEM)用户登录。

CONN SYS/PASS_WORD AS SYSDBA;

使用如下语句修改用户的密码。

ALTER USER user_name IDENTIFIED BY newpass;

注意:密码不能全是数字。并且不能是数字开头。否则会出现:ORA-00988: 口令缺失或无效

二、忘记SYS用户,或者是SYSTEM用户的密码。

如果是忘记SYSTEM用户的密码,可以用SYS用户登录。然后用ALTER USER 密令

修改密码。

CONN SYS//PASS_WORD AS SYSDBA;
ALTER USER SYSTEM IDENTIFIED BY newpass; 

如果是忘记SYS用户的密码,可以用SYSTEM用户登录。然后用ALTER USER 密令

修改密码。

CONN SYSTEM//PASS_WORD ;
ALTER USER SYSTEM IDENTIFIED BY newpass; 

三、如果SYS,SYSTEM用户的密码都忘记或是丢失。

这一项尤其重要。

可以使用ORAPWD.EXE 工具修改密码。

开始菜单->运行->输入‘CMD',打开命令提示符窗口,输入如下命令:

orapwd file=D:/oracle/product/10.2.0/db_1/database/pwdctcsys.ora
password=newpass 

这个命令重新生成了数据库的密码文件。密码文件的位置在ORACLE_HOME目录下
的/database目录下。

这个密码是修改sys用户的密码。除sys和system其他用户的密码不会改变。

修改过密码之后就能以dba的身份进行修改了,不是dba的话在执行修改命令的时候会提示你权限不足.

开始-->运行-->cmd,之后输入:"sqlplus sys/oracle@192.168.0.1/orcl as SYSDBA"

如果不能正常进入,那就需要你手动输入用户名和密码,进入之后会出现"SQL>"的提示,按照下面给出的命令依次执行就可以了,

SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP MOUNT
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK ;
ALTER DATABASE CHARACTER SET ZHS16GBK
*ERROR at line 1:
ORA-12712: new character set must be a superset of old character set

报字符集不兼容,此时下INTERNAL_USE指令不对字符集超集进行检查:

SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP

这时候,这个ORA-12899就已经彻底解决了,就可以进行数据的导入了...

PS:下面给大家补充下:oracle 里*.ora文件是干什么用的?

为什么10g里边没有*.ora文件?

9i里边的*.ora 等于10g里边的*.dbf么?

在创建表<a href=' http://www.eysky.cn' target='_blank'>空间</a>

DATAFILE 用于指定数据文件的具体位置和大小。但是我看到有些文章使用

*.ora文件,如DATAFILE 'D:\\ORACLE\\ORADATA\\ORA92\\LUNTAN.ora' SIZE 5M ,有些

则使用*.dbf文件,如DATAFILE 'D:\\ORACLE\\ORADATA\\ORA92\\LUNTAN.dbf' SIZE 5M

网上的说法是.dbf-数据文件, .tmp-临时文件, .log-重作日志文件(redo log file), .ctl-控制文件

.ora-参数文件, .dat-Oracle系统文件

只是通过扩展名来标识文件的类型而已,对于数据文件不管是ora/dat/dbf,都是一样的,没有什么区别。我个人觉得也是这样。不知大家的意见是怎样的?

总结

以上所述是小编给大家介绍的Oracle数据库中ora-12899错误的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2017-10-31

plsql连接oracle数据库报ora 12154错误解决方法

plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错"ORA-12154: TNS: 无法解析指定的连接标识符" 解决方法如下: 1.先检查服务器端的监听服务是否打开,如果没有打开请启动其监听 客户端:tnsping <tns_name> 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql

Laravel中常见的错误与解决方法小结

一.报错: 「Can't swap PDO instance while within transaction」 通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的: <?php public function setPdo($pdo) { if ($this->transactions >= 1) { throw new RuntimeException(" Can't swap PDO instance while within transact

讲解Oracle数据库中结束死锁进程的一般方法

1.查看死锁 1)用dba用户执行以下语句 select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object) 如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台.字段说明: Username:死锁语句所用的数据库用户: Lockwait:死锁的状态,如果有内容表示被死锁. Status: 状态,active表示被死锁 Ma

sqlserver 此数据库没有有效所有者错误的解决方法

某一天,在调试程序时突然发现,在附加数据库后,想添加关系表,结果出来了下面的错误: 此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用"数据库属性"对话框的"文件"页或Alter AUTHORIZATION语句将数据库所有者设置为有效登录名,然后再添加数据库关系图支持对象. 按照第一种方式更改怎么也不行,并且文件的所有者也是sa.在csdn中找了半天,有个同志给出了第二种解法,使用ssms.具体在SSMS中运行以下命令: Alter AU

Java 使用poi把数据库中数据导入Excel的解决方法

Java 利用poi把数据库中数据导入Excel 效果: 使用时先把poi包导入工程的path,注意只需要导入poi包即可,下载后有三个jar包 核心代码: 连接数据库:DBConnection.java 复制代码 代码如下: package org.xg.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;i

在Oracle数据库中添加外键约束的方法详解

外键指定一个列(或一组列)的值必须符合另一个表的一些行的值.我们说这是维持关联表的参照完整性. 在图形化界面中,在 外键 选项卡,只需简单地点击外键栏位来编辑.使用外键的工具栏,能让你创建新的.编辑或删除选择的外键栏位. 添加外键:添加一个外键到表. 删除外键:删除已选择的外键. 使用 名 编辑框来输入新键的名. 使用 参考模式.参考表 和 参考限制 下拉列表来分别选择一个外部索引数据库.表及限制. 要包含栏位到键,只需简单地双击 栏位 栏位或点击  来打开编辑器进行编辑. 删除时 下拉列表定义

JQuery 1.3.2以上版本中出现pareseerror错误的解决方法

感觉很莫名奇妙,前一阵子还好好的,怎么现在就突然报错了? 程序根本没动.于是开始跟踪分析,请求.返回的内容...最后判断是jquery 不承认返回的内容是json格式.当时返回的内容是: 复制代码 代码如下: {'keylist':[ {'tid':'13',"sumnum':'1'},{'tid':'21','sumnum':'1'} ]} 经过仔细检查也没发现任何问题,返回流的字符已经设成utf-8,内容用ff检测,ff也能识别成json格式,但此时还是报"pareseerror&

MYSQL中 TYPE=MyISAM 错误的解决方法

create 语句后面的TYPE=MyISAM TYPE=MyISAM 和 ENGINE=MyISAM 都是设置数据库存储引擎的语句 ,(老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM). MySQL 5.1为向下兼容而支持这个语法,但TYPE现在被轻视,而ENGINE是首先的用法. 一般地,ENGINE 选项是不必要的:除非默认已经被改变了,MyISAM是默认存储引擎. 所以直接将原来TYPE=MyISAM 改成ENGINE=MyISAM 就可以了

Oracle数据库ORA 54013错误的解决办法

ORA-54013: 不允许对虚拟列执行 INSERT 操作 这是Oracle 11 的新特性 -- 虚拟列. 在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引.现在Oracle 11允许我们直接在表上使用虚拟列来存储表达式.虚拟列的值是不存储在磁盘的,它们是在查询时根据定义的表达式临时计算的.我们不能往虚拟列中插入数据,我们也不能隐式的添加数据到虚拟列,我们只能使用物理列来插入数据.然后可以查询