处理超过 2G 的 DBF 表

今天看到一则如何处理超过 2G 大小 dbf 表的方法,这里是他的演示录像:http://devzone.advantagedatabase.com/jeremym/fox_large/foxprolarge.html,他演示了如何将数据插入到一个超过 2GB 的 dbf 表中,以及如何从中查询需要的记录,也看到了他生成的一个近 20GB 的 dbf 表。

总结如下:

1. 这样大的表是不可能直接使用 use 命令来打开的

2. 要使用他提供的 ODBC 驱动程序,从这里下载 http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=13&Product=14&Platform=6
此驱动的好处是支持 vfp9 的所有数据类型,包括 AutoInc, Varchar, VarBinary, BLOB 等;而 MS 的 ODBC 仅支持到 vfp6sp3 版本的格式,然后就居心叵测的强迫我们使用 OleDB 这种 ADO 方式来连接 Vfp 数据表。

3. 使用视图或 SPT 方法连接并执行 查询/插入/更新/删除 操作,完整的 spt 链接串的写法(使用自由表):
   'Driver=Advantage StreamlineSQL ODBC;' ;
+ 'AdvantageLocking=OFF;' ;               && OFF 使用兼容的锁方式,ON 使用 Advantage 独特锁(专利)方式
+ 'CharSet=ANSI;' ;                             && 或者 OEM
+ 'DataDictionary=True;' ;                   && 使用数据字典目录,自由表必须指定此项目
+ 'DataDirectory=g:/erp/datas;' ;        && 自由表所在目录
+ 'DefaultType=Visual FoxPro;' ;          && 其它可选项为 Advantage / Foxpro / Clipper
+ 'Locking=Record;' ;                          && 或者 File
+ 'MaxTableCloseCache=5;' ;             && 缓冲已关闭表的缓冲区最大数量
+ 'MemoBlockSize=64;' ;                    && 备注块大小
+ 'Rows=False;' ;                               && 是否显示已删除的行(False 相当于 set delete on)
+ 'TrimTrailingSpaces=False;' ;           && 是否截断尾随的空格
+ 'ServerTypes=1;' ;                           && 1/2/4 - [Local / Remote / Internet] Server,可组合使用
+ 'Compression=Never;'                      && 数据传送时的压缩方式 - Never / Always / Internet

 

当然对于大多数情况,这样大的数据表我不会使用 vfp 的本地数据库来存放,应该会升级到 sql server 等大型数据库。唯一的用途是当别人给我一个超过 2GB 的 dbf 表时,我可以用这个方法来处理它。

 

### Oracle 空间权限不足的解决方案 当遇到 Oracle 数据库中的空间权限不足问题时,通常会涉及两种情况:一种是由于用户的权限设置不正确;另一种是因为临时空间或永久空间容量已满。 #### 用户权限不足的解决方法 如果用户尝试创建对象(如临时、索引或其他结构)而收到权限不足的错误,则可能需要授予该用户相应的权限。以下是常见的授权操作: 1. **授予权限给特定用户** 使用 `GRANT` 命令可以向指定用户分配必要的权限。例如: ```sql GRANT CREATE SESSION TO username; GRANT CREATE TABLE TO username; GRANT UNLIMITED TABLESPACE TO username; ``` 这里需要注意的是,`UNLIMITED TABLESPACE` 是一个非常重要的权限,它允许用户在其所属的所有空间中无限扩展数据段[^4]。 2. **验证角色和权限配置** 如果某些用户已经拥有角色(如 CONNECT 或 RESOURCE),但仍无法执行所需的操作,则需进一步检查这些角色的具体权限范围是否满足需求。可以通过查询视图来确认当前用户的权限状态: ```sql SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USERNAME'; ``` #### 空间容量不足的处理方式 对于因空间容量耗尽而导致的问题,比如 ORA-01652 错误提示“无法通过 8192 扩展临时段”,则应采取以下措施增加可用空间: 1. **扩充现有文件大小** 修改现有的数据文件使其更大以容纳更多数据。命令如下所示: ```sql ALTER DATABASE DATAFILE '/path/to/existing_file.dbf' RESIZE 2G; ``` 2. **新增额外的数据文件空间** 当单个数据文件接近上限或者达到硬件限制时,可以选择添加新的数据文件至目标空间。例如针对 TEMP 空间可执行下面语句: ```sql ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED; ``` 此外还需注意,默认情况下每个空间最多支持附加不超过 200 个物理存储单元,并且单一文件尺寸不可超出 32GB 的界限[^2]。 3. **清理无用的对象释放资源** 定期审查并删除那些不再使用的大型历史记录或是废弃项目有助于腾挪出宝贵的空间位置供后续业务逻辑调用。 综上所述,在面对 Oracle 中有关空间权限不足的情形下,既可以从调整账户许可入手解决问题,也可以通过对底层架构层面做出相应改动从而缓解压力状况。 ```sql -- Example of granting unlimited tablespace privilege. GRANT UNLIMITED TABLESPACE TO your_user; -- Example of adding a new tempfile to the temporary tablespace group. ALTER TABLESPACE temp ADD TEMPFILE '/new/path/to/file.dbf' SIZE 200M AUTOEXTEND ON NEXT 50M MAXSIZE 2G; ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值