You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将.dmp文件导入AWS RDS Oracle的Perl脚本报错求助

解决Perl脚本导入.dmp到RDS Oracle时的\x93字符错误

你碰到的这个Unrecognized character \x93错误,本质是代码里用了非标准的智能引号(弯引号),Perl只能识别标准的直引号(""或''),智能引号会被当成非法字符。

具体需要修改的代码点:

  1. 第7行的路径引号错误:
    原代码里的my $dirname = ""C:\Users\Administrator\Desktop\datadump"";多了一层双引号,而且Windows路径的反斜杠需要转义(或者用正斜杠更省心),改成:

    my $dirname = "C:\\Users\\Administrator\\Desktop\\datadump";
    # 或者用正斜杠避免转义:
    # my $dirname = "C:/Users/Administrator/Desktop/datadump";
    
  2. 第8行的智能引号替换:
    原代码里的my $data = “201712010305_CLOUDTOSAI”;用了弯引号,换成标准双引号:

    my $data = "201712010305_CLOUDTOSAI";
    
  3. 第22行的哈希语法错误:
    原代码里的('ora_type’,’24’);同样用了智能引号,而且Perl哈希的键值对建议用箭头语法更清晰,改成:

    my %attrib = ('ora_type' => '24');
    

额外需要注意的坑(避免后续报错):

  • UTL_FILE目录权限问题:RDS Oracle对UTL_FILE的目录有严格限制,你需要先在数据库中创建合法的目录对象,比如:

    CREATE DIRECTORY DATA_DUMP AS 'C:/Users/Administrator/Desktop/datadump';
    GRANT READ, WRITE ON DIRECTORY DATA_DUMP TO testphat17;
    

    注意:RDS不允许随意指定本地目录,建议确认RDS允许的UTL_FILE路径范围(比如使用RDS自带的临时目录)。

  • 绑定参数长度不足:第16行bind_param_inout(":dirname", \$dirname, 12);里的长度12远远小于你的路径长度,会导致参数截断,改成足够大的数值,比如100:

    $stmt->bind_param_inout(":dirname", \$dirname, 100);
    

    同理$fname的绑定长度也需要调整到足够容纳文件名的长度。

  • 文件读取的二进制模式:你已经加了binmode(INF);,这个很重要,因为.dmp是二进制文件,必须用二进制模式读取才不会损坏数据。

修改完这些点后,重新运行脚本应该就能解决当前的字符错误了。

内容的提问来源于stack exchange,提问作者The One

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:27:32