1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。
2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。
3、可以使用手工为空表分配Extent的方式,来解决导出之前建立的空表的问题。说明如下:
31 使用ALLOCATE EXTENT的说明
使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下:
-----------
ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
-----------
可以针对数据表、索引、物化视图等手工分配Extent。
ALLOCATE EXTENT使用样例:
ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer [K | M])
ALLOCATE EXTENT(DATAFILE 'filename')
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE 'filename')
ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer)
针对数据表 *** 作的完整语法如下:
-----------
ALTER TABLE [schema]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
-----------
故,需要构建如下样子简单的SQL命令:
-----------
alter table aTabelName allocate extent
-----------
32 构建对空表分配空间的SQL命令,
查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
-----------
SQL>select table_name from user_tables where NUM_ROWS=0;
-----------
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
-----------
SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
-----------
批量输出上述生成的SQL语句,建立C:\createsqlsql,其内容如下:
-----------
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\allocatesql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off;
-----------
执行C:\createsqlsql,命令如下:
-----------
SQL>@ C:\createsqlsql;
-----------
执行完毕后,得到C:\allocatesql文件。
打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。
34 执行SQL命令,对空表分配空间:
执行C:\allocatesql,命令如下:
-----------
SQL>@ C:\allocatesql;
-----------
执行完毕,表已更改。
34 此时执行exp命令,即可把包括空表在内的所有表,正常导出。
另外:Oracle11g中,对密码是大小写敏感的,即密码中的字母是区分大小写的。
在Oracle10g中及以前,密码中的字母大小写无所谓。
可能出现导出数据只有一个值的原因是由于导出时没有选中需要导出的表或者导出的SQL语句有问题。请按照以下步骤进行检查和排查:
1 确认导出的表:在导出数据时,需要选择正确的数据库和要导出的数据表。如果选错了数据库或未选中要导出的表,则可能导致导出的数据只有一个值。
2 检查导出的SQL语句:如果使用SQL查询语句来导出数据,那么需要确认SQL语句是否正确。如果SQL语句有错误或者没有指定正确的条件,也可能导致只导出一个值。
3 检查导出的数据格式:在进行导出时,需要选择正确的数据格式。如果所选的数据格式有问题,则可能导致导出的数据只有一个值。
4 检查数据内容:最后需要确认所选的数据表中确实包含多个数据值。如果数据表中只包含一个数据值,则导出时也只会得到一个值。
如果您无法通过以上方法解决问题,建议您查看系统日志或联系数据库管理员或技术支持人员以获取更多信息和帮助。
流行的关系数据库系统都支持数据库字符集编码,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有字符集编码的转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。GB2312、GBK、UTF-8 等都是可选的数据库字符集编码;当然我们也可以选择 ISO8859-1 (8-bit),只是我们得在应
用程序写数据之前先将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符,读数据之后也需要将两个字节合并起来,同时还要判别其中的 SBCS 字符,因此我们并不推荐采用 ISO8859-1 作为数据库字符集编码。这样不但没有充分利用数据库自身的字符集编码支持,而且同时也增加了编程的复杂度。编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。
PHP 程序在查询数据库之前,首先执行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有 WEB 程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。
SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8' 语句告诉服务器“将来从这个客户端传来的信息采用字符集 utf-8”。它还为服务器发送回客户端的结果指定了字符集(例如,如果你使用一个 SELECT 语句,它表示列值使用了什么字符集)。
不知道这资料是不是你说的那些。呵呵~~~
我自己现在弄明白了,是因为我在还原数据库时,没有在“备份号”中选择要还原的数据库。正确 *** 作应该是,点击“备份号”右边的“查看内容”,在其中选择要还原的数据库,这样就可以了,然后完成剩下的 *** 作。
以上就是关于如何用EXP导出oracle数据库中没有记录的表全部的内容,包括:如何用EXP导出oracle数据库中没有记录的表、mysql导出数据只有一个值、我用php导出数据库数据时,导出的数据丢失,数据库是gb2312的编码,出来的时候有的数据丢失。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)