"The ship is free again," a spokesman for the Bingen Shipping and Water Authority said.
The operation to free the ship was easier and ran more smoothly than expected, he said.
No spillage of the toxic cargo was reported as the cargo tanks remained intact.
The Dutch tanker Synethese III was carrying its load of sulphuric acid from Ludwigshafen to Antwerp in Belgium when it went off course and ran aground outside the shipping channel near Oberwesel in Rhineland-Palatinate.
The river authority said the ship was double-hulled, meaning there was little danger of it sinking or spilling its toxic cargo into the river.
Shipping between Oberwesel and St. Goar was been suspended following the accident. About 240 tonnes of the cargo was transferred to another vessel before the ship could be freed.
Both ships will now travel to Duisburg for safety checks.