<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>惜分飞 &#187; replace oid recovery</title>
	<atom:link href="https://www.xifenfei.com/tag/replace-oid-recovery/feed" rel="self" type="application/rss+xml" />
	<link>https://www.xifenfei.com</link>
	<description>提供7*24专业数据库(Oracle,SQL Server,MySQL,PostgreSQL等)恢复和技术支持@Tel:17813235971</description>
	<lastBuildDate>Sun, 25 Oct 2026 13:02:42 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>PostgreSQL oid文件替换实现数据访问</title>
		<link>https://www.xifenfei.com/2025/12/pg-replace-oid-recovery.html</link>
		<comments>https://www.xifenfei.com/2025/12/pg-replace-oid-recovery.html#comments</comments>
		<pubDate>Fri, 12 Dec 2025 13:00:21 +0000</pubDate>
		<dc:creator><![CDATA[惜分飞]]></dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL恢复]]></category>
		<category><![CDATA[oid恢复]]></category>
		<category><![CDATA[pg恢复]]></category>
		<category><![CDATA[replace oid recovery]]></category>
		<category><![CDATA[替换oid恢复]]></category>

		<guid isPermaLink="false">https://www.xifenfei.com/?p=11847</guid>
		<description><![CDATA[联系：手机/微信(+86 17813235971) QQ(107644445)  &#8230; <a href="https://www.xifenfei.com/2025/12/pg-replace-oid-recovery.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="xifenfeicopyright">
<p>联系：<a href="https://www.xifenfei.com/about_xifenfei" target="_blank">手机/微信(+86 17813235971)   QQ(107644445)</a><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&#038;uin=107644445&#038;site=qq&#038;menu=yes"><img src="https://www.xifenfei.com/wp-content/themes/img/site_qq.jpg" alt="QQ咨询惜分飞" title="QQ咨询惜分飞"/></a></p>
<p>标题：<a href="https://www.xifenfei.com/2025/12/pg-replace-oid-recovery.html" target="_blank">PostgreSQL oid文件替换实现数据访问</a></p>
<p>作者：<a href="https://www.xifenfei.com" target="_blank">惜分飞</a>©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]</p>
</div>
<p>对于postgresql数据库,我们都知道他的数据在独立的oid文件里面,而字典主要在pg_type/1247,pg_class/1259,pg_attribute/1260等对象中,而数据是存储在独立的oid和toast oid文件中.如果通过提供oid文件,可以实现狸猫换太子的恢复数据.这里做一个简单测试,大概思路是这样的库里面有一个表a,然后创建一个空表b,然后把a表相关的oid文件复制成b表的oid文件,然后验证数据是否可以正常查询<br />
创建一个空的b表,结构和a表一致</p>
<pre class="brush: sql; title: ; notranslate">
[postgres@xifenfei 13676]$ psql
psql (12.8)
Type &quot;help&quot; for help.

postgres=# CREATE TABLE &quot;public&quot;.&quot;AO_6384AB_DISCOVERED1&quot; (
postgres(#   &quot;DATE&quot; &quot;pg_catalog&quot;.&quot;timestamp&quot;,
postgres(#   &quot;ID&quot; &quot;pg_catalog&quot;.&quot;int4&quot;,
postgres(#   &quot;KEY&quot; &quot;pg_catalog&quot;.&quot;varchar&quot; COLLATE &quot;pg_catalog&quot;.&quot;default&quot;,
postgres(#   &quot;PLUGIN_KEY&quot; &quot;pg_catalog&quot;.&quot;varchar&quot; COLLATE &quot;pg_catalog&quot;.&quot;default&quot;,
postgres(#   &quot;USER_KEY&quot; &quot;pg_catalog&quot;.&quot;varchar&quot; COLLATE &quot;pg_catalog&quot;.&quot;default&quot;
postgres(# )
postgres-# ;
CREATE TABLE
</pre>
<p>检查a/b的情况</p>
<pre class="brush: sql; title: ; notranslate">
postgres=# select count(1) from &quot;AO_6384AB_DISCOVERED&quot;;
 count 
-------
   544
(1 row)

postgres=# select count(1) from &quot;AO_6384AB_DISCOVERED1&quot;;
 count 
-------
     0
(1 row)

postgres=# \d &quot;AO_6384AB_DISCOVERED&quot;
                    Table &quot;public.AO_6384AB_DISCOVERED&quot;
   Column   |            Type             | Collation | Nullable | Default 
------------+-----------------------------+-----------+----------+---------
 DATE       | timestamp without time zone |           |          | 
 ID         | integer                     |           |          | 
 KEY        | character varying           |           |          | 
 PLUGIN_KEY | character varying           |           |          | 
 USER_KEY   | character varying           |           |          | 

postgres=# \d &quot;AO_6384AB_DISCOVERED1&quot;
                   Table &quot;public.AO_6384AB_DISCOVERED1&quot;
   Column   |            Type             | Collation | Nullable | Default 
------------+-----------------------------+-----------+----------+---------
 DATE       | timestamp without time zone |           |          | 
 ID         | integer                     |           |          | 
 KEY        | character varying           |           |          | 
 PLUGIN_KEY | character varying           |           |          | 
 USER_KEY   | character varying           |           |          | 
</pre>
<p>存在数据的a/b表相关oid信息</p>
<pre class="brush: sql; title: ; notranslate">


postgres=# select oid,relname,relfilenode from pg_class where relname like '%AO_6384AB_DISCOVERED%';
  oid  |        relname        | relfilenode 
-------+-----------------------+-------------
 16516 | AO_6384AB_DISCOVERED  |       16516
 17069 | AO_6384AB_DISCOVERED1 |       17069
(2 rows)

postgres=# select oid,relname,relfilenode from pg_class where relname like '%16516%' or  relname like '%17069%'  ;
  oid  |       relname        | relfilenode 
-------+----------------------+-------------
 16519 | pg_toast_16516       |       16519
 16521 | pg_toast_16516_index |       16521
 17072 | pg_toast_17069       |       17072
 17074 | pg_toast_17069_index |       17074
(4 rows)
</pre>
<p>关闭数据库把a表相关的oid文件拷贝替换b表的oid文件</p>
<pre class="brush: bash; title: ; notranslate">
[postgres@xifenfei 13676]$ pg_ctl stop -D /pgdata
waiting for server to shut down....2025-12-12 20:00:58.804 HKT [21445] LOG:  received fast shutdown request
2025-12-12 20:00:58.805 HKT [21445] LOG:  aborting any active transactions
2025-12-12 20:00:58.805 HKT [21471] FATAL:  terminating connection due to administrator command
2025-12-12 20:00:58.805 HKT [21473] FATAL:  terminating connection due to administrator command
2025-12-12 20:00:58.805 HKT [21856] FATAL:  terminating connection due to administrator command
2025-12-12 20:00:58.806 HKT [21472] FATAL:  terminating connection due to administrator command
2025-12-12 20:00:58.806 HKT [21445] LOG: background worker&quot;logical replication launcher&quot;(PID 252)exited with exit code 1
2025-12-12 20:00:58.807 HKT [21447] LOG:  shutting down
2025-12-12 20:00:58.811 HKT [21445] LOG:  database system is shut down
 done
server stopped
[postgres@xifenfei 13676]$ cp  16516 17069
[postgres@xifenfei 13676]$ cp  16519 17072
[postgres@xifenfei 13676]$ cp  16521 17074
[postgres@xifenfei 13676]$ pg_ctl start -D /pgdata
waiting for server to start....2025-12-12 20:02:05.985 HKT [22241] LOG:  
starting PostgreSQL 12.8 on x86_64-pc-linux-gnu, 
compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-26.0.1), 64-bit
2025-12-12 20:02:05.985 HKT [22241] LOG:  listening on IPv4 address &quot;0.0.0.0&quot;, port 5432
2025-12-12 20:02:05.986 HKT [22241] LOG:  listening on IPv6 address &quot;::&quot;, port 5432
2025-12-12 20:02:05.986 HKT [22241] LOG:  listening on Unix socket &quot;/tmp/.s.PGSQL.5432&quot;
2025-12-12 20:02:05.993 HKT [22242] LOG:  database system was shut down at 2025-12-12 20:00:58 HKT
2025-12-12 20:02:05.995 HKT [22241] LOG:  database system is ready to accept connections
 done
server started
</pre>
<p>查询a/b表数据</p>
<pre class="brush: sql; title: ; notranslate">
[postgres@xifenfei 13676]$ psql
psql (12.8)
Type &quot;help&quot; for help.

postgres=# select count(1) from &quot;AO_6384AB_DISCOVERED1&quot;;
 count 
-------
   544
(1 row)

postgres=# select count(1) from &quot;AO_6384AB_DISCOVERED&quot;;
 count 
-------
   544
(1 row)
</pre>
<p>通过上述从测试,证明创建一个新的表结构,完全可以访问老的oid文件中的数据</p>
<div id="crp_related"><ul><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2025/03/pdu-recovery-corrupt-block.html" rel="bookmark" class="crp_title">PostgreSQL表文件损坏恢复&#8212;pdu恢复损坏的表文件</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2025/09/pg-truncate-recovery.html" rel="bookmark" class="crp_title">Postgres数据库truncate表无有效备份恢复</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2025/03/invalid-checkpoint-record.html" rel="bookmark" class="crp_title">pg启动报invalid checkpoint record处理</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2025/04/pg-createdb-gbk.html" rel="bookmark" class="crp_title">pg创建gbk字符集库</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2018/08/pg-tablespace-database-schema.html" rel="bookmark" class="crp_title">PostgreSQL的表空间、数据库、用户之间的关系</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2022/05/pg-wal-lost-recovery.html" rel="bookmark" class="crp_title">PostgreSQL恢复系列:wal日志丢失恢复</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2018/08/psql-fatal-no-pg_hba-conf-entry-for-host.html" rel="bookmark" class="crp_title">psql: FATAL:  no pg_hba.conf entry for host</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2025/03/navicat-postgresql-datlastsysoid.html" rel="bookmark" class="crp_title">Navicat连接postgresql时出现column &#8220;datlastsysoid&#8221; does not exist错误解决</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2018/08/postgresql-archive_mode.html" rel="bookmark" class="crp_title">PostgreSQL修改归档模式</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2026/01/pg-readme_to_recover.html" rel="bookmark" class="crp_title">注意:PostgreSQL库出现readme_to_recover勒索</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2018/08/pg_rman_backup_restore.html" rel="bookmark" class="crp_title">pg_rman 备份还原测试</a></li><li style="list-style-type:decimal;font-size:11px;" ><a href="https://www.xifenfei.com/2010/08/fckeditor%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e.html" rel="bookmark" class="crp_title">fckeditor使用说明</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>https://www.xifenfei.com/2025/12/pg-replace-oid-recovery.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
