informix数据库备份方式有哪些

informix数据库备份方式有哪些,第1张

在大型的项目开发中,一个项目组通常会在小型的模拟环境中进行初步开发,待系统初步稳定后,再把开发环境移到新系统中,最后才把旧系统切换到新系统中去。但在模拟环境中,一般数据库服务器的配置都较低,而且不会有专门的数据备份措施,一旦掉电或误 *** 作,便容易出现数据丢失、数据库毁坏的情况,开发人员的一番心血便会白费。因此,需要一种简单而又有效的数据备份方法。

我们假设模拟环境的数据库服务器的 *** 作系统是Rerhat Linux 7,数据库服务器为Informix Online Dynamic Server 70,需要备份的数据库名称为dbtemp。在开发过程中,我们要求能对数据库表结构和其中的数据每天都能定时进行自动备份。因此我们需要使用crontab进行工作日程安排,crontab是 *** 作每个用户的守护程序和该执行的时间表。 crontab文件的格式:M H D m d cmd。

M: 分钟(0-59)。

H:小时(0-23)。

D:天(1-31)。

m: 月(1-12)。

d: 一星期内的天(0~6,0为星期天)。

cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量。

root用户使用crontab -e命令编辑crontab文件,在本例中,文件内容如下:

#backup zhdata start;

24 15 su -l -c "dbschema -d dbtemp -ss /opt/informix/data/dbtempsql" informix

25 15 su -l -c "dbaccess dbtemp /opt/informix/data/create_unloadsql" informix

27 15 su -l -c "dbaccess dbtemp /opt/informix/data/unloadsql" informix

#backup zhdata end;

文件中的第一条语句指定每天下午3点24分创建数据库dbtemp模式文件dbtempsql;第二条语句指定每天下午3点25分使用dbaccess执行create_unloadsql 文件,create_unloadsql文件内容如下: UNLOAD TO /opt/Informix/data/unloadsql DELIMITER ';'

SELECT "unload to /opt/informix/data/"||tabname||

"txt delimiter '$' select from "||tabname

FROM systables WHERE tabid > 99

这是一条嵌套式SQL语句,能够把数据库中的除系统表以外的所有表找出来。假设数据库中除了系统表外,还有用户表userinfo1,userinfo2,…,userinfon,那么执行该语句后生成的unloadsql文件内容将为:

unload to /opt/Informix/data/userinfo1txt delimiter '$' select from userinfo1;

unload to /opt/Informix/data/userinfo1txt delimiter '$' select from userinfo2;

…… unload to /opt/Informix/data/userinfo1txt delimiter '$' select from userinfon;

然后第3条语句指定每天下午3点27分使用dbaccess执行unloadsql文件,unload语句完成的是把表中的数据内容倒出成以指定分隔符分隔字段的文本文件;在本例中,unloadsql文件实现导出数据库中出系统表以外的各表数据,生成以'$'符号分隔的文本文件,即把数据库除系统表以外的各表数据都导成以'$'符号分隔的文本文件,存放在/opt/Informix/data目录下面。这样,一个简单的数据备份便完成了

