我有一个为用户创建数据库模式(Oracle 10g)的应用程序。对这些架构的访问在一段时间后过期。这些架构的大小可以达到2GB。应用程序的实际运行数据相对较少。 为了保持较低的数据库大小,考虑到在用户需要访问时可以恢复这些数据库模式的最佳方法是什么。
我在考虑以下方法:
为每个表转换.csv文件中的Schema,然后压缩文件(zip)。考虑到csv很容易将csv转换为DB表格,使用csv可能是一个优势。
请告诉我是否有更好的方法来做同样的事情。这里的主要目的是节省操作数据库空间。
答案 0 :(得分:2)
使用Data Pump Export和Data Pump Import而不是构建自定义工具。导出和导入数据和元数据并非易事。 Data Pump是为这种情况而构建的,它已经包含在Oracle中,并且它具有许多高级功能。
以下是使用数据泵归档模式的一个非常简单的示例。
创建一个目录来保存导出。每个数据库只需要一次。
SQL> create directory export_directory as 'C:\test';
Directory created.
创建测试架构和示例数据。
SQL> create user test_user identified by test_user;
User created.
SQL> alter user test_user quota unlimited on users;
User altered.
SQL> create table test_user.table1 as select 1 a from dual;
Table created.
导出数据泵。
C:\test>expdp jheller@orcl12 directory=export_directory dumpfile=test_user.dmp schemas=test_user
Export: Release 12.1.0.1.0 - Production on Thu Jun 12 22:33:25 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Starting "JHELLER"."SYS_EXPORT_SCHEMA_01": jheller/********@orcl12 directory=export_directory dumpfile=test_user.dmp schemas=test_user
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
. . exported "TEST_USER"."TABLE1" 5.031 KB 1 rows
Master table "JHELLER"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for JHELLER.SYS_EXPORT_SCHEMA_01 is:
C:\TEST\TEST_USER.DMP
Job "JHELLER"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Jun 12 22:34:35 2014 elapsed 0 00:00:56
压缩文件。
有一个数据泵选项可以压缩数据,但它需要高级压缩选项。我建议下载而不是每核心支付数千美元 数十年来一直在压缩数据的免费软件程序之一。
C:\test>zip test_user.zip test_user.dmp
adding: test_user.dmp (172 bytes security) (deflated 90%)
C:\test>dir
Volume in drive C is OS
Volume Serial Number is 660C-91D8
Directory of C:\test
06/12/2014 10:37 PM <DIR> .
06/12/2014 10:37 PM <DIR> ..
06/12/2014 10:34 PM 1,435 export.log
06/12/2014 10:34 PM 212,992 TEST_USER.DMP
06/12/2014 10:37 PM 21,862 test_user.zip
3 File(s) 236,289 bytes
2 Dir(s) 689,950,937,088 bytes free
放弃用户。
SQL> drop user test_user cascade;
User dropped.
SQL> select count(*) from test_user.table1;
select count(*) from test_user.table1
*
ERROR at line 1:
ORA-00942: table or view does not exist
导入用户。
C:\test>impdp jheller@orcl12 directory=export_directory dumpfile=test_user.dmp
Import: Release 12.1.0.1.0 - Production on Thu Jun 12 22:41:52 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Master table "JHELLER"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "JHELLER"."SYS_IMPORT_FULL_01": jheller/********@orcl12 directory=export_directory dumpfile=test_user.dmp
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "TEST_USER"."TABLE1" 5.031 KB 1 rows
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Job "JHELLER"."SYS_IMPORT_FULL_01" successfully completed at Thu Jun 12 22:42:18 2014 elapsed 0 00:00:19
检查数据。
SQL> select count(*) from test_user.table1;
COUNT(*)
----------
1