学习资料

学习的笔记


第二十章 数据的移动

<p>[TOC]</p> <h2>Oracle 导出和导入应用程序</h2> <ul> <li>导出和导入应用程序能做什么</li> <li>逻辑备份不能作为备份和恢复策略的基石</li> <li>导出应用程序名为exp,要有create session权限,exp_full_database角色</li> <li>导入应用程序名为imp,要有create session权限,imp_full_database角色</li> <li>不完全恢复前后都要做全备份</li> <li>启动导出和导入程序的方式 使用命令行,这也是功能最全和数据库管理员使用最多的方法 使用交互方法,即问答方式 使用参数文件 使用OEM,即图形方式</li> </ul> <h2>导出应用程序的用法</h2> <ul> <li>四种方法 表方式:指定某张表 用户方式:指定用户 表空间方式:整个表空间 全库方式:除sys用户中的对象,数据字典无法导出</li> <li>$ exp -help</li> </ul> <h2>导入应用程序的用法</h2> <ul> <li>四种方法 表方式:指定某张表 用户方式:指定用户 表空间方式:整个表空间 全库方式:除sys用户中的对象,数据字典无法导出</li> <li>$ imp -help</li> </ul> <h2>导出和导入程序的应用实例</h2> <ul> <li> <p>环境准备</p> <pre><code>SQL&gt; connect scott/tiger SQL&gt; create table emp_dump as select * from emp; SQL&gt; create table dept_dump as select * from dept; SQL&gt; select count(*) from emp_dump; SQL&gt; select count(*) from dept_dump;</code></pre> </li> <li>执行逻辑备份、破坏数据、恢复 <pre><code>$ mkdir -p /home/oracle/backup/export --Linux 5.0之后括号要转义 $ exp scott/tiger file=/home/oracle/backup/export/scott.dmp tables=\(emp_dump,dept_dump\) --检查逻辑备份的文件是否存在 --破坏数据 select * from scott.emp_dump; select * from scott.dept_dump; update emp_dump set job='CEO'; commit; drop table emp_dump; drop table dept_dump; SQL&gt; select * from dept_dump; ORA-00942: table or view does not exist SQL&gt; select * from emp_dump; ORA-00942: table or view does not exist --恢复丢失的表 $ imp scott/tiger file=/home/oracle/backup/export/scott.dmp --检查发现数据回来了,回到导出数据的状态 select * from scott.emp_dump; select * from scott.dept_dump;</code></pre></li> </ul> <h2>数据泵</h2> <ul> <li>是10g后引入的新工具,包括exp、imp的功能</li> <li>不再指定绝对路径,而是由数据库目录对象指定,由DBA创建,通过dba_directories查询。</li> <li> <p>expdb和impdb应用程序</p> </li> <li> <p>重复上一节操作</p> <pre><code>-- 查看默认数据库目录对所对应的操作系统目录 -- /u01/app/oracle/admin/orcl/dpdump/ -- DATA_PUMP_DIR select * from dba_directories where directory_name like 'DATA_PUMP%'; -- 授予读写权限给scott用户 SQL&gt; grant read,write on directory DATA_PUMP_DIR to scott ; SQL&gt; connect scott/tiger select * from scott.emp_dump; select * from scott.dept_dump;</code></pre> </li> <li> <p>逻辑备份</p> <pre><code>-- 目录、表、文件、备份条件 -- /home/oracle/backup/export/scott_par.txt DIRECTORY=DATA_PUMP_DIR tables=(emp_dump,dept_dump) DUMPFILE=scott_dp.dmp QUERY=scott.emp_dump:"where job&lt;&gt;'ANALYST' and sal&gt;1250" --备份(参数过多可以保存在txt文件里) $ expdp scott/tiger parfile=/home/oracle/backup/export/scott_par.txt --报错:解决办法加大临时表空间 ORA-39006: internal error ORA-39065: unexpected master process exception in DISPATCH ORA-01652: unable to extend temp segment by 256 in tablespace TEMP ORA-06512: at "SYS.KUPM$MCP", line 5951 ORA-06512: at "SYS.KUPM$MCP", line 20838 ORA-06512: at "SYS.KUPM$MCP", line 5397 -- 检查/u01/app/oracle/admin/orcl/dpdump/scott_dp.dmp文件存在</code></pre> </li> <li> <p>expdp学习 expdp -help 官方文档</p> </li> <li> <p>破坏文件,然后恢复</p> <pre><code>SQL&gt; connect scott/tiger drop table emp_dump; $ impdp scott/tiger parfile=/home/oracle/backup/export/scott_par.txt --只恢复逻辑备份时指定的数据,不需要恢复的数据会跳过</code></pre> </li> <li>impdp 学习 impdp -help 官方文档</li> </ul> <h2>不同用户及不同表空间之间的数据移动</h2> <ul> <li> <p>把scott用户绝大多数对象传送到pjinlian用户中,表空间由USERS修改为 PIONEER_DATA <code>select * from dba_users where username in('SCOTT','PJINLIAN');</code></p> </li> <li> <p>查看数据</p> <pre><code>select object_name,object_type,status,owner from dba_objects where owner in('SCOTT','PJINLIAN'); select table_name,tablespace_name,owner from dba_tables where owner in('SCOTT','PJINLIAN'); select index_name,tablespace_name,owner from dba_indexes where owner in('SCOTT','PJINLIAN');</code></pre> </li> <li> <p>导出操作</p> <pre><code>--/home/oracle/backup/export/exp_par.txt --路径,方案,备份文件名,排除备份 --exclude与include相反,只能使用一个 DIRECTORY=DATA_PUMP_DIR SCHEMAS=scott DUMPFILE=schema_scott.dat EXCLUDE=PACKAGE EXCLUDE=VIEW EXCLUDE=TABLE:"LIKE '%DUMP'" --备份路径 select * from dba_directories where directory_name like 'DATA_PUMP%'; --执行导出 $ expdp system/system parfile=/home/oracle/backup/export/exp_par.txt $ cd /u01/app/oracle/admin/orcl/dpdump/ $ ll -rw-r--r-- 1 oracle oinstall 2142 Aug 4 23:46 export.log -rw-r----- 1 oracle oinstall 438272 Aug 4 23:46 schema_scott.dat --export.log是日志文件,与界面输出一致</code></pre> </li> <li>导入操作 <pre><code>--/home/oracle/backup/export/imp_par.txt --路径,文件,方案变更,表空间变更 DIRECTORY=DATA_PUMP_DIR DUMPFILE=schema_scott.dat REMAP_SCHEMA=SCOTT:PJINLIAN REMAP_TABLESPACE=USER:PIONEER_DATA --执行导入 $ impdp system/system parfile=/home/oracle/backup/export/imp_par.txt $ cd /u01/app/oracle/admin/orcl/dpdump/ $ ll -rw-r--r-- 1 oracle oinstall 1336 Aug 4 23:05 import.log --import.log是日志文件,与界面输出一致 --查看导入的数据 select object_name,object_type,status,owner from dba_objects where owner in('','PJINLIAN'); select table_name,tablespace_name,owner from dba_tables where owner in('','PJINLIAN'); select index_name,tablespace_name,owner from dba_indexes where owner in('','PJINLIAN');</code></pre></li> </ul> <h2>将Oracle 的数据传给其他软件(系统)</h2> <ul> <li>导出scott用户的emp表数据到excel中 <pre><code>--/home/oracle/backup/export/emp.sql set line 120 set pagesize 100 set feedback off spool /home/oracle/backup/export/excels/emp select * from emp; spool off --执行文件 SQL&gt; @/home/oracle/backup/export/emp.sql --导出的emp.lst文件用excel打开即可</code></pre></li> </ul> <h2>将其他软件(系统)的数据导入Oracle</h2> <ul> <li> <p>准备外部表</p> <pre><code>-- 创建目录,创建两个变量的目录,授权,数据字典 create directory data_dir as '/home/oracle/backup/export/etl'; create directory data_log as '/home/oracle/backup/export/etl'; grant read on directory data_dir to scott; grant write on directory data_log to scott; select * from dba_directories where directory_path like '%etl'; select * from dba_tab_privs where table_name in ('DATA_DIR','DATA_LOG') and grantee='SCOTT';</code></pre> </li> <li>创建外部表 <pre><code>--先不学</code></pre></li> </ul> <h2>数据泵操作的自动化</h2>

页面列表

ITEM_HTML