1、android_secure 是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用了。2、Bluetooth 顾名思义,用蓝牙之后就会有这个。3、mobo 顾名思义,Moboplayer的缓存文件。4、QQ 顾名思义,QQ的缓存文件。5、quickoffice 顾名思义,quickoffice的缓存文件。6、switchpro 顾名思义,switchprowidget(多键开关)的缓存文件。7、ucdlres 顾名思义,UC迅雷的缓存文件。8、albumart 音乐专辑封面的缓存文件夹。9、albums 相册缩略图的缓存文件夹。10、Android 比较重要的文件夹,里面是一些程序数据,比如google map的地图缓存。11、backups 一些备份文件,比如联系人导出到SD卡时会导入到此文件夹。12、baidu 顾名思义,掌上百度、百度输入法之类程序的缓存文件夹。13、bugtogo 系统出现问题的时候会形成一些报告文件,存放于此文件夹。14、cmp 个人初步判断是音乐的缓存文件夹。15、data 同样是缓存数据的文件夹,与Android性质类似。16、DCIM 相机的缓存文件夹。17、documents Documents To Go 的相关文件夹。18、etouch 易行的缓存文件夹。19、extracted androzip等解压缩软件默认的解压目录。20、gameloft 顾名思义,gameloft游戏数据包存放的文件夹。21、handcent 顾名思义handcent(超级短信)数据文件夹。22、handyCurrency 货币汇率相关的文件夹,装了handycalc(科学计算器)之后才会有。23、ireader 顾名思义,ireader的缓存文件夹。24、KingReader 顾名思义,开卷有益的缓存文件夹。25、LazyList Applanet(黑市场)的缓存目录,也许和其他程序也有关,暂时不太清楚。26、LOSTDIR 卡上丢失或出错的文件会跑这里,此目录无用,删了会自动生成。27、moji 顾名思义,墨迹天气的缓存目录。28、MusicFolders poweramp产生的缓存文件夹。29、openfeint 顾名思义,openfeint的缓存文件夹。30、Picstore 浏览软件建立的一个目录。31、Playlists 播放列表的缓存文件夹。32、renren 顾名思义,人人网客户端的缓存文件夹。33、screenshot 貌似是截屏保存的目录,不过我不记得自己装过screenshot这个软件。34、ShootMe 顾名思义,shootme截屏后文件保存的目录。35、SmartpixGames Smartpix Games出品游戏的缓存文件夹,比如Jewellust。36、sogou 顾名思义,搜狗拼音的缓存文件夹。37、SpeedSoftware RE文件管理器的缓存文件夹。38、SystemAppBackup SystemApp remove(深度卸载)备份系统文件后,备份文件保存的目录。39、TalkingFriends talking tom(会说话的tom猫)录制的视频文件所保存的目录。40、Tencent 顾名思义,腾讯软件的缓存目录,比如QQ。(与上面的QQ文件夹并不相同)41、TitaniumBackup 顾名思义,钛备份备份的程序所保存的目录。42、TunnyBrowser 感觉是海豚浏览器的缓存目录,但不知道为什么叫这个名字,金q鱼浏览器…43、UCDLFiles UC迅雷下载文件的保存目录。44、UCDownloads UC浏览器下载文件的保存目录。45、VIE Vignette(晕影相机)的缓存目录。46、 顾名思义,数据的缓存目录。47、yd_historys 有道词典搜索历史的缓存目录。48、yd_speech 有道词典单词发音的缓存目录。49、youmicache 删掉后还会自动生成,悠米广告的缓存目录,广告程序内嵌在其他程序中。50、Glu Glu系列游戏的资料包存放地。如3D猎鹿人等。51、apadqq-images QQ for pad 的缓存目录。52、DunDef 地牢守护者的数据包。53、KuwoMusic 顾名思义,酷我音乐的相关文件夹。54、MxBrowser 遨游的缓存目录。55、Camera360 顾名思义,camera360的缓存目录。56、TTPod 顾名思义,天天动听的缓存目录。

电脑管家配备的文件恢复工具类型多种多样,适用于各类场景,比如前面提到的误清空回收站恢复以及误格式化恢复,另外手机卡、U盘也可以能通过腾讯电脑管家恢复,经常会遇到一些损坏的文档,在这里也能够被修复。

本文参考《Mac OS X and iOS Internals: To the Apple’s Core》 by Jonathan Levin

文章内容主要是阅读这本书的读书笔记,建议读者掌握《 *** 作系统》,了解现代 *** 作系统的技术特点,再阅读本文可以事半功倍。

虽然iOS系统内核使用极简的微内核架构,但内容依然十分庞大,所以会分

系统架构 、 进程调度 、 内存管理 和 文件系统 四个部分进行阐述。

*** 作系统管理所有的硬件资源, *** 作系统内核管理最核心的资源CPU和内存。上一篇阐述了Mach通过进程管理CPU,本文主要阐述XNU和Mach如何高效的管理内存

