OCA读书笔记(17) - 移动数据
Sql*load
1. sql*loader的文件有哪些?
日志文件:概述了作业的成功与失败以及所有相关错误的细节
错误文件(bad file):从输入文件中抽取的行可能会被sqlldr丢弃(原因可能是这些行与控制文件所期望的格式不一致),也可能会被数据库丢失(例如,插入操作可能违反某个完整性约束),在上述两种情况下,这些记录都会被写入错误文件(bad file)
废弃文件(reject file):如果成功的从输入文件中抽取记录,但是由于不匹配某些记录选择标准而被丢弃,那么这些记录会被写入废弃文件(reject file)
控制文件:一个文本文件,是sqlldr如何解释输入文件的内容以及如何利用从输入文件中抽取的记录
实验:将文件中的数据通过sql*loader加载到表中
create table t as select * from emp where 1=2;
将emp的数据输出到操作系统下的一个文件中:
SQL> set trims on
SQL> spool /u01/emp.txt
SQL> desc emp
SQL> select EMPNO||','||
2 ENAME||','||
3 JOB||','||
4 MGR||','||
5 HIREDATE||','||
6 SAL||','||
7 COMM||','||
8 DEPTNO
9 from emp;
EMPNO||','||ENAME||','||JOB||','||MGR||','||HIREDATE||','||SAL||','||COMM||','||
--------------------------------------------------------------------------------
7369,SMITH,CLERK,7902,17-DEC-80,800,,20
SQL> spool off
写控制文件:
vi /u01/load.ctl写入以下内容:
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
append
into table t
fields terminated by ','
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
保存退出
开始加载数据:
sqlldr scott/tiger control=/u01/load.ctl log=/u01/emp.log
选项介绍:
1. trailing nullcols
如果一条记录中的结尾字段不存在任何相关占位列插入null值
控制文件内容如下:
vi /u01/load.ctl
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
fields terminated by ','
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
/u01/emp.txt内容如下:
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,
加载数据:
sqlldr scott/tiger control=load.ctl
SQL> select * from t;
no rows selected
发现没有数据
在控制文件中加入trailing nullcols如:
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
sqlldr scott/tiger control=load.ctl
SQL> select * from t;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
发现数据已经加载到表中,deptno为null
2. 按照数据文件中的日期格式将数据加载到表中:
vi /u01/load.ctl
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
/u01/emp.txt数据如下:
7521,WARD,SALESMAN,7698,2001-01-01 19:14:13,1250,500,30
sqlldr scott/tiger control=/u01/load.ctl
SQL> select * from t;
no rows selected
发现日期的格式为yyyy-mm-dd hh24:mi:ss,数据库默认的日期格式为dd-mm-yy,可以将控制文件更改如下:
vi /u01/load.ctl
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE date "yyyy-mm-dd hh24:mi:ss",
SAL,
COMM,
DEPTNO)
export NLS_LANG=american
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
sqlldr scott/tiger control=/u01/load.ctl
SQL> col empno for 9999
SQL> col deptno for 99
SQL> col mgr for 9999
SQL> col ENAME for a5
SQL> select * from t;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ----- --------- ----- ------------------- ---------- ---------- ------
7521 WARD SALESMAN 7698 2001-01-01:19:14:13 1250 500 30
3. 使用函数,对数据文件中的数据进行加工
vi /u01/load.ctl
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME,
JOB "substr(:job,1,3)",
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
/u01/emp.txt的内容如下:
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30
sqlldr scott/tiger control=/u01/load.ctl
SQL> select * from t;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
7521 WARD SAL 7698 22-FEB-81 1250 500 30
4. 跳过数据列
vi /u01/load.ctl
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME filler,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
/u01/emp.txt的内容如下:
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30
sqlldr scott/tiger control=/u01/load.ctl
SQL> select * from t;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
7521 SALESMAN 7698 22-FEB-81 1250 500 30
5. 选择数据
vi /u01/load.ctl
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
when deptno='30'
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME filler,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
/u01/emp.txt内容如下:
7369,SMITH,CLERK,7902,17-DEC-80,800,,20
7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30
sqlldr scott/tiger control=/u01/load.ctl
select * from t;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 SALESMAN 7698 20-FEB-81 1600 300 30
7521 SALESMAN 7698 22-FEB-81 1250 500 30
6. 输入空值
vi /u01/load.ctl
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
replace
into table t
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM nullif deptno='30',
DEPTNO)
/u01/emp.txt内容如下:
7369,SMITH,CLERK,7902,17-DEC-80,800,,20
7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30
sqlldr scott/tiger control=/u01/load.ctl
SQL> select * from t;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 30
7. 直接加载数据
从表的高水位线后面直接加载数据
常规加载方法:
SQL> create table t as select * from emp where 1=2;
Table created.
控制文件如下:
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
insert
into table t
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
数据文件内容如下:
7369,SMITH,CLERK,7902,17-DEC-80,800,,20
7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30
7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30
开始常规加载:
sqlldr scott/tiger control=/u01/load.ctl log=/u01/emp.log
1* select * from t
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
SQL> select EXTENT_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME='T';
EXTENT_ID BLOCK_ID BLOCKS
---------- ---------- ----------
0 385 8
analyze table scott.t compute statistics;
SQL> select NUM_ROWS,BLOCKS,EMPTY_BLOCKS from dba_tables where TABLE_NAME='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
14 5 3
SQL> delete scott.t;
14 rows deleted.
SQL> commit;
Commit complete.
SQL> analyze table scott.t compute statistics;
Table analyzed.
SQL> select NUM_ROWS,BLOCKS,EMPTY_BLOCKS from dba_tables where TABLE_NAME='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
0 5 3
使用直接路径加载:
SQL> delete t;
14 rows deleted.
SQL> commit;
Commit complete.
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select NUM_ROWS,BLOCKS,EMPTY_BLOCKS from user_tables where TABLE_NAME='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
0 5 3
sqlldr scott/tiger control=/u01/load.ctl direct=y log=/u01/emp.log
SQL> analyze table scott.t compute statistics;
Table analyzed.
SQL> select NUM_ROWS,BLOCKS,EMPTY_BLOCKS from dba_tables where TABLE_NAME='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
14 9 7
SQL> select EXTENT_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME='T';
EXTENT_ID BLOCK_ID BLOCKS
---------- ---------- ----------
0 385 8
1 393 8
数据库目录
创建目录对象:
conn scott/tiger
create directory dump_dir as '/u01/dir';
SQL> conn /as sysdba
SQL> create directory dump_dir as '/u01/dir';
SQL> grant read,write on directory dump_dir to scott;
SQL> grant all on directory dump_dir to scott;
select * from all_directories;---------owner仍然是sys
数据泵
1. 导出导入表
创建数据泵目录:
SQL> conn /as sysdba
SQL> create directory dump_dir as '/u01/dir';
SQL> grant read,write on directory dump_dir to scott;
SQL> grant all on directory dump_dir to scott;
导出emp,dept表:
[oracle@nylg ~]$ expdp scott/tiger directory=dump_dir dumpfile=exp%U.dmp tables=emp,dept job_name=exp
[oracle@nylg ~]$ cd /u01/dir
[oracle@nylg dir]$ ls
exp01.dmp export.log
[oracle@nylg dir]$ vi exp01.dmp
[oracle@nylg dir]$ vi export.log
[oracle@nylg dir]$ sqlplus scott/tiger
SQL> drop table emp purge;
SQL> drop table dept purge;
SQL> exit
[oracle@nylg dir]$ impdp scott/tiger directory=dump_dir dumpfile=exp01.dmp tables=emp,dept job_name=imp
[oracle@nylg dir]$ sqlplus scott/tiger
SQL> select * from tab;
SQL> select count(*) from dept;
SQL> select count(*) from emp;
查看约束是否存在:
SQL> select CONSTRAINT_NAME from user_constraints where TABLE_NAME='EMP';
select CONSTRAINT_NAME from user_constraints where TABLE_NAME='DEPT'
2. 导出导入用户
导出scott和hr:
[oracle@nylg ~]$ expdp system/a directory=dump_dir dumpfile=schema%U.dmp schemas=scott,hr job_name=schema
删除scott:
SQL> drop user scott cascade;
再将scott导入:
[oracle@nylg dir]$ impdp system/a directory=dump_dir dumpfile=schema01.dmp schemas=scott job_name=schema
[oracle@nylg dir]$ sqlplus scott/tiger
SQL> select * from tab;
将scott改名为s导入到数据库:
[oracle@nylg dir]$ impdp system/a directory=dump_dir dumpfile=schema01.dmp remap_schema=scott:s schemas=scott job_name=schema
[oracle@nylg dir]$ sqlplus / as sysdba
SQL> alter user s identified by s;
SQL> conn s/s
SQL> select * from tab;
3. 导出全库:
导出全库:
expdp system/a directory=dump_dir dumpfile=full%U.dmp full=y job_name=full parallel=4
4. 数据泵的高级用法
(1)通过指定filesize参数,从而控制导出文件的大小
expdp system/a full=y job_name=full parallel=4 dumpfile=dump_dir:full1%U.dmp,test_dir:full2%U.dmp filesize=20M
表示在两个目录下循环生成多个20M的文件
(2) 过滤某些表
vi /u01/exp.par
exclude=table:"like 'EMPLOYEES%'"
schemas=hr
保存退出
先看一下hr中的表:
[oracle@nylg dir]$ sqlplus hr/hr
SQL> select * from tab;
使用参数文件/u01/exp.par导出hr用户,排除EMPLOYEES表:
expdp system/a directory=dump_dir dumpfile=tab%U.dmp job_name=exp parfile=/u01/exp.par
从以上的日志中可以看出EMPLOYEES没有导出
[oracle@nylg dir]$ impdp system/a directory=dump_dir dumpfile=tab01.dmp remap_schema=hr:test job_name=imp
[oracle@nylg dir]$ sqlplus / as sysdba
SQL> alter user test identified by oracle;
SQL> conn test/oracle
SQL> select * from tab;
通过将导出hr用户数据导入到数据库用户test中可以看出没有EMPLOYEES表
可以使用in进行排除表:
vi /u01/exp.par
exclude=table:"in('EMPLOYEES','DEPARTMENTS')"
schemas=hr
[oracle@nylg dir]$ expdp system/a directory=dump_dir dumpfile=tab%U.dmp job_name=exp parfile=/u01/exp.par
从以上的日志中可以看出EMPLOYEES和DEPARTMENTS都没有导出
(3)只导出指定类型的对象(比如只导出存储过程等)
使用此选项必须使用参数文件:
vi /u01/exp.par
include=function
include=procedure
include=package
include=view:"like 'PRODUCT%'"
schemas=hr,oe
expdp system/a directory=dump_dir dumpfile=tab%U.dmp job_name=exp parfile=/u01/exp.par
从以上日志中可以看出没有表
(4)只导出数据不导表定义:
通过content控制导出那些数据
metadata_only:只导出对象的定义信息
data_only:只导出表里实际的数据
all:导出对象的定义信息以及实际的数据,这是默认的导出方式。
例如:只导出hr下的对象定义信息:
expdp system/a directory=dump_dir dumpfile=schema%U.dmp schemas=hr content=metadata_only
[oracle@nylg dir]$ impdp system/a directory=dump_dir dumpfile=schema01.dmp remap_schema=hr:test
[oracle@nylg dir]$ sqlplus / as sysdba
SQL> alter user test identified by a;
SQL> conn test/a
SQL> select * from tab;
SQL> select count(*) from EMPLOYEES;
发现没有数据
SQL> conn hr/hr
SQL> select count(*) from EMPLOYEES
(5)只导出符合条件的数据行
必须用参数文件来完成
vi /u01/exp.par
tables=employees
query=employees:"where department_id=40 order by employee_id"
执行导出:
expdp hr/hr directory=dump_dir dumpfile=emp%U.dmp parfile=/u01/exp.par
将employees表导入到scott中进行验证:
impdp system/a directory=dump_dir dumpfile=emp01.dmp remap_schema=hr:scott
sqlplus scott/tiger
select * from employees;
只有40号部门的数据
conn hr/hr
select * from employees;
原表中有107行
(6)对数据库中的数据采样后,导出采样后的数据,可以用作测试数据:
expdp hr/hr directory=dump_dir dumpfile=schema%U.dmp schemas=hr sample=30
[oracle@nylg dir]$ impdp system/a directory=dump_dir dumpfile=schema01.dmp remap_schema=hr:scott
[oracle@nylg dir]$ sqlplus scott/tiger
SQL> select count(*) from employees;
SQL> conn hr/hr
SQL> select count(*) from employees
SQL> select 33/107 from dual;
(7)中断导出任务后,从中断处继续执行导出任务
在使用数据泵导出数据的时候,可以主动的或由于异常而中断任务
实验:
expdp system/a directory=dump_dir dumpfile=full%U.dmp full=y job_name=full
Export> stop_job
Are you sure you wish to stop this job ([yes]/no): yes
主动中断:ctrl+c
重启导出任务:
expdp system/a attach=full
Export> parallel=2
设置完成后,重新启动导出任务
Export> start_job
start_job开始后,在后台运行,可以调到前台来运行:
Export> continue_client
(8)分布式网络导出导入:
实验:将linux下scott用户导入到windows下
把linux下的scott用户导到window下的u1
u1可以不存在
步骤:
1.在window端:
conn system/a
create database link hndx connect to scott identified by tiger using 'orcl';
2.在window端写参数文件:
network_link=hndx
remap_schema = scott:u1
remap_tablespace = users:example
schemas=scott
job_name = cross_network
3.在linux下给scott受权限
grant exp_full_database to scott;
grant imp_full_database to scott;
4.在window端执行导入:
impdp system/a parfile=c:\imp.txt
外部表
1. 外部表的定义:
表在数据库中是以段存在的,而外部表不是以段存在的,外部表作为数据字典中定义的对象存在
数据存储在操作系统文件里,可以像查询其他表一样查询外部表不能对外部表执行DML操作
2. 外部表的类型:
有两种:一种是sql_load,一种是datapump
3. 创建一个sql_loader的外部表:
生成外部表的数据文件:
[oracle@nylg ~]$ sqlplus scott/tiger
SQL> set trims on
SQL> spool /u01/dir/dept.load
SQL> desc dept
SQL> select DEPTNO||','||
DNAME||','||
LOC from dept;
SQL> spool off
SQL> exit
创建外部表:
create table test_ext
(
deptno number(2),
dname varchar2(14),
loc varchar2(13)
)
organization external
(
type oracle_loader
default directory dump_dir
access parameters
(
records delimited by newline
badfile 'test.bad'
discardfile 'test.dis'
logfile 'test.log'
fields terminated by ','
missing field values are null
)
location ('dept.load')
);
访问外部表:
select * from test_ext;
sql_loader外部表可以通过sql*load来生成创建语法:
控制文件的内容如下:
load data
infile '/u01/emp.txt'
badfile '/u01/bad.emp'
discardfile '/u01/discadr.emp'
insert
into table emp
fields terminated by ','
trailing nullcols
(EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
生成外部表的创建语句:
sqlldr userid=scott/tiger control=/u01/load.ctl external_table=generate_only
vi load.log内容如下:
将以上语句的表名,目录名还有文件名改为我们想要的,然后执行此语句,就可以得到我们想要的外部表
4. 创建一个datapump类型的外部表:
生成文件:
SQL> create table test_ext
(
deptno,
dname
)
organization external(
type oracle_datapump
default directory dump_dir
location('load.test')
)
as select deptno,dname from dept;
以上语句执行完后,就生成了一个文件:load.test
进入hr用户创建一个外部表,数据文件使用以上生成的load.test
SQL> conn hr/hr
Connected.
SQL> create table test_ext
(
deptno NUMBER(2),
dname VARCHAR2(14)
)
organization external(
type oracle_datapump
default directory dump_dir
location('load.test')
)
SQL> select * from test_ext;
OCA读书笔记(17) - 移动数据的更多相关文章
- OCA读书笔记(9) - 管理数据同步
9.Managing Data Concurrency 描述锁机制以及oracle如何管理数据一致性监控和解决锁冲突 管理数据的并发--管理锁数据的不一致:脏读更改丢失幻影读 脏读:数据是指事务T2修 ...
- 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
(十)保护模式下的栈 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 mov cx,00000000000_11_000B ;加载堆栈段选择子 mov ss,cx mov esp,0x7c00 ...
- OCA读书笔记(10) - 管理UNDO数据
Undo自动管理与手动管理 undo段自动管理SQL> show parameter undo_management 将undo段改为手工管理SQL> alter system set u ...
- 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)
http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...
- OCA读书笔记(12) - 数据库维护
查询优化器统计信息 搜集统计信息: 不是实时的: SQL> conn /as sysdbaConnected.SQL> grant select on dba_objects to sco ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- OCA读书笔记(2) - 安装Oracle软件
Objectives: •Describe your role as a database administrator (DBA) and explain typical tasks and tool ...
- OCA读书笔记(1) - 浏览Oracle数据库架构
Objectives: List the major architectural components of Oracle DatabaseExplain the memory structuresD ...
- OCA读书笔记(5) - 管理ASM实例
Objectives:Describe the benefits of using ASMManage the ASM instanceCreate and drop ASM disk groupsE ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之1036递归求值
题目 解决代码及点评 /* 36.已知有如下递推公式 求该数列的前n项.不允许使用数组. */ float fp50036(int n,float x,float ...
- VC动态轨迹画线
分类: 2.4 线程/图形学2010-04-30 22:14 1878人阅读 评论(0) 收藏 举报 文档null 这是一个绘制直线的简单绘图程序,能过实现动态轨迹画线,在拖动时产生临时线来表示可能画 ...
- PHP高级编程SPL
这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去非常复杂,可是非常实用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 因为这是供自己參考的笔记,不 ...
- EasyUI - Slider组件
效果: html代码: <input id="box" /> JS代码: $(function () { $('#box').slider({ width: ,//设置 ...
- Java Thread 那些事
这篇文章被压在草稿箱许久,最近公司内部的技术社区有同学贴出了几篇分享 Java线程的文章,发觉有很多概念没有讲清楚,所以花点时间继续撰写,便有了这篇博文. 本文只聚焦 JVM 层面的线程模型,不考虑和 ...
- SQL Server使用问题总结
1.datetime,smalldatetime,date的区别 1)datetime 从1753年1月1日到9999年12月31日的日期和时间数据,精确度为百分之三秒(等于 3.33毫秒或0.0 ...
- javascript 回调函数应用
回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考. 回调函数原理: 我现在出发,到了通知你”这是一个异步 ...
- boost::asio设置同步连接超时
boost::asio设置同步连接超时 CSDN上求助无果,只好用自创的非主流方法了.asio自带的例子里是用deadline_timer的async_wait方法来实现超时的,这种方法需要单独写 ...
- 用asio的定时器实现带超时的connect,备忘
// test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <boost/asio.hpp> #inclu ...
- An example usage of an encryption algorithm (AES, in this case) is:
pycrypto 2.6.1 : Python Package Index An example usage of an encryption algorithm (AES, in this case ...