10月的一些知识点

Oracle导入导出文本数据

 

表结构

-- Create table
create table STUDENT
(
  SNO  NUMBER,
  NAME VARCHAR2(12)
)

 

1. spool导出数据的使用

使用spool命令导出数据

--sp.sql

 

set echo off

set trimspool on

set linesize 900

set pagesize 200

set heading off

set feedback off

set term off

spool data.txt

 

select sno||','||name from student ;

 

spool off

/

 

E:/test>sqlplus sun/sun

 

SQL> @sp

 

--data.txt

1,李雷

 

2. sqlldr导入数据的使用

in.txt 中的数据导入到表student中

Load.ctl

 

LOAD DATA

INFILE 'in.txt'

append INTO TABLE student

 

FIELDS TERMINATED BY ','

TRAILING NULLCOLS

(

name,

FILLER_1 FILLER, -- 过滤

sno

--  EFF_DATE   date  "yyyy-mm-dd hh24:mi:ss"    日期格式

)

 

select * from student

SNO       NAME

1                            李雷

 

 

在命令行中执行

E:/test>sqlldr sun/sun control=load.ctl

 

SQL*Loader: Release 11.1.0.6.0 - Production on 星期三 5 12 15:24:42 2010

 

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

 

达到提交点 - 逻辑记录计数 1

达到提交点 - 逻辑记录计数 2

 

E:/test>

 

in.txt

韩美美,hmm,2

Mary,mm,3

 

select * from student;

SNO       NAME

1     李雷

2     韩美美

3     Mary

 

实现了数据的插入,以及字段的过滤,字段的对应顺序

 

----------

安装数据库 dbname test
安装有问题
新建数据库,sqlnet.ora中注释#SQLNET.AUTHENTICATION_SERVICES= (NTS)

tnsping test
发现是环境变量path有问题,修改

oci程序,添加include,添加lib

#if defined(WIN32)
#pragma comment(lib,"oci.lib")
#endif

8-30


------
9-1

头文件问题

text * sql = (text*)"insert into part_nos values(:description,:partno)";
obndra

ORA-01484: 数组仅可以与 PL/SQL 语句关联
processing oci function OEXEC, OEXN

-------
9-3
封装

初步实现绑定数据批量插数据到数据库

---
9-7

由于是常驻进程,注意检查数据库的连接状态,在连接断开时,可以再次连接

----
9-8
进行查询的时候,整型若为NULL,取其值则为0

-----
9-16

INSTALL_PATH = /home/gmdb/database/gmdb

使用GMDB,在makefile中调用提供的库就可以了,注意看其用法
利用客户端查看结果

可以创建索引,对索引的功效进行测试验证

9-19

GMDB的一些问题

delete的时候不需要显式的commit就可以提交,update的时候需要

直接在客户端进行rollback commit 无效
可能是设置了自动提交,把自动提交关闭

一个连接中insert可以多次执行,select就不行,报错
stmt关联conn的时候,超过一定的数量后报错
发现原因时没有释放   DB_SqlStmtFree(&stmt);
------
之前的oci程序 批量插入数据没有问题
insert into test9 nologging (ID)  values(1);
写错了
写成了 insert into test9 (ID) nologging  values(1);
sql报错

-------
9-28

看oci8里的函数,在select的时候取字段值有问题
发现是类型参数设置的问题

    char c[] = {0,0,0,1};
    cout << *((int*)c) << endl;

    char str[8] = {0};
    *((int*)str) = 1;// 01 00 00 00
    cout << *((int*)str) << endl;
   
    cout << sizeof(str) << endl;

    char* v[2];
    v[0] = new char[8];
    cout << sizeof(v[0]) << endl;//4

9-29
一个需求,从GMDB中导出数据到文件中,再导入到Oracle
如果直接在内存中进行对接实现数据传输,不IO到文件中,处理速度会快些,但是出错后再次处理会比较麻烦

---
9-30
分别实现了数据导出,数据导入功能

文件不能有空行
oci@ATAE1:~/tdb/test>
oci@ATAE1:~/tora/bin>

问题:读配置 写日志 整合  性能测试 安全性测试

--
10-8
读文件到变量中
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>

int main()
{
    char filename[] = "c.txt";
    char str[32] = {0};
    int a, b;

    ifstream infile(filename);
    infile >> str;
    infile >> a;
    infile >> b;
    cout << str << " " << a << " " << b << endl;

    return 0;
}

--
10-9
修改程序,使可以插入空字段

#include <stdlib>
system("ls");
调用系统命令

---
10-11
在程序中调用
system("ls");

程序将顺序执行,system("ls");命令执行好了后再继续往下

mv c dat.txt
会覆盖之前的文件,如果存在的话

200机器不能通过ftp访问,但可以使用ftp访问其他的机器,可以这样mput上传文件作中转

----
程序参数
#include <iostream.h>

int main(int argc, char** argv)
{
    cout << argc << endl;
    cout << argv[0] << " " << argv[1] << endl;
   
    return 0;
}

oci@ATAE1:~/tdb/test> ./targc 11 22
3
./targc 11
oci@ATAE1:~/tdb/test>


-------
10-12

