【BBED】使用bbed修改字符类型数据

前面几篇文章介绍了bbed的使用语法规则,这篇介绍如何更改字符类型的数据。

yangobj表是由scott.emp经过CTAS 创建的表。

SQL> select * from yangobj;

     EMPNO ENAME                          JOB               MGR HIREDATE                  SAL       COMM     DEPTNO

---------- ------------------------------ ---------- ---------- ------------------ ---------- ---------- ----------

      7369 SMITH                          CLERK            7902 17-DEC-80                 800                    20

      7499 ALLEN                          SALESMAN         7698 20-FEB-81                1600        300         30

      7521 WARD                           SALESMAN         7698 22-FEB-81                1250        500         30

      7566 JONES                          MANAGER          7839 02-APR-81                2975                    20

      7654 MARTIN                         SALESMAN         7698 28-SEP-81                1250       1400         30

      7698 BLAKE                          MANAGER          7839 01-MAY-81                2850                    30

      7782 CLARK                          MANAGER          7839 09-JUN-81                2450                    10

      7788 SCOTT                          ANALYST          7566 19-APR-87                3000                    20

      7839 KING                           PRESIDENT             17-NOV-81                5000                    10

      7844 TURNER                         SALESMAN         7698 08-SEP-81                1500          0         30

      7876 ADAMS                          CLERK            7788 23-MAY-87                1100                    20

      7900 JAMES                          CLERK            7698 03-DEC-81                 950                    30

      7902 FORD                           ANALYST          7566 03-DEC-81                3000                    20

      7934 MILLER                         CLERK            7782 23-JAN-82                1300                    10

14 rows selected.

比如要修改empno=7521的员工名字 WARD,首先找到次记录在数据块中的地址:dba 4,396

SQL> select dbms_rowid.ROWID_OBJECT(rowid) data_object_id#,

  2  dbms_rowid.ROWID_RELATIVE_FNO(rowid) rfile#,

  3  dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block#,

  4  dbms_rowid.ROWID_ROW_NUMBER(rowid) row#,

  5  rowid

  6  from yangobj where empno=7521;

DATA_OBJECT_ID#     RFILE#     BLOCK#       ROW# ROWID

--------------- ---------- ---------- ---------- ------------------

          52526          4        396          2 AAAM0uAAEAAAAGMAAC

关闭数据库,使用bbed进行数据块的修改,也可以不关闭,不过要进行

alter sysetm flush  shared_pool;

alter sysetm flush  buffer_cache;

清理缓存中以前查询的数据。

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

使用BBED 进行修改:

定位到 dba 4,396

BBED> set dba 4,396 

        DBA             0x0100018c (16777612 4,396)

        OFFSET          8072

找到WARD 的offset 为 8072

BBED> find /c WARD

 File: /opt/oracle/oradata/orcl/users01.dbf (4)

 Block: 396              Offsets: 8072 to 8135           Dba:0x0100018c

------------------------------------------------------------------------

 57415244 0853414c 45534d41 4e03c24d 630777b5 02160101 0103c20d 3302c206 

 02c11f2c 000803c2 4b640541 4c4c454e 0853414c 45534d41 4e03c24d 630777b5 

 <32 bytes per line>

修改WARD为yang,注意如果要修改的字符串中字符的个数。如果是varchar2 类型的,修改前与修改后要一致;如果是char类型的,修改后的数据不能超过定义时char(N)中N的数值。(文章结尾有一个例子)

BBED> modify /c yang dba 4,396 offset 8072

 File: /opt/oracle/oradata/orcl/users01.dbf (4)

 Block: 396              Offsets: 8072 to 8135           Dba:0x0100018c

------------------------------------------------------------------------

 79616e67 0853414c 45534d41 4e03c24d 630777b5 02160101 0103c20d 3302c206 

 02c11f2c 000803c2 4b640541 4c4c454e 0853414c 45534d41 4e03c24d 630777b5 

 <32 bytes per line>

使用dump命令查看结果

BBED> dump /v dba 4,396 offset 8072

 File: /opt/oracle/oradata/orcl/users01.dbf (4)

 Block: 396     Offsets: 8072 to 8135  Dba:0x0100018c