按照传统,栈一般都是保存自动变量,正常情况栈由系统管理,但是在iOS中某些情况下,程序员也可以选择用栈来动态分配内存,方法是使用鲜为人知的alloca( ) 这个函数的原型和malloc( )是一样的,区别在于这个函数返回的指针是栈上的地址而不是堆中的地址。

从实现角度,alloca( )从两方面优于malloc( )

堆是由C语言运行时维护的用户态数据结构,通过堆的使用,程序可以不用直接在页面的层次处理内存分配。Darwin的libC 采用了一个基于分配区域(allocation zone)的特殊分配算法

在iOS中内存的管理是由在Mach层中进行的,BSD只是对Mach接口进行了POSIX封装,方便用户态进程调用。

XNU内存管理的核心机制是虚拟内存管理,在Mach 层中进行的,Mach 控制了分页器,并且向用户态导出了各种 vm_ 和 mach_vm_ 消息接口。 为方便用户态进程使用BSD对Mach 调用进行了封装,通过current_map( ) 获得当前的Mach 内存映射,最后再调用底层的Mach 函数。

BSD 的malloc 系列函数<bsd/sys/malloch> 头文件中。函数名为_MALLOC、_FREE、_REALLOC、_MALLOC_ZONE、_FREE_ZONE

mcache机制是BSD 提供的基于缓存的非常高效的内存分配方法。默认实现基于mach zone,通过mach zone提供预分配好的缓存内存。

mcache具有可扩展架构,可以使用任何后端 slab 分配器。

使用mcache 机制的主要优点是速度:内存分配和维护是在每一个 CPU 自有的cache中进行的,因此可以映射到CPU的物理cache,从而极大地提升访问速度。

Mach VM层支持VM pressure 的机制,这个机制是可用RAM量低到危险程度的处置,下面我们会详细讲,这里不展开。

当RAM量低到危险时,Mach的pageout 守护程序会查询一个进程列表,查询驻留页面数,然后向驻留页面数最高的进程发送NOTE_VM_PRESSURE ,会在进程队列中发出一个事件。被选中的进程会响应这个压力通知,iOS中的运行时会调用 didReceiveMemoryWarning 方法。

然而有些时候这些 *** 作没有效果,当内存压力机制失败之后, 非常时间要用非常手段 , Jetsam机制介入。

当进程不能通过释放内存缓解内存压力时,Jestam机制开始介入。这是iOS 实现的一个低内存清理的处理机制。也称为Memorystatus,这个机制有点类似于Linux的“Out-of-Memory”杀手,最初的目的就是杀掉消耗太多内存的进程。Memorystatus维护了两个列表:

在iOS的用户态可以通过 sysctl(2)查询这些列表,优先级列表可以在用户态进行设置。

在iOS 5中,Jestsam/Memorystatus 和默认的freezer 结合在一起,实现了对进程的冷冻而不是杀死。通过这种方式可以提供更好的用户体验,因为数据不会丢失,而且当内存情况好转时进程可以安全恢复。(感谢@易步指出本段错误)

用户态也可以通过pid_suspend( ) 和 pid_resume( )控制进程的休眠。

iOS 定义了 pid_hibernate,通过发送kern_hibernation_wakeup信号唤醒kernel_hibernation_thread 线程,这个线程专用于对进程冷冻 *** 作。

实际的进程休眠 *** 作是由jestsam_hibernate_top_proc 完成的,这个函数通过task_freeze冷冻底层的任务。

冷冻 *** 作需要遍历任务的vm_map,然后将vm_map 传递给默认的 freezer。

VM是Darwin系统内存管理的核心机制。

VM 机制主要通过内存对象(memory object)和分页器(pager)的形式管理内存。

Mach 虚拟内存的实现非常全面而且通用。这部分由两个层次构成:一层是和硬件相关的部分,另一层构建在这一层之上和硬件无关的公共层。OS X 和 iOS 使用的几乎一样的底层机制,硬件无关层以及之上的BSD 层中的机制都是一样的。

Mach 的 VM子系统可以说是和其要管理的内存一样复杂和充满了各种细节。然后从高层次看,可以看到两个层次:

虚拟内存这一层完全以一种机器无关的方式来管理虚拟内存。这一层通过几种关键的抽象表示虚拟内存:

