拷贝

Oracle数据库的备份与恢复

随声附和 提交于 2020-03-23 12:04:21
Oracle数据库的备份与恢复 当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误操作等),数据库有时也可能遭到破坏,这时如何尽快恢复数据就成为当务之急。如果平时对数据库做了备份,那么此时恢复数据就显得很容易。由此可见,做好数据库的备份是多么的重要,下面笔者就以ORACLE7为例,来讲述一下数据库的备份和恢复。ORACLE 数据库有三种标准的备份方法,它们分别为导出/导入(EXPORT/IMPORT)、冷备份、热备份。导出备份是一种逻辑备份,冷备份和热备份是物理备份。 ---- 一、 导出/导入(Export/Import) ---- 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回Oracle数据库中去。 ---- 1. 简单导出数据(Export)和导入数据(Import) ---- Oracle支持三种类型的输出: ---- (1)表方式(T方式),将指定表的数据导出。 ---- (2)用户方式(U方式),将指定用户的所有对象及数据导出。 ---- (3)全库方式(Full方式),将数据库中的所有对象导出。 ---- 数据导出(Import)的过程是数据导入(Export)的逆过程,它们的数据流向不同。 ---- 2. 增量导出/导入 ---- 增量导出是一种常用的数据备份方法

尚学堂 hadoop

╄→尐↘猪︶ㄣ 提交于 2020-03-23 02:48:51
mr spark storm 都是分布式计算框架,他们之间不是谁替换谁的问题,是谁适合做什么的问题。 mr特点,移动计算,而不移动数据。 把我们的计算程序下发到不同的机器上面运行,但是不移动数据。 每一个split 是由一个map线程,还是map进程进行处理? 肯定的是,他们之间是并发的。 mr的shuffle阶段,是比较难于理解的,不太便于我们去控制他,我们只能通过程序,控制其中的一部分。shuffle阶段,大多数都是有MR框架自动完成的。 溢写到磁盘中:map执行完成,结果肯定是放在内存中的。 所以达到一定数量之后,就需要溢写到磁盘中。在这之前,需要进行分区(partition)和把当前这个map的输出数据进行排序(sotred) 所以说,写到磁盘中的数据已经分好区了,并且已经排好序了。这都是在map任务所在节点的本地执行的。 其中partition暂时没有体现出作用。而是在fetch的过程中提现出来的。是按照什么 进行分区的呢?是看partition是怎么写的。partition可以由程序员自己写。按照程序员自己的规则实现。也可以不写,有默认的分区规则。默认分区规则是hash模运算(1,获取hash值 ,是一个int。2,把这个int值对reduce的个数取模),默认的partition是有可能产生数据倾斜的。比如有两个reduce,没所有map产生的所有结果取模的时候

select、poll、epoll之间的区别总结[整理]

冷暖自知 提交于 2020-03-22 23:42:20
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。关于这三种IO多路复用的用法,前面三篇总结写的很清楚,并用服务器回射echo程序进行了测试。连接如下所示: select: http://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html poll: http://www.cnblogs.com/Anker/archive/2013/08/15/3261006.html epoll: http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html   今天对这三种IO多路复用进行对比,参考网上和书上面的资料,整理如下: 1、select实现 select的调用过程如下所示: (1)使用copy_from_user从用户空间拷贝fd_set到内核空间 (2)注册回调函数__pollwait (3)遍历所有fd

Linux五大网络IO模型

爷,独闯天下 提交于 2020-03-22 18:25:08
对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。 用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理 。 1、阻塞io(同步io):   发起请求就一直等待,直到数据返回。好比你去商场试衣间,里面有人,那你就一直在门外等着。(全程阻塞)    2、非阻塞io(同步io):    不管有没有数据都返回,没有就隔一段时间再来请求,如此循环。好比你要喝水,水还没烧开,你就隔段时间去看一下饮水机,直到水烧开为止。 (复制数据时阻塞)      当用户进程发出read操作时,如果kernel(内核空间)中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。用户进程判断结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作。一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存( 此时占用CPU阻塞 ),然后返回。 3、 多路复用 io(同步io):     I/O是指网络I/O, 多路指多个TCP连接(即socket或者channel),复用指复用一个或几个线程

浅谈浅拷贝与深拷贝

放肆的年华 提交于 2020-03-21 15:57:08
浅拷贝 定义:直接将一个引用数据类型的地址,赋值给另一个变量存储,两个变量存储的是相同的内存地址,在一个变量操作数据,另一个变量中的数据也会改变 案例: 总结: a给b赋值时是给的内存地址,两个变量中的数据改变随意一个变量的数据,另外一个变量中的数据也跟着改变,这种操作就被称为浅拷贝 深拷贝 定义:通过循环遍历获取引用数据类型中存储的每一个数据信息,并赋值到新的变量中 ,赋值之后两个变量没有任何关系并且修改变量中的数据不会相互之间影响 案例: 总结: 通过结果对比发现,变量arr4的数据没有改变,不管arr3或者arr4怎么改变数据内容,它们相互之间不会受影响,这种操作就成为深拷贝 By--逆战班--WanG 来源: https://www.cnblogs.com/WAnG-C/p/12539451.html

深浅拷贝

