一个头疼了一天的问题

在从EBS数据库9i升级到10.2.0.4.4时,遇到乱码问题,通过排查环境变量、字符集、全角与半角输入等,最终确认是Oracle Data Pump的BUG导致,且该BUG仅存在于10.2.0.4版本中。

背景:
EBS数据库从9i升级到10.2.0.4.4,为了规避一些已知的问题,升级最后一步是从10.2.0.4镜像库通过expdp导入10.2.0.4.4数据库

故障描述:
升级后目标库(10.2.0.4.4)web界面显示乱码,
初步看像是中间多了很多空格
例如:s e l e c t * f r o m v $ p r o c e s s w h e r e a d d r
而10.2.0.4导出库是正常的
例如:select * from v$process where addr

故障处理:

1.怀疑是数据库的字符集不一致导致,检查结果导出库和生产库一致
2.怀疑是导入导出的环境变量不一致导致,检查结果环境变量一致
3.怀疑导出库nls_database_parameters多了NLS_SAVED_NCHAR_CS参数,而生产库没有,导出库从9i升级上来,保留了9i的参数,NLS_SAVED_NCHAR_CS影响不大
4.怀疑是全角和半角输入的问题,全角2个字符,半角一个字符,很像是这种情况,让应用人员从客户端模拟输入一条记录,结果显示正常
5.发现乱码对应的数据类型为long,查找其他的long字段,发现还有类似的情况,大概有10张表,所以基本排除前端输入时全角的问题
6.全角和半角可以用to_single_byte和to_multi_byte转换
SQL> select to_multi_byte('select') from dual;

TO_MULTI_BYTE('SELECT')
----------------------------------------------------------------
select
仔细观察,发现select和s e l e c t字体不一样,所以不是全角的问题,而是中间多了空格,所以彻底排除是全角的问题

7.long类型不是所有的字段都有空格,有的没有,怎么解释都解释不通
8.怀疑10.2.0.4和10.2.0.4.4版本不一样导致,从导出库10.2.0.4重新导出,然后分别导入导出库和生产库,结果都有空格,所以只要用datapump导入导出就会有问题
9.最后只能怀疑是BUG,问题确定后在MOS上搜索datapump long关键字,终于找到了是BUG,只在10.2.0.4上有,真倒霉
Bug 5598333 - EXPDP/IMPDP corrupts the data for a LONG column [ID 5598333.8]

原来是BUG,所以只有部分数据corrupt了,没有任何的规律,但可以重现


10.处理出错的数据

1)数据已经发生了变化,不能重新expdp/impdp
2)long字段只能用游标的方式从导入库update到生产库,批量update会报错
3)其中有一张表long超过4000字符,报buffer太小,被truncate了
4)尝试用物化视图把导入库转成CLOB,复制到生产库,然后从物化视图的CLOB update到long时也不行!需要把字段类型转成CLOB才行,从本地的CLOB update到CLOB是可以的
5)long用物化视图也不能从导入库复制到生产库
6)BUG有补丁,准备打补丁后重新导入导出这一张表

11.后来另外一个同事灵机一动,既然是datapump的bug,何不用imp/exp试试,呵呵,竟然可以,不用停机打补丁了。