-------------------------------------------------------

 79616e67 0853414c 45534d41 4e03c24d l yang.SALESMAN..M

 630777b5 02160101 0103c20d 3302c206 l c.w.........3...

 02c11f2c 000803c2 4b640541 4c4c454e l ...,....Kd.ALLEN

 0853414c 45534d41 4e03c24d 630777b5 l .SALESMAN..Mc.w.

 <16 bytes per line>

查看block 4,396的校验

BBED> sum dba 4,396

Check value for File 4, Block 396:

current = 0x27cd, required = 0x24df

current 与reqired 必须一致。

BBED> sum dba 4,396 apply

Check value for File 4, Block 396:

current = 0x24df, required = 0x24df

重新启动数据库,sqlplus 中进行验证。。

SQL> startup

ORACLE instance started.

Total System Global Area 1224736768 bytes

Fixed Size                  2020384 bytes

Variable Size             318770144 bytes

Database Buffers          889192448 bytes

Redo Buffers               14753792 bytes

Database mounted.

Database opened.

SQL> conn yang/yang

Connected.

SQL> col ename for a15

SQL> col job for a10

SQL> set linesize 120

SQL> set pagesize 1000

SQL> select * from yangobj;

     EMPNO ENAME           JOB               MGR HIREDATE                  SAL       COMM     DEPTNO

---------- --------------- ---------- ---------- ------------------ ---------- ---------- ----------

      7369 SMITH           CLERK            7902 17-DEC-80                 800                    20

      7499 ALLEN           SALESMAN         7698 20-FEB-81                1600        300         30

      7521 yang            SALESMAN         7698 22-FEB-81                1250        500         30

      7566 JONES           MANAGER          7839 02-APR-81                2975                    20

      7654 MARTIN          SALESMAN         7698 28-SEP-81                1250       1400         30

      7698 BLAKE           MANAGER          7839 01-MAY-81                2850                    30

      7782 CLARK           MANAGER          7839 09-JUN-81                2450                    10

      7788 SCOTT           ANALYST          7566 19-APR-87                3000                    20

      7839 KING            PRESIDENT             17-NOV-81                5000                    10

      7844 TURNER          SALESMAN         7698 08-SEP-81                1500          0         30

      7876 ADAMS           CLERK            7788 23-MAY-87                1100                    20

      7900 JAMES           CLERK            7698 03-DEC-81                 950                    30

      7902 FORD            ANALYST          7566 03-DEC-81                3000                    20

      7934 MILLER          CLERK            7782 23-JAN-82                1300                    10

14 rows selected.

SQL> select * from yangobj where empno=7521;

     EMPNO ENAME           JOB               MGR HIREDATE                  SAL       COMM     DEPTNO

---------- --------------- ---------- ---------- ------------------ ---------- ---------- ----------

      7521 yang            SALESMAN         7698 22-FEB-81                1250        500         30

SQL> 

附上一个例子:

修改varchar2类型数据原数据与新数据长度不一导致查询结果中其他字段值也被修改了。

SQL> ---修改后查询

SQL> select * from yangobj where empno=7521;

     EMPNO ENAME      JOB               MGR HIREDATE                  SAL       COMM     DEPTNO

---------- ---------- ---------- ---------- ------------------ ---------- ---------- ----------

      7521 WARD       SALESMAN         7698 22-FEB-81                1250        500         30

SQL> alter system flush buffer_cache;

SQL> select * from yangobj;

     EMPNO ENAME                          JOB                    MGR HIREDATE                  SAL       COMM     DEPTNO

---------- ------------------------------ --------------- ---------- ------------------ ---------- ---------- ----------

      7369 SMITH                          CLERK                 7902 17-DEC-80                 800                    20

      7499 ALLEN                          SALESMAN              7698 20-FEB-81                1600        300         30

      7521 Yang                           lALESMAN翸cw? 5.5100E-56 14-,  -44

                                          ?3

      7566 JONES                          MANAGER         -2.26E+125 02-APR-81                2975                    20

      7654 MARTIN                         SALESMAN              7698 28-SEP-81                1250       1400         30

时间: 2024-09-20 10:06:50

【BBED】使用bbed修改字符类型数据的相关文章

【BBED】使用bbed修改数字类型数据