眉间皱痕 提交于 2020-03-21 11:35:48
浅拷贝: 只拷贝第一层元素 计算机在找值得过程深拷贝 不可变数据类型共用一个内容,可变数据类型重新开辟空间存放内容import copy模块 浅拷贝 import copy li = [1,2,3,4] lst = li.copy() print(li) print(lst) print(id(li)) # 34512776 print(id(lst)) # 34512840 li[0] = 56 print(li) # 变 print(lst) # 不变 print(id(li[0])) # 1548382960print(id(lst[0])) # 1548381200print(id(li[1])) # 1548381232print(id(lst[1])) # 1548381232 深拷贝 import copy li = [1,2,3,4,[5,6,7]] lst = copy.deepcopy(li) # 深拷贝 # 浅拷贝只拷贝第一层元素,元素是不可变的,就不会变 元素是可变的俩个同时变 print(li) print(lst) print(id(li)) # 40289984 print(id(lst)) # 40305368 li[-1].append(90) print(li) # 变 print(lst) # 不变 # print(id(li[-1]))

几个方便编程的C++特性

二次信任 提交于 2020-03-20 11:52:04
前言: C++11的自动化特性给编程提供了不少方便,同时也给调试增加了很多负担,至于取舍看程序员的风格和侧重而定。 auto:自动类型推断   在C++11之前,auto关键字用来指定 存储 期。在新标准中,它的 功能变为类型推 断。auto现在成了一个类型的占位符,通知编译器去根据初始化 代码推断所声明变量的真实类型。各种作用域内声明变量 都可以 用到它。例如,名空间中,程序块中,或是for循环的初始化语句中。   auto i = 42; // i is an int auto l = 42LL; // l is an long long auto p = new foo(); // p is a foo*   使用auto通常意味着更短的代码(除非你 所用 类型是int,它会比auto少一个字母)。试想一下当你遍历STL容器时需要声明的那些迭代器(iterator)。现在不需要去声明那些typedef就可以得到简洁的代码了。   std::map> map; for(auto it = begin(map); it != end(map); ++it) { }   需要注意的是,auto不能用来声明函数的返回值。但如果函数有一个尾随的返回类型时,auto是可以出现在函数声明中返回值位置。这种情况下,auto 并不是告诉编译器去推断返回类型

深入set和dict

送分小仙女□ 提交于 2020-03-20 05:11:08
一. 浅拷贝和深拷贝 浅拷贝:就是创建一个具有相同类型,相同值但不同id的新对象。 浅拷贝产生的新对象中可变对象的值在发生改变时,会对原对象的值也做出改变,因为这些值是同一个引用。 a = [1, 2] b = [3, 4, a] c = b.copy() a[0] = 0 print(b) print(c) 输出 [3, 4, [0, 2]] [3, 4, [0, 2]] 深拷贝:不仅仅拷贝了原始对象自身,也对其包含的值进行拷贝,它会递归的查找对象中包含的其他对象的引用,来完成更深层次拷贝。 深拷贝产生的副本可以随意修改而不需要担心会引起原始值的改变 import copy a = [1, 2] b = [3, 4, a] c = copy.deepcopy(b) a[0] = 0 print(b) print(c) 输出结果 [3, 4, [0, 2]] [3, 4, [1, 2]] 二. dict的常用方法 1. fromkeys把可迭代的对象转变为dict 基本语法:dict.fromkeys(可迭代对象作为keys,默认值作为value) new_list = ["name1", "name2"] new_dict = dict.fromkeys(new_list, 34) print(new_dict) 输出如下 {'name1': 34, 'name2': 34} 2

JS中的栈和堆

回眸只為那壹抹淺笑 提交于 2020-03-20 01:06:22
一.栈和堆 栈(stack) :栈会自动分配内存空间,会自动释放,存放 基本类型 ,简单的数据段,占据固定大小的空间。 基本类型 :String,Number,Boolean,Null,Undefined 堆(heap) :动态分配的内存,大小不定也不会自动释放,存放 引用类型 ,指那些可能由多个值构成的对象,保存在堆内存中,包含引用类型的变量,实际上保存的不是变量本身,而是指向该对象的指针。 引用类型 :Function,Array,Object 二.区别 栈 :所有在方法中定义的变量都是放在栈内存中,随着方法的执行结束,这个方法的内存栈也自然销毁。 优点:存取速度比堆快,仅次于直接位于CPU中的寄存器,数据可以共享; 缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 堆 :堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(参数传递)。创建对象是为了反复利用,这个对象将被保存到运行时数据区。 三.栈和堆的溢出 栈 :可以递归调用方法,这样随着栈深度的增加,JVM维持着一条长长的方法调用轨迹,知道内存不够分配,产生栈溢出。 堆 :循环创建对象,通俗点就是不断的new 一个对象。 下面来看看传值和传址的区别 其实这两者区别就是基本类型和引用类型的区别,话不多说看栗子 var a = [1,0,9,8,7]; var b = a;

python-深浅拷贝

微笑、不失礼 提交于 2020-03-19 17:22:25
a=[1,2,3,4,5] b=a 针对复杂数据类型(字符串和数字除外):a和b指向同一块内存空间,其中任一个发生改变,另外一个也会改变 浅拷贝只拷贝一层: husband = ['xiaohua',123,[10000,6000]] wife = husband.copy() wife[0] = 'xiaopang' wife[1] = 345 husband[2][1] -= 1500 print(wife) 深拷贝:克隆一份 import copy husband = ['xiaohua',123,[10000,6000]] wife = copy.copy(husband) #浅拷贝 xiaosan = copy.deepcopy(husband) xiaosan[0] = 'jinxin' xiaosan[1] = 666 xiaosan[2][1] -= 1000 husband[2][1] -= 1500 print(wife) print(xiaosan) 来源: https://www.cnblogs.com/benchdog/p/9053437.html