导入数据到表时,为了保证导入数据的可靠性,需要使用一个配置文件进行标识

--
GMDB客户端程序测试,把include lib so 文件加入 ,还要加入so路径到环境变量中

xby@BI01:~/sunyu/src/gmdb> cat env
export

LD_LIBRARY_PATH=/opt/mqm/lib64:/home/xby/lib:/opt/ODBC/lib::/home/oracle/oracle/app/oracle/product/11.1.0/db_1/lib:/

home/xby/sunyu/src/database/gmdb/lib::/home/xby/sunyu/src/database/gmdb/so

执行
. ./env

---
10-13

启动机器上的ftp服务
1。查看是否安装了vsFTPd软件
  [root@linuxsir001   root]#   rpm   -qa   |   grep   vsftpd
  如果没有任何显示,说明没有把vsFTPd安装上,如果出现的是下面的这样的提示,就证明已经安装上了。
  
  [root@linuxsir001   root]#   rpm   -qa   |   grep   vsftpd
  vsftpd-1.1.3-8
  
  我以Redhat   9.0,以其自带的vsFTPd包vsftpd-1.1.3-8版本来为本帖约定。
  
  [root@linuxsir001   root]#   rpm   -ivh   vsftpd*.rpm  
  
  2。打开vsFTPd服务器。
  
  [root@linuxsir001   root]#   ntsysv
  
  把vsftpd服务器打开,也就是在运行
上网机(上网机) 10:26:01
   ntsysv命令后,把vsftpd服务选中。
  
  

  •    vsftpd  
      
      3。运行/etc/init.d/vsftpd   start
      
      [root@linuxsir001   root]#   /etc/init.d/vsftpd   start
      为   vsftpd   启动   vsftpd:   [   确定   ]
      [root@linuxsir001   root]#

    再编译程序,执行,就可以了


    1.修改/etc/vsftpd.conf将里面的write_enable=yes,anonymous_enable=yes,local_login=yes.

      2./etc/inetd.conf将里面关于ftp的两行的注释去掉。

      3.将/etc/ftpusers中不能出现将来要登录的帐户名。


    service vsftpd start

    ---------
    10-14

    oracle@bi0001:~> cd
    oracle@bi0001:~> vi .bash_profile

    LANG=c#

    ORACLE_HOME=/oracle/app/oracle/product/11.1.0/db_1; export ORACLE_HOME
    ORACLE_SID=orcl; export ORACLE_SID
    NLS_LANG=american_america.ZHS16GBK; export NLS_LANG
    ORA_NLS33=$ORACLE_HOME/nls/data; export ORA_NLS33
    LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
    PATH=$PATH:/bin:/usr/bin:/etc
    PATH=$PATH:$ORACLE_HOME/bin
    export PATH
                         
    oracle@bi0001:~> pwd
    /opt/oracle

    --
    添加到root用户的/etc/profile 文件中
    bi0001:/etc # ls

    bi0001:/etc # vi profile
    bi0001:/etc # source profile

    ---
    查看数据库
    show parameter DB_NAME


    ---
    打包
     tar -cvf tto.tar tora
    解包
    tar -xvf tto.tar



    LD_LIBRARY_PATH=/oracle/app/oracle/product/11.1.0/db_1/lib
    LD_LIBRARY_PATH是系统设定的路径变量

    ----
    10-15

    指令名称 : chown
      使用权限 : root
      使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...
      说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown
      可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)
      所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己
      的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

    chown -R 递归改变
    ----
    10-18
    ps -fau uname
    显示用户uname下的进程信息

    应该是 ps -fu uname

    在root用户下 sqlplus /  as sysdba
    没有权限
    ORA-01031: insufficient privileges

    在oracle用户下可以

    --
    关闭数据库
    SQL>shutdown immediate;
    启动
    SQL>startup

    ---
    10-19
    新创建的用户必须要这样赋权才可以连接使用
    SQL> grant connect,resource to test;

    Grant succeeded.

    ---
    export LD_LIBRARY_PATH=/usr/local/lib:/oracle/app/oracle/product/11.1.0/db_1/lib

    在数据导出大整数,小数,出现问题时,可以考虑使用to_char 转换成字符串来处理
    应该直接使用col->value->data,不作下面的转换
     sprintf(pucStr, "%f", *(double *)col->value->data);
    ----
    导入数据时
    01:02:51.22
    01:02:57.106
    6秒导入16万条数据,没有索引的情况下

    ---
    10-20
    修改程序
    //2010-10-20
        case DB_SQL_T_DECIMAL:
            sprintf(pucStr, "%s", col->value->data);
            break;

        case DB_SQL_T_DOUBLE:
            //测试时注意小数是否可以正确输出
            sprintf(pucStr, "%f", *(double *)col->value->data);
            break;

    --
    10-21
    在gdb调试程序时,set args 来设置程序输入参数



            sprintf(str, "%sde", str);
        cout << "abc%s = " << str<< endl;


    对其自身进行复制,很危险
        sprintf(str, "abc%sde", str);
        cout << "abc%s = " << str << endl;

    ------
    字段对应表添加字段 字段程度 字段序号


    ---
    10-25

    oracle clob类型的使用
    在insert语句里字符串的长度有限制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值