bbed的使用(一)  介绍了BBED的编译安装. bbed的使用(二)  介绍了bbed的语法规则和常用命令的使用. bbed的使用(三)  介绍了bbed的命令. 如何修改字符类型的数据,使用bbed修改数据表中字符类型的数据 下面介绍使用bbed修改数字类型数据 yangobj表是有scott下的emp经过CTAS创建. 修改前: SQL> select * from yangobj;      EMPNO ENAME                          JOB      

《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列一:字符类型

PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来越多.数据库之间数据迁移的时候,首先遇到的,并且也是最重要的,就是数据类型之间的转换.下面根据自己的理解和测试,写了一些数据类型之间的差异以及迁移时的注意事项的文章,不足之处,尚请多多指教. 字符类型 大家知道,Oracle有四种字符类型,分别是char,varchar2,nchar,nvarcha

【BBED】使用bbed恢复已经删除的行数据

 在oracle中,当数据行被删除时,实际上并未真正的删除.这一行仅仅是被标记为删除,并且可利用空间计数器和指针会相应的调整. 行的状态信息存储在占用每一行的前几个字节的Row Header.  Row Header 包含: 1 Row Flag 判断这行是不是行首,第一列,最后一列在不在其中,是否有行迁移和行链接.是一个标志位. 2 Lock Byte(ITL entry)和列数. 3 column count Row Flag 是一个单byte的标志掩码:标识了row的状态.标志掩码的译码如

导出Excel时,数字类型数据被转换为字符类型,导致Excel公式无法计算

问题描述 开发平台:VS2005开发语言:C#问题:使用客户提供模板,对Excel文件进行数据填充时,数字类型的数据被转换为字符类型(单元格左上方有绿色的三角),导致Excel公式无法进行计算. 解决方案 解决方案二:你可以修改模板的列,设置格式为数字而非常规.然后导出就是数字了.解决方案三:在模板上强制设置格式为数字

更新-thinkphp修改bit类型表数据,只能从0修改成1,不能从1修改成0

问题描述 thinkphp修改bit类型表数据,只能从0修改成1,不能从1修改成0 如题,tp3.2.2版本,用tp修改User表数据时,sex字段用bit类型,0代表女,1代表男,页面用radio类型单选框,在修改页面能够获取数据库中的数据并显示,但在修改时,只能从女修改成男,不能从男修改成女.前者提示修改成功,数据库中数据也更新,后者提示失败,数据库中数据不更新 解决方案 $sex='0'; $data['sex']=(bool)$sex; $M->save($data); 解决方案二: $

【BBED】bbed的使用(三)

bbed的使用(一)  介绍了BBED的编译安装. bbed的使用(二) 介绍了bbed的语法规则和常用命令的使用. 本文继续介绍bbed常用命令的使用. 17 DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]    dump 命令可以转储数据块的内容. 使用/v 选项可以输出详细的内容.有上面的提示可以看出,dump命令可以指定DBA,FILENAME,FILE,BLOCK,OFFSET,COUNT参数.    如果没有指定

【BBED】bbed常用命令

[BBED]bbed常用命令 有关bbed的历史文章: BBED [推荐] [BBED] SYSTEM文件头损坏的恢复(4) http://blog.itpub.net/26736162/viewspace-2084329/ [推荐] [BBED] sys.bootstrap$ 对象的恢复 http://blog.itpub.net/26736162/viewspace-2083621/ [推荐] [BBED]丢失归档文件情况下的恢复 http://blog.itpub.net/26736162

【BBED】BBED模拟并修复ORA-08102错误

[BBED]BBED模拟并修复ORA-08102错误   1.1  BLOG文档结构图     1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 使用BBED修复ORA-08102错误(重点) ② BBED的使用 ③ 数据块格式的dump文件解释 ④ ORA-08102错误的trace文件解释 ⑤ 从rdba获取ROWID信息 ⑥ 其它实用技能   Tips: ① 本文在itpub(h

转:java操纵主要数据库的lob类型数据

2010-04-11 转:java操纵主要数据库的lob类型数据 文章分类:Java编程 Clob和blob的操作主要分为3种:插入,更新和读取显示.  对于插入,可以分为两类.一类是可以直接按照正常的字段处理,一类为必须先插入空clob/blob再更新为真正的内容.  插入: 对于大部分的数据库,在插入lob时都可以通过PreparedStatement.setAsciiStream或PreparedStatement.setBinaryStream直接写入,查到的资料包括: H2数据库:ht