[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/90901/viewspace-1056628/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/90901/viewspace-1056628/

<think>我们有一个任务:在Anaconda环境中创建一个使用中文的Rasa项目。 根据引用[1][3][4]中的信息,我们可以总结出以下步骤: 1. 创建Anaconda虚拟环境 2. 激活环境并安装必要的包(包括rasa, rasa-nlu-chi等) 3. 配置Rasa项目,特别是支持中文的NLU配置 注意:引用[4]提到了使用清华镜像源来加速安装,以及创建Rasa项目的经典案例。 具体步骤: 步骤1:创建并激活Anaconda虚拟环境 打开Anaconda Prompt(或命令行),执行以下命令: conda create -n rasa_chinese python=3.8 # 创建名为rasa_chinese的环境,指定python版本为3.8 conda activate rasa_chinese # 激活环境 步骤2:安装Rasa及相关组件(使用清华镜像源加速) 在激活的环境中,执行: pip install rasa -i https://pypi.tuna.tsinghua.edu.cn/simple # 使用清华镜像源安装rasa 但是,由于我们需要支持中文,引用[1]和[4]提到了安装rasa-nlu-chi(一个专门用于中文的rasa nlu组件)。然而,请注意,Rasa在3.x版本后已经不再使用rasa-nlu-chi,而是使用Rasa自己的NLU系统,并且通过使用不同的预训练模型来支持多语言。 因此,我们需要安装Rasa 3.x,并配置使用中文。 步骤3:初始化Rasa项目 rasa init 在初始化过程中,它会询问是否要创建项目目录,选择yes。然后它会下载一个预训练的模型(默认是英文的)。所以我们需要修改配置以支持中文。 步骤4:修改配置文件以支持中文 进入项目目录,修改`config.yml`文件,指定语言为中文(zh),并使用支持中文的pipeline。 例如,我们可以使用MITIE+Jieba或者使用Transformers(基于BERT)等。由于MITIE对中文的支持需要单独训练中文词向量,过程较为复杂,而Rasa 3.x推荐使用基于Transformer的模型。 因此,我们可以这样配置(在config.yml中): language: zh pipeline: - name: HFTransformersNLP model_name: "bert-base-chinese" - name: LanguageModelTokenizer - name: LanguageModelFeaturizer - name: DIETClassifier epochs: 100 - name: EntitySynonymMapper - name: ResponseSelector epochs: 100 policies: - name: MemoizationPolicy - name: TEDPolicy max_history: 5 epochs: 100 - name: RulePolicy 但是,请注意,使用bert-base-chinese需要安装transformers,我们可以通过pip安装: pip install transformers 另外,我们也可以使用Rasa提供的一个简单的中文pipeline(使用Jieba分词): language: "zh" pipeline: - name: "JiebaTokenizer" - name: "CRFEntityExtractor" - name: "CountVectorsFeaturizer" - name: "CountVectorsFeaturizer" analyzer: "char_wb" min_ngram: 1 max_ngram: 4 - name: "DIETClassifier" epochs: 100 步骤5:训练模型 rasa train 步骤6:测试 rasa shell 注意:使用Jieba分词需要安装jieba:pip install jieba 根据引用[4],在安装过程中可能会遇到镜像源的问题,我们可以配置conda的镜像源(修改.condarc文件)和pip的镜像源(使用-i参数或配置pip.conf)。 总结步骤: 1. 创建conda环境 2. 激活环境 3. 安装rasa(使用清华镜像源) 4. 初始化项目(rasa init) 5. 修改配置文件config.yml,设置语言为中文,并配置适合中文的pipeline 6. 安装所需的分词库(如jieba)或transformers(如果使用bert) 7. 训练模型 8. 测试 现在,我们按照这个步骤来编写详细指南。</think>### 在Anaconda中配置支持中文的Rasa项目 #### 步骤1:创建Anaconda虚拟环境 ```bash # 创建名为 rasa_chinese 的Python 3.8环境 conda create -n rasa_chinese python=3.8 -y # 激活环境 conda activate rasa_chinese ``` > 说明:Python 3.8与Rasa兼容性最佳,避免使用Python 3.9+[^3] #### 步骤2:配置国内镜像源 创建或修改 `C:\Users\<用户名>\.condarc` 文件,添加清华镜像源[^4]: ```yaml channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge - defaults show_channel_urls: true ``` #### 步骤3:安装Rasa及相关组件 ```bash # 安装Rasa核心包 pip install rasa -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装中文支持组件 pip install rasa[chinese] jieba mitie -i https://pypi.tuna.tsinghua.edu.cn/simple ``` > 关键组件说明: > - `jieba`:中文分词工具 > - `mitie`:中文NLP处理库 > - `rasa[chinese]`:中文语言扩展包 #### 步骤4:初始化中文Rasa项目 ```bash # 创建项目目录 mkdir rasa_chinese_project && cd rasa_chinese_project # 初始化项目(使用中文模板) rasa init --no-prompt ``` #### 步骤5:配置中文支持 修改 `config.yml` 配置文件: ```yaml language: zh # 设置中文语言 pipeline: - name: "JiebaTokenizer" # 中文分词器 - name: "MitieFeaturizer" # 中文特征提取 - name: "CRFEntityExtractor" # 实体识别 - name: "MitieNLP" # MITIE中文处理器 - name: "MitieEntityExtractor" - name: "EntitySynonymMapper" - name: "RegexFeaturizer" - name: "DIETClassifier" # 中文意图分类 epochs: 100 ``` #### 步骤6:准备中文训练数据 在 `data/nlu.yml` 中添加中文样本: ```yaml nlu: - intent: 问候 examples: | - 你好 - 早上好 - 晚上好 - intent: 询问症状 examples: | - 我最近[头痛](symptom)得厉害 - [咳嗽](symptom)三天了怎么办? ``` #### 步骤7:训练与测试 ```bash # 训练中文模型 rasa train # 启动交互测试 rasa shell ``` > 输入中文测试:`你好,我感觉头晕` #### 常见问题解决 1. **MITIE中文模型缺失**: ```bash # 下载预训练模型 wget https://github.com/mit-nlp/MITIE/releases/download/v0.4/MITIE-models-v0.2.tar.bz2 tar -xjf MITIE-models-v0.2.tar.bz2 ``` 在 `config.yml` 中添加: ```yaml language: zh pipeline: - name: "MitieNLP" model: "path/to/MITIE-models/chinese_model.dat" ``` 2. **编码错误处理**: 在 `base.yml` 中添加: ```yaml # 设置UTF-8编码 defaults: encoding: "utf-8" ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值