Mach 允许使用多个分页器。事实上,默认就存在3~4个分页器。Mach 的分页器以外部实体的形式存在:是专业的任务,有点类似于其他系统上的内核交换(kernel-swapping)线程。Mach 的设计允许分页器和内核任务隔离开,设置允许用户态任务作为分页器。类似地,底层的后备存储也可以驻留在磁盘交换文件中(通过OS X 中的 default_pager 处理),可以映射到一个文件(由vnode_pager处理),可以是一个设备(由device_pager 处理)。注意:在Mach 中,每一个分页器处理的都是属于这个分页器的页面的请求,但是这些请求必须通过pageout 守护程序发出。这些守护程序(实际上就是内核线程)维护内核的页面表,并且判定哪些页面需要被清除出去。因此,这些守护程序维护的分页策略和分页器实现的分页 *** 作是分开的。

物理内存的页面处理的是虚拟内存到物理内存的映射,因为虚拟内存中的内容最终总要存储在某个地方。这一层面只有一个抽象,那就是pmap,不过这个抽象非常重要,因为提供了机器无关的接口。这个接口隐藏了底层平台的细节,底层的细节需要在处理器层次进行分页 *** 作,其中要处理的对象包括硬件页表项(page table entry,PTE)、翻译查找表(translation lookaside buffer,TLB)等。

每一个Mach 任务都要自己的虚拟内存空间,任务的struct task 中的 map 字段保存的就是这个虚拟内存空间。

vm_page_entry 中最关键的元素是vm_map_object,这是一个联合体,既可以包含另一个vm_map(作为子映射),也可以包含一个vm_object_t(由于这是一个联合体,所以具体的内容需要用布尔字段is_sub_map 来判断)。vm_object 是一个巨大的数据结构,其中包含了处理底层虚拟内存所需要的所有数据。vm_object的数据结构中的大部分字段都是用位表示的标志。这些字段表示了底层的内存状态(联动、物理连续和持久化等状态)和一些计数器(引用计数、驻留计数和联动计数等)。不过有3个字段需要特别注意:

memq:vm_page 对象的链表,每一项都表示一个驻留内存的虚拟内存页面。尽管一个对象可以表示一个单独的页面,但是多数情况下一个对象可以包含多个页面,所以每一个页面关联到一个对象时都会有一个偏移值

page:memory_object 对象,这是指向分页器的Mach 端口。分页器将未驻留内存的页面关联到后备存储,后备存储可以是内存映射的文件、设备和交换文件,后备存储保存了没有驻留内存的页面。换句话说,分页器(可以有多个)负责将数据从后备存储移入内存以及将数据从内存移出到后备存储。分页器对于虚拟内存子系统来说极为重要

internal:vm_page 中众多标志位之一,如果这个位为真,那么表示这个对象是由内核内部使用的。这个标志位的值决定了对象中的页面会进入哪一个pageout队列

尽管内核和用户空间一样,基本上只在虚拟地址空间内 *** 作,但是虚拟内存最终还是要翻译为物理地址的。机器的RAM 实际上是虚拟内存中开的窗口,允许程序访问虚拟内存是有限的,而且通常是不连续的区域,这些区域的上线就是机器上安装的内存。而虚拟内存中其他部分则要么延迟分配,要么共享,要么被交换到外部存储中,外部存储通常是磁盘。

然而虚拟内存和具体的底层架构相关。尽管虚拟内存和物理内存的概念在所有架构上本周都是一样的,但是具体的实现细节则各有千秋。XNU 构建与Mach 的物理内存抽象层之上,这个的抽象层成为pmap。pmap 从设计上对物理内存提供了一个统一的接口,屏蔽了架构相关的区别。这对于XNU来说非常有用,因为XNU支持的物理内存的架构包括以前的PowerPC,现在主要是Intel,然后在iOS 中还支持ARM。

Mach 的pmap 层逻辑上由一下两个子层构成:

