本文由 千趣源码 – qianqu 发布,转载请注明出处,如有问题请联系我们!oracle数据库迁移方案对比-数据库迁移的两种方法

ad

工作中缘故:开发设计网络服务器的数据库查询已转移。在操作过程以前,我查验了转移oracle数据库查询的可行性计划方案,最终用exp/imp开展导出来和导进(这一非常简单)。我就看过一些表空中间的有关知识5201;点(关键哟)。这里有一些纪录。

1.exp导出来全部案例数据信息。

exp ****/****@**** full=y compress=n file=G:\share\compress_N\****.dmp log=G:\Share\compress_N\exp.log

之上指令就是我导出来时采用的,在其中登录名.登陆密码.实例名要依据须要改动。

full主要1442;数代表着导出来全部案例的数据信息。假如只想要导出来特殊客户的相应数据信息,能够根据owner主要参数特定。

compress主要参数的初始值为y,这儿并并不是指缩小dmp文件,反而是指整理表的高空的文档残片(储存数据信息时很有可能会在硬盘上转化成残片文档)。与此同时,十分关键的是,当特定y时,表的尺寸将被理解为表当今占有的具体尺寸,企业为空。换句话说,很有可能你以前在一个表上空储存了1000万只数据信息,促使文档占有了10G乃至大量空。之后由于一些缘故,数据信息被删掉,表空沒有缩小。这时exp用以导出来,compress特定为y,imp用以导到新案例后,你能发现即便表上空沒有储存互联网大数据,表空中间新转化成的文档依然占有10 g之上。

主要参数grant是与导出来受权有关的信息内容,初始值为Y,这儿省去,但应该是已经知道的。

exp的别的主要参数能够根据exp -help,或是根据载入ColinJames-Oracle数据库查询的exp和imp来查验。

二.imp進口有关实际操作。

1.建立一个数据库实例,依据状况挑选数据库查询的储存部位。为了更好地便于管理,提议不必应用默认设置储存部位。

2.假如在导出来全过程中采用了具备dba管理权限的客户,那麼在导出来全过程中也应当选择具备dba管理权限的客户。因而,必须依据导出来时的客户是不是数据库查询内置客户来辨别是不是建立客户并授于dba管理权限。假如数据库查询建造客户用以导出来,如system和sys,而您不愿改动数据文件的部位,请绕过流程3.4和5与消费者中间创建表空的实际操作。

3.在新数据库查询下建立与初始案例同样的表空。(导进后填补:依据导进时的日志,应当能够应用imp立即导进,可是转化成的表空中间的文档应当和原先的储存部位一样。我并没有检测过立即导进,因此请自身测试一下。假如您不期待表空中间的文档与初始数据库查询的文件目录一致,您依然必须建立它并在之后导进它。)

建立时,能够应用下列指令在原有数据库查询下实行,并大批量转化成SQL语句。

--强烈推荐应用此条句子--建立全部已出现的磁盘空间-- tsds 喻指 tablespace definition statement--v$tablespace是一个内嵌主视图,能够查看本案例下的全部磁盘空间,其他与上边相近。select 'create tablespace ' || space || ' Datafile "数据库文件储放途径' || space || '.dbf" size 20M autoextend on next 20M maxsize unlimited extent management local;' as tsds from (select name as space from v$tablespace where name not in('USERS','SYSTEM','SYSAUX','TEMP'));--建立全部消费者的默认设置磁盘空间--dba_users 内放置着客户及磁盘空间的对应关系,造成的句子会建立全部消费者的默认设置磁盘空间,数据库文件的原始尺寸及拓展容积可自主改动,此外转化成的sql语句内必须自主特定文档储放部位并将 “ 更换为 ‘ 才可一切正常运作。(一般文本检索手机软件都能够大批量更换)select 'create tablespace ' || space || ' Datafile "数据库文件储放途径' || space || '.dbf" size 20M autoextend on next 20M maxsize unlimited extent management local;' as tsds from (select distinct default_tablespace as space from dba_users u where u.default_tablespace not in('USERS','SYSTEM','SYSAUX','TEMP') );--由于有的人建客户时忘掉调节默认设置磁盘空间,建表时却肯定了某一磁盘空间,因此最好是应用第一条句子

4.建立客户并特定默认设置表空。

还给予了下列用以转化成sql的句子,这种句子必须在原有数据库查询下实行。

-- 这里必须自主特定客户登陆密码select 'create user ' || username || ' identified by **** account unlock default tablespace ' || spacename || ' ;' as userds from (select username as username, default_tablespace as spacename from dba_users where username not in ('ANONYMOUS', 'CTXSYS', 'DBSNMP', 'DIP', 'DMSYS', 'EXFSYS', 'MDDATA', 'MDSYS', 'MGMT_VIEW', 'OLAPSYS', 'ORDPLUGINS', 'ORDSYS', 'OUTLN', 'SCOTT', 'SI_INFORMTN_SCHEMA', 'SYS', 'SYSMAN', 'SYSTEM', 'TSMSYS', 'WMSYS', 'XDB') order by username );

5.登陆新数据库查询,实行转化成的TSD和user_ds句子,留意实行次序,先创建表空,再建立客户。

6.应用imp导进。

imp ****/****@**** full=y file=G:\Share\compress_N\****.dmp log=G:\Share\compress_N\imp.log

