刚学SQL SERVER不久,有一个问题自己摸索没弄明白,所以想在这里提个问题,望会的高手指点一下。 我有一个.log格式的数据文件想导入数据库中,在数据库中建立表结构的字段为: 日期    datetime 
手机号 varchar(11) 
地区ID varchar(3) 
地区名称 varchar(4) 
CPID varchar(7) 
CP名称 varchar(16) 
业务ID varchar(12) 
业务名称 varchar(50) 
下载信息费 decimal(4,0) 使用如下bulk insert语句: 
bulk insert example.dbo.td from 'D:\游戏频道日下载消费清单.log' 
WITH (FIELDTERMINATOR ='\t',ROWTERMINATOR = '\n' ,FIRSTROW=2) 但运行后未能成功导入,得到的提示是: 消息 4866,级别 16,状态 8,第 1 行 
大容量加载失败。数据文件中第 1 行的第 9 列太长。请验证是否正确指定了字段终止符和行终止符。 
消息 7301,级别 16,状态 2,第 1 行 
无法从链接服务器 "(null)" 的 OLE DB 访问接口 "BULK" 获取所需的接口("IID_IColumnsInfo")。 
已经可以确定数据文件中的字段终止符是制表符。

解决方案 »

  1.   


    /*
    标题:Log Explorer for SQL Server v4.0.2的下载地址和使用说明
    作者:爱新觉罗·毓华 
    时间:2008-07-14
    地点:新疆乌鲁木齐
    资料来源:http://topic.csdn.net/u/20090305/00/849723bf-74ad-495f-8fc6-22d2108beb10.html?seed=1633183628
    */1、Lumigent Log Explorer for SQL Server v4.0.2 特别版下载地址
       http://down.chinaz.com/soft/7887.htm
       Log Explorer for SQL Server 4.2 注册码 
       wv5rc-uxvpz-e33-nr4694qs2 2、Log Explorer for SQL Server v4.0.2 
       安装完毕后,注册该程序(压缩文件有注册机) 
       打开log explorer file=>attach log file->选择服务器和登陆方式->connect-> 
       选择数据库->attach->左面对话框中browse->view log->就可以看到log记录了 
       点击“View DDL Commands”里面就有很多drop table 命令 
       点击下面的“undo”按钮是生成表结构的语句(create table ....) 
       点击下面的“Salvage”按钮是生成插入语句的(insert into ...values....) 
       想恢复的话: 右键log记录 undo transation->选择保存文件名和路径->然后打开该文件到查询分析器里执行T-sql代码就可以了    例如 如果log是delete table where ...的话,生成的文件代码就是insert table ....    log explorer使用的几个问题 
       1)、对数据库做了完全、差异和日志备份 
           备份时选用了删除事务日志中不活动的条目 
           再用Log explorer打试图看日志时 
           提示No log recorders found that match the filter,would you like to view unfiltered data 
           选择yes,就看不到刚才的记录了 
           如果不选用了删除事务日志中不活动的条目 
           再用Log explorer打试图看日志时,就能看到原来的日志 
       2)、修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复 
       3)、然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上, 
           否则会出现数据库正在使用无法恢复) 
           恢复完后,再打开log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data 
           选择yes,就看不到刚才在2中修改的日志记录,所以无法做恢复. 
       4)、不要用SQL的备份功能备份,搞不好你的日志就破坏了. 
           正确的备份方法是: 
           停止SQL服务,复制数据文件及日志文件进行文件备份. 
           然后启动SQL服务,用log explorer恢复数据 
       5)、如果你的数据库的日志恢复模型是simple,那就不可能用log explorer恢复 
       6)、Log explorer必须安装在要恢复数据库的sql server服务器上,或者在sql server服务器上安装服务端,在操作的电脑上安装客户端进行数据恢复 3、如果数据量比较大的话,使用磁带机和集群的话,安装了正版的VERITAS ,恢复数据是比较好的方法。 
       下面是该软件重要的新功能: 
       1)、灾难恢复演习(Disaster Recovery Fire Drill)--能够自由测试、规划和检验灾难恢复计划,而不会中断生产过程。 
       2)、集群模拟器(Cluster Simulator)--可测试应用故障切换方案,以验证应用的可用性,确认应用是否根据计划的故障切换策略和应用需求,迁移到最适当的服务器。 
       3)、全局集群选件(Global Cluster Option)--当可用性要求从本地迁移到广域灾难恢复时,能够快速、轻松地升级到任何体系结构。 
       4)、即时访问复制数据--在复制数据的同时,能够即时访问数据,只占用客户的部分可用存储容量。 
       5)、卷复制顾问工具(Volume Replicator Advisor)--准确地分析带宽需求,确保应用得到优化。 
    4、几点恢复数据心得: 
       1)、平时需要做好双机热备份,日备份,月备份,年备份,数据复制,异常记录等工作,在数据丢失的情况下才能做到心中不急。
       2)、如果硬盘损害错误,或者误删除数据库的时候,可以考虑用Easyrecovery或者Recover4all等软件恢复删除或者受到损害的文件,再恢复数据。 
       3)、如果实在遇到自然因素,网络又断开了复制操作的情况下,建议只有手工"造取"一批数据出来弥补丢失数据,一般选取类似纬度(如时间、区域等)的数据。 
      

  2.   

    游戏频道日下载消费清单.log?什么文件?
      

  3.   

    log文件可能是日志文件,需要通过Log Explorer把日志文件来恢复到数据库中去.
      

  4.   

    可能数据库格式有问题,先整理一下。然后直接通过SQL SERVER导入数据就可以了。
      

  5.   

    里面全是二进制的数据话,先换成txt文件,试试。
    sql访问txt文件的两种方法
    select * from openrowset('microsoft.jet.oledb.4.0','text;hdr=yes;database=E:\',a#txt)
    select * from opendatasource('microsoft.jet.oledb.4.0','text;hdr=yes;database=E:\')...a#txtName              ID          Xtype UID
    sysrowsetcolumns   4           S     4
    sysrowsets         5           S     4
    sysallocunits      7           S     4
    sysfiles1          NULL        S     4
    syshobtcolumns      ;          S   
    __________________________________________________________________________________________
    查询文本文件的内容:上面的方法,是把所有的内容放在一列里面,如果要分成多个列的话,则需要定义schema.ini文件。schema.ini要和数据文件放在同一个目录下面schema.ini文件的定义方法:
      [b.txt]
      ColNameHeader=true
      format=tabdelimited
      col1=Name Text WIDTH 10
      col2=ID Text WIDTH 10
      col3=Xtype Text WIDTH 10
      col4=UID Text WIDTH 10
        第一行:如果文本文件的数据有列名,并且作为查询结果的列名的话,则ColNameHeader应该为true,否则定义为false,但是如果后面定义了列名的话,则不使用文本文件中数据的列名,而使用后面定义的列名。但是如果数据有列名的,最好定义为true,否则的话,数据的列名将作为表中的数据。
        第二行:format定义数据的分隔符。一般使用的分隔符有空格,制表符,逗号。分别对应的是delimited( )(注意括号里应该有一个空格),tabdelimited,csvdelimited。在选择分隔符的时候,建议使用tab,因为这样的话数据看起来比较整齐,但是不能为了保证数据的严格整齐,而在数据当中使用多个tab,这样的话读取的数据就会出现错误。其他的逗号和空格同样。
        第三行到最后:制定列名。在这里需要制定每一列的列名,数据类型。数据类型包括:
          microsoft jet数据类型:bit,byte,short,long,currency,single,double,datetime,text,momo。
          ODBC数据类型:char,float,int,longchar,date.
        后面还应该有:指定字符集:使用ansi或者oem
        特别数据类型转换。后面两个如果没有特殊情况的话,可以不写,才用默认的即可。
      

  6.   


    用LOG 按乌龟大侠的恢复
      

  7.   

    把表结构改一下下载信息费 decimal(40,0)
      

  8.   

    还是不行,decimal类型的数据格式最大只能到38 不能改40
      

  9.   

    select * 
    from opendatasource('MICROSOFT.JET.OLEDB.4.0','Text;HDR=Yes;DATABASE=d:\')...[游戏频道日下载消费清单#log]
      

  10.   


    同样的数据清单,其他同事使用oracle 在字段终止符跟行终止符方面跟我设置是一样的,他们能顺利导入,我用sql server就不行了
      

  11.   

    如何使用这个ini文件?