When using shared server you are actually connectind to the database via a dispatcher. You probably won't notice a difference for the most part, but there are some operations you cannot perform, like shutdown/startup from this type of connection. For these you need a dedicated connection.

The database link should still be OK provided you are logged in as the user who created it (unless it is a public database link). The usual reason for them not working is that the password of the remote user has changed and the link has not been updated to reflect this.

If the synonym points to a table via a database link and you can use the synonym, then the database link must be working. My guess is you are not using the synonym correctly when you are testing it. Try something like:

I know the reason.
I checked the state of database link by OEM last time,
I created the database link with account acc1,
but connected database with account acc2,
So the database link seems not active.
When I changed back to account acc2,it became active.