假如事前沒有创建客户,则客户的登陆密码与初始库的登陆密码同样。

Imp有一个忽视主要参数,这代表着忽视建立不正确。初始值是n,这儿沒有开启。导进环节中,创建表空和消费者会产生许多不正确,能够忽视。

其他的主要参数以及含意能够根据imp -help在cmd中搜索。

到此,imp导进完毕。

三是降低了数据库表空中间的物理学文档。

往往有这一节,是由于我还在第一次导出来的情况下不清楚加上了compress = n的主要参数,造成一个小量数据信息的库占有了30 g之上的硬盘空。为了更好地降低占有,我看了一些缩小表空的相关内容,在这儿干了一些纪录。

*1.提早汇总报表。

有一些定义还没说到,假如不了解是什么意思,能够先了解一下,看了别的的內容之后再回家看第二遍。并并不是物理学文件过大就必须将其变小,我这边开展解决是由于这只不过是个开发设计库备份数据,此外我对这一库也充足清晰,了解这一磁盘空间文档异常,并且也不会再向这一磁盘空间内载入数据信息。在应用EXP 导出来时特定 compress主要参数,能够合理的减少物理学文档的尺寸。选用初始值导出来导进后物理学文档是30多G,设定主要参数后是15G多一些,降低了一半。对于为何还要这么多,在我查询段信息内容后发觉了好多个出现异常的表和数据库索引,这好多个出现异常目标原始时配置了最大4G的室内空间,是关键元凶。以自4049;的常见问题及如今的了解看来,要是没有那好多个初值出现异常大的表界定和数据库索引界定,导出来的结论是合乎我的预估的。以变小磁盘空间为关键词搜索,非常容易便会寻找一些文章内容对你说要先应用shrink space缩小段,随后根据 resize 指令变小磁盘空间的物理学文档,但是在我评测后发觉,这类方式的应用领域很严苛,它想要你所实际操作的段数据信息恰好坐落于磁盘空间的结尾,即你所实际操作的数据信息段恰好占有着已应用的较大块,这时对段开展缩小实际操作,随后resize,磁盘空间文档才能够变小。举例来说,假定一个磁盘空间内有AB二张表,每十万数据信息占有10M储存空间,大家分2种状况看来。第一种状况,先往A表内载入100W数据信息,随后删掉A表内的40W数据信息,占有室内空间少了40M,这时候实行shrink space,resize 60M,物理学文档的确会按预估变小。第二种状况,先往A表载入了100W数据信息,又向B表载入了10W数据信息,最终将A表内的数据删除了90W,这时对A段Shrink,对磁盘空间Resize,随后便会开启 ORA-03297:文件包含在要求的RESIZE值之外应用的数据信息,这里边会牵涉到数据信息块的定义,由于B表内载入的数据信息占有了磁盘空间内更靠前的数据信息块,没法调节物理学图片大小,并且具体情况下,数据信息的载入是没法预估的,因此此方式没用。Shrink Space干了哪些?必须表明一下,这也是在Oracle 10g中增加的作用,用于提升数据信息段的高水位线(HWM)难题,高水位线会造成查看时扫描仪的数据信息块太多,危害查看时的速率,因此必须提升。有关高水位线的內容,可查询 arctic_fox的文章内容 – oracle 高水位线线详细说明,此外必须特别注意的是shrink segment的实际操作会更改参数的rowid,也就是更改了数据信息的全部部位,该指令会全自动复建数据库索引,可是会造成已开启的游标卡尺无效,假如要在工作环境应用,务必要谨慎。EXP/IMP,这应该是非常简单的办法了,也就是我选用的方式。在对磁盘空间内必须梳理的段开展收拢梳理后,查看dba_free_space能够见到处在未应用阶段的区段序号,假如这一磁盘空间不容易再度插进新数据,能够特定当今客户再次导出来,再度导进后,能够发觉物理学文档早已变小到自身可接收的水平。move tablesapce 的方式仅仅看了看,未开展实际操作认证,假如您没法或不方便实行数据信息的导出来导进。提议点一下一泽漪涟 – Oracle收拢表空间查看全文掌握相关内容,也有这篇菜鸟程序员 – ORACLE改动磁盘空间方式

