oracle如何快速备份几千万数据表
LINUX下Oracle数据导入导出的方法详解?
LINUX下Oracle数据导入导出的方法详解?
在“运行”里打开cmd
2
输入命令:sqlplussystem/
其中system是登录数据库的用户名
123456是用户名的密码
orcl是数据库实例名称
3
如果提示命令无效,那就是你没有配置好oracle的环境变量(想当年我也被这个问题困扰着),配置oracle环境变量的方法如下:
1、右击“我的电脑”-gt选择“属性”-gt选择“高级”-gt单击“环境变量”2、选择“path”这一行,单击“编辑”,在“path”的变量值文本框的最后面先加入一个分号“:”,然后再分号后面加入sqlplus文件的目录路径,如“c:programfilesoracleproduct10.2.0db_1in”,然后点击“确定”按钮。3、如果在“系统变量”列表框下面的“变量”列中找不到“oracle_home”和“oracle_sid”这两个变量,则需要下面操作,否则无需一下操作。4、在“系统变量”中点击“新建”按钮,在“变量名”中输入“oracle_home”,变量值中输入oracle的安装目录路径,如“c:programfilesoracleproduct10.2.0db_1”,然后点击“确定”按钮。5、在“系统变量”中点击“新建”按钮,在“变量名”中输入“oracle_sid”,变量值中输入数据库的实例名,然后点击“确定”按钮。
oracle_home:oracle数据库软件的安装目录oracle_sid:oracle数据库的实例名oracle数据库实例名:用于和操作系统进行联系的标识,即数据库和操作系统之间的交换是通过数据库实例名来体现的。
end
第二步,expdp备份命令
1
创建oracle的备份目录:
sqlgtcreatedirectorydpdata1asd:tempdmp
这仅仅是在oracle里设定的目录,并没有真正创建
2
可以通过这句命令查看到这个目录
sqlgtselect*fromdba_directories
3
赋于要导出数据表的所属用户权限
sqlgtgrantread,writeondirectorydpdata1tosshe
4
好了,到了关键一步,之前走了不少弯路,但其它是小问题,在网上零零碎碎查了很多资料,终于找到原因。
首先,要切换回命令窗口,不要再在sqlgt下运行,然后输入命令:
expdpsystem/123456@
5
上面报了一个错ora-39002:操作无效
原因是d:tempdmp这个目录不存在,别以为createdirectory之后就会自动生成文件夹,也别以为执行expdp后会自动生成文件夹,要自己手动新建这个目录文件夹的。新建文件夹后再试一下,果然成功了!恭喜你,已成功备份!
6
如果你要问,导出来的dmp文件怎样还原回去。好吧,做人做到底,为了省去你再找方法的麻烦,这里我也做一个演示(一般备份的数据是等到数据库有问题时才用的上)。
首先,再一次登录数据库sqlplussystem/
然后,删除目标数据库用户dropusersshecascade
7
现在来再一次创建用户,可以用命令创建,也可以在plsql里创建,这里在plsql创建。
用system登录数据库,然后右键users--新建
然后填写你的账号名称,必须和备份时的用户一致,并赋于相应的权限
最后点击应用,完成用户创建。
8
返回dos命令窗口,不再是sqlgt
输入导入命令:impdpsystem/123456@
导入成功!
end
步骤3定时执行备份任务
做一个按年月日命名的批处理。在d:temp目录下新建一个文件,随便命名为.bat,我的命名为,编辑为如下代码
-------------------------------------------------------------------------
@echooffremsetbackupfilef_database_te:~0,4%-te:~5,2%-te:~8,2%.dmpremsetlogfilef_database_te:~0,4%-te:~5,2%-te:~8,2%.logremdelete30daysfilesforfiles/p
oracle11g导出空表怎样设置?
1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。
2、设置deferred_segment_creation参数为FALSE后,无论是空表还是非空表,都分配segment。 在sqlplus中,执行如下命令: SQLaltersystemsetdeferred_segment_creationfalse; 查看: SQLshowparameterdeferred_segment_creation; 该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。
3、可以使用手工为空表分配Extent的方式,来解决导出之前建立的空表的问题。说明如下: 3.1使用ALLOCATEEXTENT的说明 使用ALLOCATEEXTENT可以为数据库对象分配Extent。其语法如下: ----------- ALLOCATEEXTENT{SIZEinteger[K|M]|DATAFILEfilename|INSTANCEinteger} ----------- 可以针对数据表、索引、物化视图等手工分配Extent。 ALLOCATEEXTENT使用样例: ALLOCATEEXTENT ALLOCATEEXTENT(SIZEinteger[K|M]) ALLOCATEEXTENT(DATAFILEfilename) ALLOCATEEXTENT(INSTANCEinteger) ALLOCATEEXTENT(SIZEinteger[K|M]DATAFILEfilename) ALLOCATEEXTENT(SIZEinteger[K|M]INSTANCEinteger) 针对数据表操作的完整语法如下: ----------- ALTERTABLE[schema.]table_nameALLOCATEEXTENT[({SIZEinteger[K|M]|DATAFILEfilename|INSTANCEinteger})] ----------- 故,需要构建如下样子简单的SQL命令: ----------- altertableaTabelNameallocateextent ----------- 3.2构建对空表分配空间的SQL命令, 查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下: ----------- SQLselecttable_namefromuser_tableswhereNUM_ROWS0; ----------- 根据上述查询,可以构建针对空表分配空间的命令语句,如下: ----------- SQLSelectaltertable||table_name||allocateextent;fromuser_tableswherenum_rows0 ----------- 批量输出上述生成的SQL语句,建立C:createsql.sql,其内容如下: ----------- setheadingoff; setechooff; setfeedbackoff; settermouton; spoolC:allocate.sql; Selectaltertable||table_name||allocateextent;fromuser_tableswherenum_rows0; spooloff; ----------- 执行C:createsql.sql,命令如下: ----------- :createsql.sql; ----------- 执行完毕后,得到C:allocate.sql文件。 打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。 3.4执行SQL命令,对空表分配空间: 执行C:allocate.sql,命令如下: ----------- :allocate.sql; ----------- 执行完毕,表已更改。 3.4此时执行exp命令,即可把包括空表在内的所有表,正常导出。 另外:Oracle11g中,对密码是大小写敏感的,即密码中的字母是区分大小写的。 在Oracle10g中及以前,密码中的字母大小写无所谓。