Mach Zone的概念相当于Linux的内存缓存(memory cache)和Windows 的Pool。Zone 是一种内存区域,用于快速分配和是否频繁使用的固定大小的对象。Zone的API是内核内部使用的,在用户态不能访问。Mach中Zone的使用非常广泛。

所有的zone 内存实际上都是在调用zinit( )时预先分配好的(zinit( )通过底层内存分配器kernel_memory_allocate( )分配内存)zalloc( )实际上是对REMOVE_FROM_ZONE 宏的封装,作用是返回zone的空闲列表中的下一个元素(如果zone已满,则调用kernel_memory_allocate( )分配这个zone在定义的alloc_size字节)。zfree( ) 使用的是相反功能的宏 ADD_TO_ZONE。这两个函数都会执行合理数量的参数检查,不过这些检查帮助不大:过去zone分配相关的bug已经导致了数据可以被黑客利用的内存损坏。zalloc( ) 最重要的客户是内核中的kalloc( ),这个函数从kalloc系列zone中分配内存。BSD的mcache机制也会从自己的zone中分配内存。BSD内核zone也是如此,BSD内核zone直接构建与Mach的zone之上。

进程的内存需求早晚会超过可用的RAM,系统必须有一种方法能够将不活动的页面备份起来,并且从RAM中删除,腾出更多的RAM给活动的页面使用,至少暂时能够满足活动页面的需求。在其他 *** 作系统中,这个工作专门是由专门的内核线程完成的。在Mach 中,这些专门的任务称为分页器(pager),分页器可以是内核线程,设置建议是外部的用户态服务程序。

Mach分页器是一个内存管理器,负责将虚拟内存备份到某个特定类型的后备存储中。当内存容量不足,内存页面需要被交换出内存是,后备存储保存内存页面的内容:当换出的内存页面需要被使用时,将内存的页面恢复到RAM中。只有“脏”页面才需要进行上述的换出和换入,因为“脏”页面是在内存中修改过的页面,要从RAM中剔除时必须保存到磁盘中防止数据丢失。

要注意的是,这里提到的分页器仅仅实现了各自负责的内存对象的分页 *** 作,这些分页器不会控制系统的分页策略。分页策略是有vm_pageout 守护线程负责的。

iOS 和 OS X 中XNU 包含的分页器种类都是一样的。下表是XNU中的内存分页器的多种类型:

pageout 守护程序其实不是一个真的守护程序,而是一个线程。而且不是一般的线程:当kernel_bootstarp_thread( ) 完成内核初始化工作并且没有其他事情可做时,就调用vm_pageout( ) 成为了pageour 守护程序, vm_pageout( ) 永远不返回。这个线程管理页面交换的策略,判断哪些页面需要写回到其后备存储。

vm_pageout( ) 函数讲kernel_bootstrap_thread 线程转变为pageout 守护程序,这个函数实际上重新设置了这个线程。设置完成后,调用vm_pageout_continute( ),这个函数周期性地唤醒并执行vm_page_scan( ),维护4个页面表(称为页面队列)。系统中的每一个vm_page 都通过pageq字段绑定这4个队列中的一个:

垃圾回收线程(vm_pageout_garbage_collect( ))偶尔会被vm_pageout_scan( ) 通过其续体唤醒。垃圾回收机制线程处理4个方面的垃圾回收工作:

vm_pageout( ) 守护程序处理的只是交换的一个方向,从物理内存换出到后备存储。而另外一个方向是页面换入,则是发生在页面错误的时候处理的。这个逻辑非常复杂,简化为一下步骤:

页错误有很多种,上述只是其中一种,其他类型的也错误还包括:

VM系统是Mach中最重要最复杂而且最不好理解的子系统。Mach的内存管理核心是分页器,分页器允许将虚拟内存扩展到各种后背存储介质上:交换文件、内存映射文件、设备、甚至远程主机。

iOS中提高内存使用率的Freezer,以及处理内存耗尽的pageout守护程序。

>

以上就是关于informix数据库备份方式有哪些全部的内容,包括:informix数据库备份方式有哪些、win7系统,文档守护者可以帮我把压缩包文件进行备份吗、文档守护者怎么设置文档实时自动备份等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10092863.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存