2.一些基本的专业知识。

oracle内嵌一些表和主视图,以user_开始的能够查看当今客户有着的全部目标,以all_开始的能够浏览当今客户有着访问限制的目标(能够是别的用户的目标),以dba_开始的必须dba管理权限,能够浏览数据库查询内的全部目标。磁盘空间的存储结构在逻辑性上的算法设计如下所示:tablespace(磁盘空间) – segment(段) – extent(区) – block(块)数据储存在Block数据信息块中,数据信息块相匹配在物理学硬盘上;一个或好几个持续的数据信息块构成区,区不可以跨段,一个区只归属于一个段;因此,区也就是一个逻辑性上的定义,区与真实储存数据信息的块关系,段信息内容的归纳展览会更简洁明了。段是由区构成,段中会存有一个原始区,用以存取数据,室内空间不足的时候会全自动分派新的区,事实上便是调整了新的数据信息块存取数据,电话区号是按顺序排列的,块能够优先选择应用当今未分派的室内空间(能够在dba_free_space中查询)。磁盘空间则是段的器皿,一般oracle会为表或数据库索引建立一个段,用以储放表或数据库索引的数据信息,称之为表段或数据库索引段,每一个分区表也是一个单独的段,有关段的实际种类,能够在dba_segments中查询 segment_type字段名的标明。此外,在数据库安装的时候会有一个桌面显示系统软件的块尺寸,默认设置为8K,还可以根据 select value from v$parameter where name=’db_block_size’ 自主查看数据信息块的初始值。有关表空间布局更具体的叙述,请自主查询 oracle 物理学构造(磁盘空间,段区块链)_tyhawk的blog-CSDNblog好多个内嵌目标dba_data_files 能够这里查询磁盘空间的一些数据信息,例如物理学文档部位,磁盘空间尺寸,是不是可以用,是不是全自动拓展,拓展尺寸等信息内容,file_id能够在这儿取(file_id)dba_segments 能够查询段的信息内容,例如段的使用者,段的种类,段的名称等dba_extents 和上边相近,能够查询隶属段的信息内容,系统分区ID(extents_id)及其块ID(block_id,区的起止块),此外查看的情况下最好是特定file_id,要不然会比较慢。

