{"id":48198,"date":"2026-10-28T16:14:22","date_gmt":"2026-10-28T15:14:22","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=48198"},"modified":"2026-10-28T16:17:05","modified_gmt":"2026-10-28T15:17:05","slug":"name-resolution-of-oracle","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/","title":{"rendered":"Name resolution of Oracle"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This blog post is a follow-up of <a href=\"https:\/\/www.dbi-services.com\/blog\/tns_admin-which-ora-files-oracle-will-use\/\" data-type=\"post\" data-id=\"41089\">TNS_ADMIN \u2013 which *.ora files Oracle will use<\/a>. There, the main focus was to find out if a running database instance will use a TNS_ADMIN environment or the binary defaults.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this blog post we will analyze much more the internal mechanisms to find the *.ora files, which offered a few surprises. You will see many tracing output. If you are only interested in the summary, scroll down to the end \ud83d\ude09<\/p>\n\n\n\n<h2 id=\"h-local-and-remote-connections\" class=\"wp-block-heading\">Local and remote connections<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To connect to an Oracle database, you can do that locally <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nsqlplus appuser\/password\nsqlplus appuser    #asks for password\nsqlplus \/ as sysdba\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">In this case, it connects locally to the current environment of ORACLE_HOME and ORACLE_SID. No listener is involved for that.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a remote connection, you have to connect to a listener (defined by hostname and port), and specifying the desired SID or SERVICE_NAME for which the listener should start a process for you. The easiest form is EZCONNECT: host:port\/service, but usually you will use an alias that will be resolved to the destination. These aliases are defined in the tnsnames.ora file or an ldap server specified in ldap.ora. For how to setup an ldap server, see my blog post <a href=\"https:\/\/www.dbi-services.com\/blog\/setup-an-ldap-server-for-oracle-naming-on-enterprise-linux-9\/\" data-type=\"post\" data-id=\"46966\">Setup an LDAP server for Oracle naming on Enterprise Linux 9<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nMYAPP.DBI-SERVICES.COM =\n  (DESCRIPTION =\n    (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))\n    (CONNECT_DATA =\n      (SERVICE_NAME = PDBMYAPP.dbi-services.com)\n    )\n  )\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">To connect to that database remotely, you can use<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nsqlplus appuser\/password@\/\/host01:1521\/pdbmyapp.dbi-services.com\nsqlplus appuser\/password@myapp.dbi-services.com\nsqlplus appuser\/password@myapp  #if names.default_domain=dbi-services.com\n<\/pre><\/div>\n\n\n<h2 id=\"h-location-of-the-oracle-network-configuration-ora-files\" class=\"wp-block-heading\">Location of the Oracle network configuration (*.ora files)<\/h2>\n\n\n\n<h3 id=\"h-without-tns-admin\" class=\"wp-block-heading\">Without TNS_ADMIN<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">And where is sqlplus or tnsping looking for the configuration files? As an old, experienced administrator, I would expect it in the directory of the <code>$TNS_ADMIN<\/code> variable, or if unset, in <code>$ORACLE_HOME\/network\/admin<\/code>. Or if you are using the nice feature of the Read-Only ORACLE_HOME (ROOH) where configuration and logs are relocated to ORACLE_BASE (<code>roohctl -enable<\/code>), it will be in <code>$ORACLE_BASE\/homes\/&lt;home_name&gt;\/network\/admin<\/code>. I will call the directory as <code><strong>$DEFAULT_TNS<\/strong><\/code> and it points, depending if ROOH or non-ROOH, to the corresponding network\/admin directory. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hint: My home for the tests is such a ROOH home. If you have a non-ROOH home, simply set DEFAULT_TNS to $ORACLE_HOME\/network admin.<\/p>\n\n\n\n<h4 id=\"h-tracing-with-strace\" class=\"wp-block-heading\">Tracing with strace<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">But is my expectation of name resolution really correct? On Linux, we can see with the <code>strace<\/code> binary what the tool will look for:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nstrace sqlplus -S -L a\/b@xyz 2&gt;&amp;1 |grep -E &#039;\\.ora&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">I will use an alias that does not exist (@xyz). strace prints the output on STDERR, so I will redirect it to STDOUT (2&gt;&amp;1) and filter the whole output for &#8220;.ora&#8221;. I use the ORACLE_HOME=\/u00\/app\/oracle\/product\/19.32.0 where no Oracle newtork configuration is present:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lstat(\"\/u00\/app\/oracle\/product\/19.32.0\/env.ora\", {st_mode=S_IFREG|0644, st_size=852, ...}) = 0\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/product\/19.32.0\/env.ora\", O_RDONLY) = 3\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/home\/oracle\/.sqlnet.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/etc\/intchg.ora\", F_OK)         = -1 ENOENT (No such file or directory)\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/intchg.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/etc\/tnsnav.ora\", F_OK)         = -1 ENOENT (No such file or directory)\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/tnsnav.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/home\/oracle\/.tnsnames.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/etc\/tnsnames.ora\", F_OK)       = -1 ENOENT (No such file or directory)\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/tnsnames.ora\", F_OK) = -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/fips.ora\", O_RDONLY) = -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/fips.ora\", O_RDONLY) = -1 ENOENT (No such file or directory)\nstat(\"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", 0x7fff8d79e530) = -1 ENOENT (No such file or directory)\nstat(\"\/u00\/app\/oracle\/product\/19.32.0\/network\/admin\/ldap.ora\", 0x7fff8d79e530) = -1 ENOENT (No such file or directory)\nstat(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/ldap.ora\", 0x7fff8d79e620) = -1 ENOENT (No such file or directory)<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$ORACLE_HOME\/env.ora<\/code> : First surprise, a file that was not known to me. In this file you can set environment variables. Here you can set a TNS_ADMIN variable as a fallback if it is not yet set in the environment.<\/li>\n\n\n\n<li><code>\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora<\/code>: The next one is the <code>$DEFAULT_TNS<\/code> location which is expected for me<\/li>\n\n\n\n<li><code>\/home\/oracle\/.sqlnet.ora<\/code> : Did you know that it looks for a &#8220;.sqlnet.ora&#8221; (mind the dot!) in your home-directory?<\/li>\n\n\n\n<li><code>intchg.ora \/ tnsnav.ora<\/code> : seems to be related to network &#8220;communities&#8221; and routing, not naming resolution.<\/li>\n\n\n\n<li><code>\/home\/oracle\/.tnsnames.ora<\/code> : It also looks for a .tnsnames.ora (mind the dot!) in the user&#8217;s home.<\/li>\n\n\n\n<li><code>\/etc\/tnsnames.ora<\/code> : I have never seen that before &#8230;<\/li>\n\n\n\n<li><code>\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/tnsnames.ora<\/code> : expected <code>$DEFAULT_TNS<\/code> location<\/li>\n\n\n\n<li><code>fips.ora<\/code> : Related to cryptography (US government Federal Information Processing Standards)<\/li>\n\n\n\n<li><code>\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora<\/code> : It is a home configured for ROOH. Why it looks here? Probably a bug&#8230;<\/li>\n\n\n\n<li><code>\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/ldap.ora<\/code> : That is what I expected.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Summary: 1st, it looks for an sqlnet.ora (to determine name resolution order and default domain); Then, it looks for a tnsnames.ora, then for an ldap server<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, I will create a <code>\/home\/oracle\/.sqlnet.ora<\/code> and trace what happens:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ strace sqlplus -S -L a\/b@xyz 2&gt;&amp;1 |grep -E '\\.ora'\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/home\/oracle\/.sqlnet.ora\", F_OK) = 0\nopenat(AT_FDCWD, \"\/home\/oracle\/.sqlnet.ora\", O_RDONLY) = 6\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", F_OK) = -1 ENOENT (No such file or directory)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It opens my .sqlnet.ora, but it also tries to open the sqlnet.ora of the <code>$DEFAULT_TNS<\/code>. I assume it will use it as fallback for parameters not present in $HOME\/.sqlnet.ora; let&#8217;s try: <\/p>\n\n\n\n<h4 id=\"h-create-a-test-configuration\" class=\"wp-block-heading\">Create a test configuration<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">I create a configuration with <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n# \/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\nnames.default_domain = dbi-services.com\nSQLNET.EXPIRE_TIME = 10\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n# \/home\/oracle\/.sqlnet.ora\nnames.default_domain = dbi.internal\nSQLNET.EXPIRE_TIME = 10\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n#  \/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/\nDBI.dbi-services.com = ...\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n# \/home\/oracle\/.tnsnames.ora\nEXT.dbi-services.com = ...\nINT.dbi.internal = ...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Then, I try to connect:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nsqlplus a\/b@EXT  # ORA-12154: TNS:could not resolve the connect identifier specified\nsqlplus a\/b@INT   # it can resolve it and connects (default_domain of $HOME\/.sqlnet.ora)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The domain of <code>$HOME\/.sqlnet.ora<\/code> is used. If I remove the default domain from the <code>$HOME\/.sqlnet.ora<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nsqlplus a\/b@EXT  # it can resolve it and connects (using default_domain of $DEFAULT_TNS\/sqlnet.ora)\nsqlplus a\/b@INT   # ORA-12154: TNS:could not resolve the connect identifier specified\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">That means, values in <code>$HOME\/.sqlnet.ora<\/code> will override values of the default <code>$DEFAULT_TNS\/sqlnet.ora<\/code>. The same applies to $HOME\/.tnsnames.ora, it overrides entries in the default tnsnames.ora<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And what about the <code>\/etc\/tnsnames.ora<\/code>? Create it:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n# \/etc\/tnsnames.ora\nETC.dbi-services.com = ...\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nsqlplus a\/b@ETC.dbi-services.com\nsqlplus a\/b@INT.dbi.internal \nsqlplus a\/b@EXT.dbi-services.com   # ORA-12154: TNS:could not resolve the connect identifier specified\nsqlplus a\/b@ETC\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If it is present, the default tnsnames.ora in the <code>$DEFAULT_TNS<\/code> is ignored (it will not find the EXT.dbi-services.com), but the <code>$HOME\/.tnsnames.ora<\/code> has precedence (it can resolve INT.dbi.internal). And we can also see that the default-domain for &#8220;@ETC&#8221; is taken from the <code>$DEFAULT_TNS\/sqlnet.ora<\/code> (in <code>$HOME\/.sqlnet.ora<\/code> it is not defined).<\/p>\n\n\n\n<h3 id=\"h-with-tns-admin\" class=\"wp-block-heading\">With TNS_ADMIN<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>TNS_ADMIN<\/code> is the variable to explicitly specify the location of the *.ora configuration files. If it is not set in your shell, Oracle looks for it in <code>$ORACLE_HOME\/env.ora<\/code>;<br>It is usually used to centralize the configuration for all ORACLE_HOME&#8217;s in one directory. We recommend <code>${ORACLE_BASE}\/network\/admin<\/code>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, I will use an empty TNS_ADMIN directory with no *.ora files<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nmkdir \/tmp\/empty\nexport TNS_ADMIN=\/tmp\/empty\nstrace sqlplus -S -L a\/b@abc 2&gt;&amp;1 |grep -E &quot;\\.ora&quot;|grep -vE &#039;tnsnav|intchg|fips&#039;\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code\"><code>lstat(\"\/u00\/app\/oracle\/product\/19.32.0\/env.ora\", {st_mode=S_IFREG|0644, st_size=852, ...}) = 0\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/product\/19.32.0\/env.ora\", O_RDONLY) = 3\naccess(\"\/tmp\/empty\/sqlnet.ora\", F_OK)   = -1 ENOENT (No such file or directory)\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", F_OK) = 0\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", O_RDONLY) = 6\naccess(\"\/home\/oracle\/.sqlnet.ora\", F_OK) = 0\nopenat(AT_FDCWD, \"\/home\/oracle\/.sqlnet.ora\", O_RDONLY) = 6\naccess(\"\/tmp\/empty\/sqlnet.ora\", F_OK)   = -1 ENOENT (No such file or directory)\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", F_OK) = 0\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/sqlnet.ora\", O_RDONLY) = 8\naccess(\"\/home\/oracle\/.tnsnames.ora\", F_OK) = 0\naccess(\"\/tmp\/empty\/tnsnames.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/etc\/tnsnames.ora\", F_OK)       = 0\nstat(\"\/home\/oracle\/.tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=716, ...}) = 0\nopenat(AT_FDCWD, \"\/home\/oracle\/.tnsnames.ora\", O_RDONLY) = 9\nstat(\"\/etc\/tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=579, ...}) = 0\nopenat(AT_FDCWD, \"\/etc\/tnsnames.ora\", O_RDONLY) = 9\nstat(\"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", 0x7ffde1f5b730) = -1 ENOENT (No such file or directory)\nstat(\"\/tmp\/empty\/ldap.ora\", 0x7ffde1f5b730) = -1 ENOENT (No such file or directory)\nstat(\"\/u00\/app\/oracle\/product\/19.32.0\/network\/admin\/ldap.ora\", 0x7ffde1f5b730) = -1 ENOENT (No such file or directory)\nstat(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/ldap.ora\", 0x7ffde1f5b820) = -1 ENOENT (No such file or directory)\nstat(\"\/home\/oracle\/.tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=716, ...}) = 0\nstat(\"\/etc\/tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=579, ...}) = 0\n...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If TNS_ADMIN is set, but the directory is empty, it will fallback to the order as above. <br>Now I will set it to a directory with an sqlnet.ora file and no tnsnames.ora, and I delete the \/etc\/tnsnames.ora:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nmkdir \/tmp\/admin; cp $ORACLE_BASE\/network\/admin\/sqlnet.ora \/tmp\/admin\/\nexport TNS_ADMIN=\/tmp\/admin\nstrace sqlplus -S -L a\/b@abc 2&gt;&amp;1 |grep -E &#039;tnsnames|sqlnet&#039;\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code\"><code>access(\"\/tmp\/admin\/sqlnet.ora\", F_OK)   = 0\nopenat(AT_FDCWD, \"\/tmp\/admin\/sqlnet.ora\", O_RDONLY) = 6\naccess(\"\/home\/oracle\/.sqlnet.ora\", F_OK) = 0\nopenat(AT_FDCWD, \"\/home\/oracle\/.sqlnet.ora\", O_RDONLY) = 6\naccess(\"\/tmp\/admin\/sqlnet.ora\", F_OK)   = 0\nopenat(AT_FDCWD, \"\/tmp\/admin\/sqlnet.ora\", O_RDONLY) = 8\naccess(\"\/home\/oracle\/.tnsnames.ora\", F_OK) = 0\naccess(\"\/tmp\/admin\/tnsnames.ora\", F_OK) = -1 ENOENT (No such file or directory)\naccess(\"\/etc\/tnsnames.ora\", F_OK)       = -1 ENOENT (No such file or directory)\naccess(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/tnsnames.ora\", F_OK) = 0\nstat(\"\/home\/oracle\/.tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=716, ...}) = 0\nopenat(AT_FDCWD, \"\/home\/oracle\/.tnsnames.ora\", O_RDONLY) = 12\nstat(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=432, ...}) = 0\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/tnsnames.ora\", O_RDONLY) = 12\nstat(\"\/home\/oracle\/.tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=716, ...}) = 0\nstat(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=432, ...}) = 0\n...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It takes the <code>$TNS_ADMIN\/sqlnet.ora<\/code> and ignores the <code>$DEFAULT_TNS\/sqlnet.ora<\/code>. It will not find the <code>$TNS_ADMIN\/tnsnames.ora<\/code> (does not exist) and not the <code>\/etc\/tnsnames.ora<\/code> (I removed it before), so it uses the default in <code>$DEFAULT_TNS<\/code>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the next try I will add the tnsnames.ora to the TNS_ADMIN.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ncp $ORACLE_BASE\/network\/admin\/tnsnames.ora \/tmp\/admin\nexport TNS_ADMIN=\/tmp\/admin\nstrace sqlplus -S -L a\/b@abc 2&gt;&amp;1 |grep -E &#039;tnsnames|sqlnet&#039;\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code\"><code>access(\"\/tmp\/admin\/sqlnet.ora\", F_OK)   = 0\nopenat(AT_FDCWD, \"\/tmp\/admin\/sqlnet.ora\", O_RDONLY) = 6\naccess(\"\/home\/oracle\/.sqlnet.ora\", F_OK) = 0\nopenat(AT_FDCWD, \"\/home\/oracle\/.sqlnet.ora\", O_RDONLY) = 6\naccess(\"\/tmp\/admin\/sqlnet.ora\", F_OK)   = 0\nopenat(AT_FDCWD, \"\/tmp\/admin\/sqlnet.ora\", O_RDONLY) = 8\naccess(\"\/home\/oracle\/.tnsnames.ora\", F_OK) = 0\naccess(\"\/tmp\/admin\/tnsnames.ora\", F_OK) = 0\nstat(\"\/home\/oracle\/.tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=716, ...}) = 0\nopenat(AT_FDCWD, \"\/home\/oracle\/.tnsnames.ora\", O_RDONLY) = 12\nstat(\"\/tmp\/admin\/tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=11319, ...}) = 0\nopenat(AT_FDCWD, \"\/tmp\/admin\/tnsnames.ora\", O_RDONLY) = 12\nread(12, \"# tnsnames.ora Network Configura\"..., 4096) = 4096\nstat(\"\/home\/oracle\/.tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=716, ...}) = 0\nstat(\"\/tmp\/admin\/tnsnames.ora\", {st_mode=S_IFREG|0644, st_size=11319, ...}) = 0\n...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">As expected, it finds the <code>$TNS_ADMIN\/tnsnames.ora<\/code> and it no longer looks for it in the <code>$DEFAULT_TNS\/tnsnames.ora<\/code>. And this was not quite clear to me: it will no longer look for the <code>\/etc\/tnsnames.ora<\/code> file. It is only used if TNS_ADMIN is NOT set! <\/p>\n\n\n\n<h3 id=\"h-ldap-ora\" class=\"wp-block-heading\">ldap.ora<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">And what about the LDAP connections (defined in ldap.ora)? Currently there is no ldap.ora present. Without TNS_ADMIN:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stat(\"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", 0x7ffdb464fd30) = -1 ENOENT (No such file or directory)<br>stat(\"\/u00\/app\/oracle\/product\/19.32.0\/network\/admin\/ldap.ora\", 0x7ffdb464fd30) = -1 ENOENT (No such file or directory)<br>stat(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/ldap.ora\", 0x7ffdb464fe20) = -1 ENOENT (No such file or directory)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;Works as designed&#8221; or a bug: it first looks in $ORACLE_HOME, instead of the ROOH admin direcory. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And with TNS_ADMIN set, but without ldap.ora<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stat(\"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", 0x7ffcb23acdb0) = -1 ENOENT (No such file or directory)\nstat(\"\/tmp\/admin\/ldap.ora\", 0x7ffcb23acdb0) = -1 ENOENT (No such file or directory)\nstat(\"\/u00\/app\/oracle\/product\/19.32.0\/network\/admin\/ldap.ora\", 0x7ffcb23acdb0) = -1 ENOENT (No such file or directory)\nstat(\"\/u00\/app\/oracle\/homes\/OraDB19Home2\/network\/admin\/ldap.ora\", 0x7ffcb23acea0) = -1 ENOENT (No such file or directory)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now I set in TNS_ADMIN the names.directory_path=(LDAP) and add the ldap.ora file<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stat(\"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", 0x7ffdb55680b0) = -1 ENOENT (No such file or directory)\nstat(\"\/tmp\/admin\/ldap.ora\", {st_mode=S_IFREG|0644, st_size=500, ...}) = 0\nstat(\"\/tmp\/admin\/ldap.ora\", {st_mode=S_IFREG|0644, st_size=500, ...}) = 0\nopenat(AT_FDCWD, \"\/tmp\/admin\/ldap.ora\", O_RDONLY) = 12\n...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And it works! But what if I create an ldap.ora in the ORACLE_HOME? I create it with an invalid ldap host.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stat(\"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", {st_mode=S_IFREG|0644, st_size=501, ...}) = 0\nstat(\"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", {st_mode=S_IFREG|0644, st_size=501, ...}) = 0\nopenat(AT_FDCWD, \"\/u00\/app\/oracle\/product\/19.32.0\/ldap\/admin\/ldap.ora\", O_RDONLY) = 12<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We can see that it only uses the <code>$ORACLE_HOME\/ldap\/admin\/ldap.ora<\/code>, and not the <code>$TNS_ADMIN\/ldap.ora<\/code>! For me, that is a bug. For all other *.ora files the TNS_ADMIN variable is respected, but not for ldap.ora!<\/p>\n\n\n\n<h2 id=\"h-summary\" class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To resolve an sql*net alias, which configuration files <code>sqlplus<\/code> will use?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My stone-age knowledge that the *.ora files in $TNS_ADMIN are used, and if TNS_ADMIN is not set, then it uses the files in the <code>$DEFAULT_TNS<\/code>. That&#8217;s mostly correct (or at least not completely wrong), but there are some differences.  My most important findings:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If a file in TNS_ADMIN does not exist, it looks in other locations. If a file .sqlnet.ora or .tnsnames.ora (with leading dot) in $HOME exists, the normal *.ora files will be used, but entries in the dot files has precedence. And if there is a file \/etc\/tnsnames.ora and TNS_ADMIN is <strong>not<\/strong> set, it will use it. And it ignores a $TNS_ADMIN\/ldap.ora if there is one in $ORACLE_HOME\/ldap\/admin\/.<\/p>\n\n\n\n<h3 id=\"h-sqlnet-ora-network-defaults\" class=\"wp-block-heading\">sqlnet.ora (Network defaults)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The relevant parameters for name resolution are <code>NAMES.DEFAULT_DOMAIN <\/code>and <code>NAMES.DIRECTORY_PATH<\/code>. <br>It uses the sqlnet.ora in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$HOME\/.sqlnet.ora<\/code> : (mind the dot!): if it exists, the following files will be used, but values in this file has precedence.<\/li>\n\n\n\n<li><code>$TNS_ADMIN\/sqlnet.ora<\/code> : It uses this file and stops. If it does not exist or TNS_ADMIN is not defined, then continue with the next point:<\/li>\n\n\n\n<li><code>$default_tns\/sqlnet.ora<\/code> <\/li>\n<\/ul>\n\n\n\n<h3 id=\"h-tnsnames-ora\" class=\"wp-block-heading\">tnsnames.ora<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$HOME\/.tnsnames.ora<\/code> : (mind the dot!): if it exists, the following files will be used, but aliases in this file has precedence.<\/li>\n\n\n\n<li><code>\/etc\/tnsnames.ora<\/code> : if TNS_ADMIN is <strong>NOT<\/strong> set! It uses this file and stops<\/li>\n\n\n\n<li><code>$TNS_ADMIN\/tnsnames.ora<\/code> : if TNS_ADMIN is set and tnsnames.ora is present, it uses it and stops; if the file is not present, it continues with the next point.<\/li>\n\n\n\n<li><code>$default_tns\/tnsnames.ora<\/code> <\/li>\n<\/ul>\n\n\n\n<h3 id=\"h-ldap-ora-0\" class=\"wp-block-heading\">ldap.ora<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>$ORACLE_HOME\/ldap\/admin\/ldap.ora<\/code> : if it exists, It uses this file and stops (TNS_ADMIN is ignored!)<\/li>\n\n\n\n<li><code>$TNS_ADMIN\/ldap.ora<\/code> : if TNS_ADMIN is set and ldap.ora is present, it uses it and stops; if the file is not present, it continues with the next point.<\/li>\n\n\n\n<li><code>$default_tns\/ldap.ora<\/code> <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These are the findings with an sqlplus of version 19.32.0; For other releases\/versions it is probably the same, but you can simply verify it yourself with the strace utility. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For Oracle 26ai (23.26) it is a litte bit easier to see what tnsnames.ora is used<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SQL*Plus: Release 23.26.1.0.0 - Production on Wed Oct 28 14:10:19 2026\nVersion 23.26.1.0.0\n\nCopyright (c) 1982, 2025, Oracle.  All rights reserved.\n\nERROR:\nORA-12154: Cannot connect to database. Cannot find alias db1970 in\n\/home\/oracle\/.tnsnames.ora,\n\/u00\/app\/oracle\/product\/23\/23.26\/network\/admin\/tnsnames.ora.\nHelp: https:\/\/docs.oracle.com\/error-help\/db\/ora-12154\/\n\n\nSP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus\nHelp: https:\/\/docs.oracle.com\/error-help\/db\/sp2-0751\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or with an ldap configuration, you will see that it tried it, but not which ldap.ora was used (so strace may be still needed).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ORA-12154: Cannot connect to database. Cannot find alias db1970 in\n\/home\/oracle\/.tnsnames.ora, \/tmp\/admin\/tnsnames.ora and LDAP.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog post is a follow-up of TNS_ADMIN \u2013 which *.ora files Oracle will use. There, the main focus was to find out if a running database instance will use a TNS_ADMIN environment or the binary defaults. In this blog post we will analyze much more the internal mechanisms to find the *.ora files, which [&hellip;]<\/p>\n","protected":false},"author":123,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[198,59],"tags":[],"type_dbi":[],"class_list":["post-48198","post","type-post","status-publish","format-standard","hentry","category-database-management","category-oracle"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.7 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Name resolution of Oracle - dbi Blog<\/title>\n<meta name=\"description\" content=\"how does the name resolution of oracle find the *.ora files if the $TNS_ADMIN variable is not set. What are the default locations?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Name resolution of Oracle\" \/>\n<meta property=\"og:description\" content=\"how does the name resolution of oracle find the *.ora files if the $TNS_ADMIN variable is not set. What are the default locations?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-28T15:14:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-28T15:17:05+00:00\" \/>\n<meta name=\"author\" content=\"Martin Bracher\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Martin Bracher\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/\"},\"author\":{\"name\":\"Martin Bracher\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/2cbe1e2ea3cbf519c8ee3493042de8c9\"},\"headline\":\"Name resolution of Oracle\",\"datePublished\":\"2026-10-28T15:14:22+00:00\",\"dateModified\":\"2026-10-28T15:17:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/\"},\"wordCount\":1392,\"commentCount\":0,\"articleSection\":[\"Database management\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/\",\"name\":\"Name resolution of Oracle - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-28T15:14:22+00:00\",\"dateModified\":\"2026-10-28T15:17:05+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/2cbe1e2ea3cbf519c8ee3493042de8c9\"},\"description\":\"how does the name resolution of oracle find the *.ora files if the $TNS_ADMIN variable is not set. What are the default locations?\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/name-resolution-of-oracle\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Name resolution of Oracle\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/2cbe1e2ea3cbf519c8ee3493042de8c9\",\"name\":\"Martin Bracher\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/864a93d77bcd4cd44bab880a88f25fb5173ffbfac8e6e8775f0b4e056a4fbb56?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/864a93d77bcd4cd44bab880a88f25fb5173ffbfac8e6e8775f0b4e056a4fbb56?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/864a93d77bcd4cd44bab880a88f25fb5173ffbfac8e6e8775f0b4e056a4fbb56?s=96&d=mm&r=g\",\"caption\":\"Martin Bracher\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/martinbracher\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Name resolution of Oracle - dbi Blog","description":"how does the name resolution of oracle find the *.ora files if the $TNS_ADMIN variable is not set. What are the default locations?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/","og_locale":"en_US","og_type":"article","og_title":"Name resolution of Oracle","og_description":"how does the name resolution of oracle find the *.ora files if the $TNS_ADMIN variable is not set. What are the default locations?","og_url":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/","og_site_name":"dbi Blog","article_published_time":"2026-10-28T15:14:22+00:00","article_modified_time":"2026-10-28T15:17:05+00:00","author":"Martin Bracher","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Martin Bracher","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/"},"author":{"name":"Martin Bracher","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2cbe1e2ea3cbf519c8ee3493042de8c9"},"headline":"Name resolution of Oracle","datePublished":"2026-10-28T15:14:22+00:00","dateModified":"2026-10-28T15:17:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/"},"wordCount":1392,"commentCount":0,"articleSection":["Database management","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/","url":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/","name":"Name resolution of Oracle - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2026-10-28T15:14:22+00:00","dateModified":"2026-10-28T15:17:05+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2cbe1e2ea3cbf519c8ee3493042de8c9"},"description":"how does the name resolution of oracle find the *.ora files if the $TNS_ADMIN variable is not set. What are the default locations?","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/name-resolution-of-oracle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Name resolution of Oracle"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2cbe1e2ea3cbf519c8ee3493042de8c9","name":"Martin Bracher","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/864a93d77bcd4cd44bab880a88f25fb5173ffbfac8e6e8775f0b4e056a4fbb56?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/864a93d77bcd4cd44bab880a88f25fb5173ffbfac8e6e8775f0b4e056a4fbb56?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/864a93d77bcd4cd44bab880a88f25fb5173ffbfac8e6e8775f0b4e056a4fbb56?s=96&d=mm&r=g","caption":"Martin Bracher"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/martinbracher\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/48198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/123"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=48198"}],"version-history":[{"count":8,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/48198\/revisions"}],"predecessor-version":[{"id":48206,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/48198\/revisions\/48206"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=48198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=48198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=48198"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=48198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}