V$datafile能够查询一些偏重物理学文档的信息内容,file_id能够取在这儿(file#)。

Dba_free_space能够查询当今表上空未利用的文档间距。假如看到的結果过多,事实上是当今表上空的精彩片段过多。

好多个查看句子--查看磁盘空间以及物理学文档部位select t1.name,t2.name from v$tablespace t1,v$datafile t2where t1.ts# = t2.ts#;--数据库查询的 block_sizeselect value from v$parameter where name='db_block_size';--查询特定磁盘空间内特定段的系统分区信息内容select * from dba_extents t where t.FILE_ID = 00 and t.segment_name = 'XXX';梳理段的句子--必须先开启行挪动,不然有 ORA-10636 ROW MoVEMENT is not enabled的出错alter table history.TB_FT_BALANCE enable row movement; alter table history.TB_FT_BALANCE shrink space; --shrink segment的实际操作会更改参数的rowid --此外见到有些人说实行shrink space时以后的游标卡尺会无效,生产制造上依然要谨慎一点alter table history.TB_FT_BALANCE deallocate unused; alter table history.TB_FT_BALANCE disable row movement;

有关行挪动,您能够在这儿见到:enmotech–详细分析行挪动的基本原理,特性危害和关联性。

如上所述,oracle通经常将一个段分派给一个表,因而它只有实际操作以前有很多数据信息随后被删掉的表。实际上,缩小表段代表着整理表段。

更改磁盘空间物理学图片大小的句子如下所示alter database datafile '/u01/test01/t11.dbf' resize 5m; --主要参数自主改动,此外假如特定的室内空间尺寸没法储放已经有的数据信息,这里会出错--对于实际应当特定的标值可应用如下所示句子获得 --获得磁盘空间文件编号 select file#,name from v$datafile; --这里取下磁盘空间文档的file#序号 --根据较大块明确特定文档占有的室内空间 select (max(block_id) blocks)*8/1024 from dba_extents where file_id={$file#}; --企业为 M,块尺寸选用初始值 8K。 -- alter时resize的主要参数务必要大于查看結果

假如表/

3.本人实际操作。

必须申明的是,在这儿做工作的情况下,不清楚怎么加缩小主要参数。这时,有超出30 g的物理学文档。

应用下列句子查验占有空的比较大段。

--特定file序号,获得当今文档内的段信息内容select t.owner, t.segment_name, t.partition_name, --系统分区名,一个段很有可能有好几个系统分区 t.segment_type, --段种类 t.tablespace_name, t.BYTES/(1024*1024) as MB, --段尺寸,企业是MB t.BYTES, --段的尺寸,企业是 byte t.initial_extent --复位时配置的尺寸 from dba_segments t where t.relative_fno = {$file#} order by t.BYTES desc;

寻找一个占有1G的表段,可是沒有数据信息。应用下列句子对表段开展排列:

alter table history.XXXX enable row movement; alter table history.XXXX shrink space; --shrink segment的实际操作会更改参数的rowid,使已开启的游标卡尺无效alter table history.XXXX deallocate unused;alter table history.XXXX disable row movement;

实际操作进行后,能够再度实行段记录查询句子,会发觉段占用量空显著降低。

在发觉之上实际操作确实能够降低空表段占有后,我并沒有猜疑立即在网络上调节图片大小是不是行得通。反过来,在查询dba _ segements的查看成绩后,我发现了有很多表段必须实行这组实际操作。出自于懒惰的念头,我重启了百度搜索,找到一个加上缩小主要参数的提议。通过具体认证,发觉物理学文档变小到15G,可是尺寸或是远远地超过了我的承担范畴,因此我还是准备用上边提及的办法来实际操作。

在删除了包括数十万个数据信息的检测表格中的数据统计后,表段被缩小。这时,一些文章发表对你说,你能更改数据库查询数据库文件“xxx”的尺寸0m。应用sql查询当今占有的空后,能够进行操作过程开展认证。不正确ORA-03297在overname中开启。那时候猜想释放出来的空室内空间依然以残片的内容存有,数据库管理不容易将数据信息先后移位来添充空乳白色残片室内空间,所以我分2种状况开展了认证,得到了这种方式不通用性的结果。认证时区别的二种状况及出现缩水室内空间的表述,请参照这节开始的汇总。

在了解缩小后的段不可以考虑我的要求后,怎么使用排列后的精彩片段空造成了我的兴趣爱好,因此我将上百万的数据信息载入了另一个表空的2个表格中,随后用delete删除了一些数据信息,并梳理出了一些未利用的精彩片段空,查看了dba_free_space。在前2个表AB和一个未关掉的表C中插进数据信息后,发觉残片块会依照客户的次序开展分派,这代表着表A中排列的空不但仅限于A,别的表B和C还可以用空乳白色地区中的块开展分派。实际上仅有在这儿我才慢慢搞清楚Extent存在的价值,段所表示的顶层是不相干的。

在哪以后,我迫不得已找寻一种新的方式,随后我发现一个漪涟Oracle收拢表空中间的文章内容。时尚博主的方式往往是将数据信息挪动到新表上空,随后将其特定为初始客户的默认设置表空。看了以后并没有依照这一方式,由于担忧lob字段名的信息是否会遗失,不清楚当今表上空的SP和Function会怎么样。假如你要应用挪动方式,提议与此同时阅读文章本文。初学者程序猿-ORACLE改动了表空中间的方式,在其中涵盖了lob的一些叙述。

直至不经意见到dba_segments的initial_extent字段名,才发觉好多个目标的初值太大。因而,这种表有应用复建专用工具复建的。复建后,根据查看段信息内容,发觉了几个段名错乱的数据信息。复建时,该专用工具不容易释放出来表占有的空室内空间。假如阅读者必须复建表,提议先保存表有关的界定和表数据信息,再删掉复建。

删掉.删掉和断开的差别见手机微信_ 33871366–Oracle中删掉.删掉.断开的用途和区别。

对于未公布的精彩片段,在检索不成功后,我打算再度对客户实行exp/imp实际操作。术后意外惊喜地发觉,新表上空沒有错码段信息内容,物理学文档缩减到能够进行的水准。到迄今为止,我终于发现了一个适合的办法来降低表上空的物理学文档。以后,我意识到这实质上与挪动磁盘空间同样。

4.挪动磁盘空间

这节是对上边提及的几篇文章内容的一些纪录,move tablespace的办法我并未检测,此外我感觉move更有效的点应该是能够挪动表到新的磁盘空间(建表时弄错磁盘空间的历经,不容易只有我自己有吗 >_

qianqu
( 千趣源码网全面的综合平台 )
ad
ad
ad
ad
千趣源码